<!--
	Licensed to the Apache Software Foundation (ASF) under one
	or more contributor license agreements.  See the NOTICE file
	distributed with this work for additional information
	regarding copyright ownership.  The ASF licenses this file
	to you under the Apache License, Version 2.0 (the
	"License"); you may not use this file except in compliance
	with the License.  You may obtain a copy of the License at
	
	http://www.apache.org/licenses/LICENSE-2.0
	
	Unless required by applicable law or agreed to in writing,
	software distributed under the License is distributed on an
	"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
	KIND, either express or implied.  See the License for the
	specific language governing permissions and limitations
	under the License.
-->
<ipojo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="org.apache.felix.ipojo http://people.apache.org/~clement/ipojo/schemas/core.xsd" 
    xmlns="org.apache.felix.ipojo">
	<!-- Primitives handler -->
	<handler
		classname="org.apache.felix.ipojo.handlers.lifecycle.controller.ControllerHandler"
		name="controller" architecture="false"/>
	<handler
		classname="org.apache.felix.ipojo.handlers.lifecycle.callback.LifecycleCallbackHandler"
		name="callback" level="1" architecture="false" />
	<handler
		classname="org.apache.felix.ipojo.handlers.dependency.DependencyHandler"
		name="requires" level="0" architecture="false">
		<!-- <controller field="m_state"/>  -->
	</handler>
	<handler
		classname="org.apache.felix.ipojo.handlers.providedservice.ProvidedServiceHandler"
		name="provides" level="3" architecture="false" />
	<handler
		classname="org.apache.felix.ipojo.handlers.configuration.ConfigurationHandler"
		name="properties" level="1" architecture="false" />
	<handler
		classname="org.apache.felix.ipojo.handlers.architecture.ArchitectureHandler"
		name="architecture" architecture="false">
		<provides interface="org.apache.felix.ipojo.architecture.Architecture">
			<property field="m_name" name="architecture.instance"/>
		</provides>
	</handler>
</ipojo>