Remove obsolete service binder

git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1694188 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/servicebinder/pom.xml b/servicebinder/pom.xml
deleted file mode 100644
index 1ece8da..0000000
--- a/servicebinder/pom.xml
+++ /dev/null
@@ -1,74 +0,0 @@
-<!--
- 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.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <parent>
-    <groupId>org.apache.felix</groupId>
-    <artifactId>felix</artifactId>
-    <version>1.0.4</version>
-    <relativePath>../pom/pom.xml</relativePath>
-  </parent>
-  <modelVersion>4.0.0</modelVersion>
-  <packaging>bundle</packaging>
-  <name>Apache Felix Service Binder</name>
-  <artifactId>org.apache.felix.servicebinder</artifactId>
-  <version>0.9.0-SNAPSHOT</version>
-  <dependencies>
-    <dependency>
-      <groupId>${pom.groupId}</groupId>
-      <artifactId>org.osgi.core</artifactId>
-      <version>1.0.1</version>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>net.sf.kxml</groupId>
-      <artifactId>kxml2</artifactId>
-      <version>2.2.2</version>
-    </dependency>
-  </dependencies>
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.felix</groupId>
-        <artifactId>maven-bundle-plugin</artifactId>
-        <version>1.4.0</version>
-        <extensions>true</extensions>
-        <configuration>
-          <instructions>
-            <Bundle-Name>Service Binder</Bundle-Name>
-            <Bundle-SymbolicName>${pom.artifactId}</Bundle-SymbolicName>
-            <Bundle-Vendor>The Apache Software Foundation</Bundle-Vendor>
-            <!--<Bundle-Version>1.1.2</Bundle-Version>-->
-            <Bundle-Description>
-              This bundle provides a mechanism to automate service dependency management.
-            </Bundle-Description>
-            <Bundle-Activator>
-              org.apache.felix.servicebinder.impl.Activator
-            </Bundle-Activator>
-            <Export-Package>
-              org.apache.felix.servicebinder; specification-version="1.1.0",org.apache.felix.servicebinder.architecture; specification-version="1.1.0"
-            </Export-Package>
-            <Private-Package>org.apache.felix.servicebinder.*,org.kxml2.*,org.xmlpull.*</Private-Package>
-            <Import-Package>!org.apache.felix.servicebinder.*,*</Import-Package>
-            <Metadata-Location>metadata.xml</Metadata-Location>
-          </instructions>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-</project>
diff --git a/servicebinder/src/main/java/org/apache/felix/servicebinder/DependencyMetadata.java b/servicebinder/src/main/java/org/apache/felix/servicebinder/DependencyMetadata.java
deleted file mode 100644
index 4e3c41b..0000000
--- a/servicebinder/src/main/java/org/apache/felix/servicebinder/DependencyMetadata.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/* 
- * 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.
- */
-package org.apache.felix.servicebinder;
-
-/**
- * Metadata of a dependency
- *
- * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
- */
-public class DependencyMetadata
-{
-    private String m_serviceName = "";
-    private String m_filter = "";
-    private String m_bindMethod = "";
-    private String m_unbindMethod = "";
-    private String m_cardinality = "";
-    private String m_policy = "";
-
-    private boolean m_isStatic = true;
-    private boolean m_isOptional = false;
-    private boolean m_isMultiple = false;
-
-    /**
-     * Constructor
-     *
-    **/
-    DependencyMetadata(String servicename,String cardinality,String policy,String filter,String bindmethod,String unbindmethod)
-    {
-        m_serviceName = servicename;
-
-        String classnamefilter = "(objectClass="+servicename+")";
-
-        if(filter.equals("") == false)
-        {
-            m_filter = "(&"+classnamefilter+filter+")";
-        }
-        else
-        {
-            m_filter = classnamefilter;
-        }
-
-        m_bindMethod = bindmethod;
-        m_unbindMethod = unbindmethod;
-        m_cardinality = cardinality;
-        m_policy = policy;
-
-        if(policy.equals("static") == false)
-        {
-            m_isStatic = false;
-        }
-
-        if(cardinality.equals("0..1") || cardinality.equals("0..n"))
-        {
-            m_isOptional = true;
-        }
-
-        if(cardinality.equals("0..n") || cardinality.equals("1..n"))
-        {
-            m_isMultiple = true;
-        }
-    }
-
-    /**
-     * Returns the name of the required service
-     *
-     * @return the name of the required service
-    **/
-    public String getServiceName()
-    {
-        return m_serviceName;
-    }
-
-    /**
-     * Returns the filter
-     *
-     * @return A string with the filter
-    **/
-    public String getFilter()
-    {
-        return m_filter;
-    }
-
-    /**
-     * Get the name of the Bind method
-     *
-     * @return a String with the name of the BindMethod
-    **/
-    public String getBindMethodName()
-    {
-        return m_bindMethod;
-    }
-
-    /**
-     * Get the name of the Unbind method
-     *
-     * @return a String with the name of the Unbind method
-    **/
-    public String getUnbindMethodName()
-    {
-        return m_unbindMethod;
-    }
-
-
-    /**
-     * Test if dependency's binding policy is static
-     *
-     * @return true if static
-    **/
-    public boolean isStatic()
-    {
-        return m_isStatic;
-    }
-
-    /**
-     * Test if dependency is optional (0..1 or 0..n)
-     *
-     * @return true if the dependency is optional
-    **/
-    public boolean isOptional()
-    {
-        return m_isOptional;
-    }
-
-    /**
-     * Test if dependency is multiple (0..n or 1..n)
-     *
-     * @return true if the dependency is multiple
-    **/
-    public boolean isMultiple()
-    {
-        return m_isMultiple;
-    }
-
-    /**
-     * Get the cardinality as a string
-     *
-     * @return the cardinality
-    **/
-    public String getCardinality()
-    {
-        return m_cardinality;
-    }
-
-    /**
-     * Get the policy as a string
-     *
-     * @return the policy
-    **/
-    public String getPolicy()
-    {
-        return m_policy;
-    }
-}
diff --git a/servicebinder/src/main/java/org/apache/felix/servicebinder/GenericActivator.java b/servicebinder/src/main/java/org/apache/felix/servicebinder/GenericActivator.java
deleted file mode 100644
index 771f913..0000000
--- a/servicebinder/src/main/java/org/apache/felix/servicebinder/GenericActivator.java
+++ /dev/null
@@ -1,330 +0,0 @@
-/* 
- * 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.
- */
-package org.apache.felix.servicebinder;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import java.io.InputStream;
-
-import org.apache.felix.servicebinder.architecture.DependencyChangeEvent;
-import org.apache.felix.servicebinder.architecture.InstanceChangeEvent;
-import org.apache.felix.servicebinder.impl.ArchitectureServiceImpl;
-import org.apache.felix.servicebinder.parser.KxmlParser;
-import org.osgi.framework.BundleActivator;
-import org.osgi.framework.BundleContext;
-
-
-import java.io.BufferedReader;
-import java.io.InputStreamReader;
-
-/**
- * The GenericActivator, it will read information from the metadata.xml file
- * and will create the corresponding instance managers
- *
- * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
- */
-abstract public class GenericActivator implements BundleActivator
-{
-    private BundleContext m_context = null;
-    private List m_instanceManagers = new ArrayList();
-
-    private static boolean m_trace = false;
-    private static boolean m_error = true;
-
-    private static String m_version = "1.1.1 (17062004)";
-
-    // Static initializations based on system properties
-    static {
-        // Get system properties to see if traces or errors need to be displayed
-        String result = System.getProperty("servicebinder.showtrace");
-        if(result != null && result.equals("true"))
-        {
-            m_trace = true;
-        }
-        result = System.getProperty("servicebinder.showerrors");
-        if(result != null && result.equals("false"))
-        {
-            m_error = false;
-        }
-        result = System.getProperty("servicebinder.showversion");
-        if(result != null && result.equals("true"))
-        {
-            System.out.println("[ ServiceBinder version = "+m_version+" ]\n");
-        }        
-    }
-
-    public GenericActivator()
-    {
-    }
-
-    /**
-    * Called upon starting of the bundle. This method invokes initialize() which
-    * parses the meta data and creates the instance managers
-    *
-    * @param   context  The bundle context passed by the framework
-    * @exception   Exception any exception thrown from initialize
-    */
-    public void start(BundleContext context) throws Exception
-    {
-        m_context = context;
-        try
-        {
-            initialize();
-        }
-        catch (Exception e)
-        {
-            GenericActivator.error("GenericActivator : in bundle ["
-                + context.getBundle().getBundleId() + "] : " + e);
-            e.printStackTrace();
-            throw e;
-        }
-    }
-
-    /**
-    * Gets the MetaData location, parses the meta data and requests the processing
-    * of binder instances
-    *
-    * @throws java.io.FileNotFoundException if the metadata file is not found
-    * @throws javax.xml.parsers.ParserConfigurationException
-    * @throws org.xml.sax.SAXException
-    * @throws java.io.IOException
-    * @throws java.lang.ClassNotFoundException it the instance class is not found
-    * @throws java.lang.NoSuchMethodException if binder methods are not found
-    * @throws org.osgi.framework.InvalidSyntaxException if the filter has an incorrect syntax
-    * @throws Exception if any exception is thrown during the validation of the InstanceManagers
-    */
-    private void initialize() throws Exception
-    {
-        // Get the Metadata-Location value from the manifest
-
-        String metadataLocation = "";
-        //Dictionary dict = m_context.getBundle().getHeaders();
-        
-        metadataLocation = (String) m_context.getBundle().getHeaders().get("Metadata-Location");
-
-        if (metadataLocation == null)
-        {
-            throw new java.io.FileNotFoundException("Metadata-Location entry not found in the manifest");
-        }
-
-        if (metadataLocation.startsWith("/") == false)
-        {
-            metadataLocation="/"+metadataLocation;
-        }
-
-        InputStream stream = getClass().getResourceAsStream(metadataLocation);
-
-        if (stream == null)
-        {
-            throw new java.io.FileNotFoundException("MetaData file not found at:"+metadataLocation);
-        }
-
-        // Create the parser
-
-        XmlHandler handler = new XmlHandler();
-        BufferedReader in = new BufferedReader(new InputStreamReader(stream));
-        KxmlParser parser = new KxmlParser(in);
-
-        parser.parseXML(handler);
-
-        // Create An instance manager for every entry
-
-        Iterator i = handler.getInstanceMetadatas().iterator();
-
-        while (i.hasNext())
-        {
-            InstanceMetadata descriptor = (InstanceMetadata) i.next();
-                        
-            if(descriptor.isFactory()) 
-            {
-                // NOT YET SUPPORTED IN THIS VERSION
-            }
-            else // deployment instance
-            {
-                // create the instance manager
-                InstanceManager currentinstance = new InstanceManager(this,descriptor);
-                // start managing lifecycle
-                currentinstance.validate();
-            }
-        }
-    }
-
-    /**
-    * Stop method that destroys all the instance managers
-    *
-    * @param   context The Bundle Context passed by the framework
-    * @exception Exception any exception thrown during destruction of the instance managers
-    */
-    public void stop(BundleContext context) throws java.lang.Exception
-    {
-        GenericActivator.trace("GenericActivator : Bundle ["+context.getBundle().getBundleId()+"] will destroy "+m_instanceManagers.size()+" instances");
-
-        while (m_instanceManagers.size() !=0 )
-        {
-            InstanceManager current = (InstanceManager)m_instanceManagers.get(0);
-            try
-            {
-                current.destroy();
-            }
-            catch(Exception e)
-            {
-                GenericActivator.error("GenericActivator : Exception during invalidate : "+e);
-                e.printStackTrace();
-            }
-        }
-
-        m_context = null;
-
-        GenericActivator.trace("GenericActivator : Bundle ["+context.getBundle().getBundleId()+"] STOPPED");
-    }
-
-    /**
-    * Returns the list of instance references currently associated to this activator
-    *
-    * @return the list of instance references
-    */
-    protected List getInstanceReferences()
-    {
-        return m_instanceManagers;
-    }
-
-    /**
-    * Returns the BundleContext
-    *
-    * @return the BundleContext
-    */
-    protected BundleContext getBundleContext()
-    {
-        return m_context;
-    }
-
-    /**
-    * Add an instance manager to the list
-    *
-    * @param instance an instance manager
-    */
-    synchronized void addInstanceManager(InstanceManager instance)
-    {
-        ArchitectureServiceImpl.addInstanceReference(instance);
-
-        m_instanceManagers.add(instance);
-    }
-
-    /**
-    * Removes a binder instance from the list
-    *
-    * @param instance an instance manager
-    */
-    synchronized void removeInstanceManager(InstanceManager instance)
-    {
-        ArchitectureServiceImpl.removeInstanceReference(instance);
-
-        m_instanceManagers.remove(instance);
-    }
-
-    /**
-     * Method to display traces
-     *
-     * @param s a string to be displayed
-    **/
-    static void trace(String s)
-    {
-        if(m_trace)
-        {
-            System.out.println("--- "+s);
-        }
-    }
-
-    /**
-     * Method to display errors
-     *
-     * @param s a string to be displayed
-    **/
-    static void error(String s)
-    {
-        if(m_error)
-        {
-            System.err.println("### "+s);
-        }
-    }
-
-    /**
-     * Method called before an object implementing services is registered
-     * in the OSGi framework. This method is provided so that subclasses of
-     * the generic activator may proxy the object. The default implementation
-     * returns the passed in object.
-     *
-     * @param obj the instance object
-     * @param descriptor the instance descriptor that provides information relevant to
-     *          the instance object
-    **/
-    protected Object proxyProvidedServiceObject(Object obj, InstanceMetadata descriptor)
-    {
-        return obj;
-    }
-
-    /**
-     * Method called before the binding of the service object occurs.
-     * This method is provided so that subclasses of the generic activator
-     * may proxy the object. The default implementation returns the passed in object.
-     *
-     * @param obj the instance object
-     * @param descriptor the dependency descriptor that provides information relevant to
-     *          the service object
-    **/
-    protected Object proxyRequiredServiceObject(Object obj, DependencyMetadata descriptor)
-    {
-        return obj;
-    }
-
-    /**
-     * Fires an event when an instance has changed
-     * The generic activator always requests a reference of EvtGeneratorImpl
-     * since this class can be instantiated at anytime since it is
-     * the service implementation.
-     *
-     * @evt The InstanceChangeEvent
-    **/
-    void fireInstanceChangeEvent(InstanceChangeEvent evt)
-    {
-        ArchitectureServiceImpl evtGenerator = ArchitectureServiceImpl.getReference();
-
-        if(evtGenerator != null)
-        {
-            evtGenerator.fireInstanceChangeEvent(evt);
-        }
-    }
-
-    /**
-     * Fires an event when a dependency has changed
-     *
-     * @evt The InstanceChangeEvent
-     **/
-    void fireDependencyChangeEvent(DependencyChangeEvent evt)
-    {
-        ArchitectureServiceImpl evtGenerator = ArchitectureServiceImpl.getReference();
-
-        if(evtGenerator != null)
-        {
-            evtGenerator.fireDependencyChangeEvent(evt);
-        }
-    }
-}
diff --git a/servicebinder/src/main/java/org/apache/felix/servicebinder/InstanceManager.java b/servicebinder/src/main/java/org/apache/felix/servicebinder/InstanceManager.java
deleted file mode 100644
index ccf9fff..0000000
--- a/servicebinder/src/main/java/org/apache/felix/servicebinder/InstanceManager.java
+++ /dev/null
@@ -1,1280 +0,0 @@
-/* 
- * 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.
- */
-package org.apache.felix.servicebinder;
-
-import java.util.Properties;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.HashMap;
-
-import org.apache.felix.servicebinder.architecture.Dependency;
-import org.apache.felix.servicebinder.architecture.DependencyChangeEvent;
-import org.apache.felix.servicebinder.architecture.Instance;
-import org.apache.felix.servicebinder.architecture.InstanceChangeEvent;
-import org.apache.felix.servicebinder.impl.ArchitectureServiceImpl;
-import org.osgi.framework.ServiceRegistration;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.InvalidSyntaxException;
-import org.osgi.framework.ServiceListener;
-import org.osgi.framework.ServiceEvent;
-import org.osgi.framework.ServiceReference;
-import org.osgi.framework.Bundle;
-
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Method;
-import java.lang.reflect.InvocationTargetException;
-
-/**
- * A InstanceManager is created for every component instance. *  * When the InstanceManager is instantiated, a collection of DependencyManagers is * created. Each dependency manager corresponds to a required service *  * A InstanceManager follows a sequence of clearly defined steps. *  * 1.- Creation : the binder instance is created, its state becomes CREATED. This step is further divided *                in the following substeps: *                  - The binder instance checks if all of the dependencies are valid, if this *                    is false, it returns. *                  - If the dependendencies are valid, its state becomes executing. The object from *                    the instance class is created (if this object receives a ServiceBinderContext as *                    a parameter in its constructor, the context is passed to it. *                  - The validate() method is called on the dependency managers, this will cause *                    calls on the binding methods to occur *                  - The binder instance adds itself to the list of binder instances in the activator *                  - The binder instance registers the services implemented by the instance object. *  * 2.- Disposal : *  * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
- */
-
-public class InstanceManager implements InstanceReference, Instance
-{
-    // The values ranging from 0 to 3 are public and are defined in InstanceReference
-    static final int INSTANCE_CREATING = 4;
-    static final int INSTANCE_VALIDATING = 5;
-    static final int INSTANCE_INVALIDATING = 6;
-    static final int INSTANCE_DESTROYING = 7;
-
-    static final String m_states[]={"CREATED","VALID","INVALID",
-                                    "DESTROYED","CREATING","VALIDATING",
-                                    "INVALIDATING","DESTROYING"};
-
-    // The state of this instance manager
-    private int m_state = INSTANCE_CREATING;
-
-    /**
-     * 
-     * @uml.property name="m_instanceMetadata"
-     * @uml.associationEnd multiplicity="(0 1)"
-     */
-    // The metadata
-    private InstanceMetadata m_instanceMetadata;
-
-
-    // The object that implements the service and that is bound to other services
-    private Object m_implementorObject;
-
-    // The dependency managers that manage every dependency
-    private List m_dependencyManagers;
-
-    // The ServiceRegistration
-    private ServiceRegistration m_serviceRegistration;
-
-    /**
-     * 
-     * @uml.property name="m_activator"
-     * @uml.associationEnd multiplicity="(0 1)"
-     */
-    // A reference to the GenericActivator
-    private GenericActivator m_activator;
-
-    /**
-     * 
-     * @uml.property name="m_sbcontext"
-     * @uml.associationEnd multiplicity="(0 1)"
-     */
-    // The context that will be passed to the objects
-    private ServiceBinderContextImpl m_sbcontext;
-
-    /**
-     * 
-     * @uml.property name="m_instanceListener"
-     * @uml.associationEnd multiplicity="(0 1)"
-     */
-    // Listeners to validation events
-    private InstanceReferenceListener m_instanceListener = null;
-
-    // Properties that can be attached to te InstanceManager
-    private Properties m_localProperties = new Properties();
-    
-    // Flag that indicates that activate was called
-    private boolean m_activateCalled = false;
-
-    /**
-    * Constructor that creates a collection of dependency managers that will be in
-    * charge of the different dependencies for a particular instance.
-    *
-    * @param   activator A reference to the generic activator
-    * @param   descriptor an InstanceMetadata that contains information found in the descriptor file
-    * @throws  java.lang.ClassNotFoundException if the instance class (declared in the descriptor file) is not found
-    * @throws  java.lang.NoSuchMethodException if the bind or unbind methods are not found on the instance class
-    * @throws  org.osgi.framework.InvalidSyntaxException if the filter declared in the requires entry has an invalid syntax
-    **/
-    InstanceManager(GenericActivator activator,InstanceMetadata descriptor)
-        throws ClassNotFoundException, NoSuchMethodException, InvalidSyntaxException
-    {
-        m_activator = activator;
-
-        m_instanceMetadata = descriptor;
-
-        m_dependencyManagers = new ArrayList();
-
-        if (m_instanceMetadata.getDependencies().size() != 0)
-        {
-            Iterator dependencyit = m_instanceMetadata.getDependencies().iterator();
-
-            while(dependencyit.hasNext())
-            {
-                DependencyMetadata currentdependency = (DependencyMetadata)dependencyit.next();
-
-                DependencyManager depmanager = new DependencyManager(currentdependency);
-
-                m_dependencyManagers.add(depmanager);
-
-                // Register the dependency managers as listeners to service events so that they begin
-                // to manage the dependency autonomously
-
-                m_activator.getBundleContext().addServiceListener(depmanager,depmanager.getDependencyMetadata().getFilter());
-            }
-        }
-
-        m_sbcontext = new ServiceBinderContextImpl(this);
-
-        // Add this instance manager to the Generic activator list
-        m_activator.addInstanceManager(this);
-
-        setState(INSTANCE_CREATED);
-    }
-
-    /**
-    * Validate this Instance manager.
-    *
-    * CONCURRENCY NOTE: This method can be called either after an instance manager is created
-    * or after the instance is validated again after by the instance manager itself
-    */
-    synchronized void validate()
-    {
-        if (m_state == INSTANCE_VALID)
-        {
-            return;
-        }
-        else if (m_state != INSTANCE_INVALID && m_state !=INSTANCE_CREATED)
-        {
-            GenericActivator.error("InstanceManager : create() called for a non INVALID or CREATED InstanceManager ("+m_states[m_state]+")");
-            return;
-        }
-
-        setState(INSTANCE_VALIDATING);
-
-        // Test if all dependency managers are valid
-
-        Iterator it = m_dependencyManagers.iterator();
-
-        while (it.hasNext())
-        {
-            // It is not possible to call the isValid method yet in the DependencyManager
-            // since they have not been initialized yet, but we can't call initialize
-            // since the object where bindings will be done has not been created.
-            // This test is necessary, because we don't want to instantiate
-            // the object if the dependency managers won't be valid.
-            DependencyManager dm = (DependencyManager)it.next();
-            if (dm.getRequiredServiceRefs() == null && dm.getDependencyMetadata().isOptional() == false)
-            {
-                setState(INSTANCE_INVALID);
-                return;
-            }
-        }
-
-        // everything ok to go...
-
-        try
-        {
-            Class c = m_activator.getClass().getClassLoader().loadClass(m_instanceMetadata.getImplementorName());
-            try
-            {
-                Constructor cons = c.getConstructor(new Class[] {ServiceBinderContext.class});
-                m_implementorObject = cons.newInstance(new Object[] {m_sbcontext});
-            }
-            catch(NoSuchMethodException ex)
-            {
-                // Aparently he doesn't want a ServiceBinderContext...
-            }
-
-            // Create from no-param constructor
-            if (m_implementorObject == null)
-            {
-                m_implementorObject = c.newInstance();
-            }
-
-            /* is it a factory?
-            if (m_implementorObject instanceof GenericFactory)
-            {
-                ((GenericFactory) m_implementorObject).setActivator(m_activator, this);
-            }
-            */
-
-            // Allow somebody to proxy the object through the proxyProvidedServiceObject method
-            // in the activator
-            Object proxy = m_activator.proxyProvidedServiceObject(m_implementorObject, this.getInstanceMetadata());
-            if (proxy != null)
-            {
-                m_implementorObject = proxy;
-            }
-            else
-            {
-                GenericActivator.error("InstanceManager : Proxy method returned a null value");
-            }
-        }
-        catch (Throwable t)
-        {
-            // failure at creation
-            GenericActivator.error("InstanceManager : Error during instantiation : "+t);
-            t.printStackTrace();
-            _invalidate();
-            return;
-        }
-        
-        // initial bindings
-
-        it = m_dependencyManagers.iterator();
-
-        while (it.hasNext())
-        {
-            DependencyManager dm = (DependencyManager)it.next();
-            if (dm.initialize() == false)
-            {
-                _invalidate();
-                return;
-            }
-        }
-        
-        // We need to check if we are still validating because it is possible that when we
-        // registered the service above our thread causes an instance to become valid which
-        // then registered a service that then generated an event that we needed that
-        // caused validate() to be called again, thus if we are not still VALIDATING, it
-        // means we are already VALID.
-        if (m_state == INSTANCE_VALIDATING)
-        {
-            // activate
-
-            if (m_implementorObject instanceof Lifecycle)
-            {
-                try
-                {
-                    ((Lifecycle)m_implementorObject).activate();
-                    this.m_activateCalled=true;
-                }
-                catch(Exception e)
-                {
-                    GenericActivator.error("InstanceManager : exception during activate:"+e);
-                    e.printStackTrace();
-                    _invalidate();
-                    return;
-                }
-            }
-
-            // validated!
-
-            fireInstanceReferenceValidated();
-            setState(INSTANCE_VALID);
-        }
-        
-
-        // register services
-
-        boolean reg = requestRegistration();
-
-        if (!reg)
-        {
-            GenericActivator.error("InstanceManager : registration of the services failed...");
-            _invalidate();
-            return;
-        }
-        
-        // Configuration ended successfuly.
-
-    }
-
-    /**
-     * This method invalidates the InstanceManager
-     *
-     * CONCURRENCY NOTE: This method may be called either from application code or event thread.
-    **/
-    synchronized void invalidate()
-    {
-        if (m_state == INSTANCE_INVALID)
-        {
-            return;
-        }
-        else if (m_state != INSTANCE_VALID && m_state != INSTANCE_DESTROYING)
-        {
-            GenericActivator.error("InstanceManager : invalidate() called for a non VALID InstanceManager ("+m_states[m_state]+")");
-            return;
-        }
-
-        if (m_state != INSTANCE_DESTROYING)
-        {
-            setState(INSTANCE_INVALIDATING);
-        }
-
-        // Fire invalidating events
-        fireInstanceReferenceInvalidating();
-
-        _invalidate();
-
-
-    }
-
-    /**
-     * this method invalidates the InstanceManager without performing any of the callbacks
-     * associated with the Lifecycle interface or the InstanceReference event listeners.
-    **/
-    private void _invalidate()
-    {
-        // Unregister services
-
-        requestUnregistration();
-        
-        if(m_activateCalled==true)
-        {        
-            // Call deactivate on the Lifecycle
-
-            if (m_implementorObject instanceof Lifecycle)
-            {
-                try
-                {
-                    ((Lifecycle)m_implementorObject).deactivate();
-                }
-                catch(Exception e)
-                {
-                    GenericActivator.error("InstanceManager : exception during call to deactivate():"+e);
-                }
-            }
-
-        }
-
-        // Unbind all services
-
-        Iterator it = m_dependencyManagers.iterator();
-
-        while (it.hasNext())
-        {
-            DependencyManager dm = (DependencyManager)it.next();
-            dm.unbindAll();
-        }
-
-        //m_activator.removeInstanceManager(this);
-
-        // remove all instances from a factory
-
-        /*
-        if (m_implementorObject instanceof GenericFactory)
-        {
-            ((GenericFactory)m_implementorObject).invalidateInstances();
-        }
-        */
-
-        // Release the object reference
-
-        m_implementorObject = null;
-
-        GenericActivator.trace("InstanceManager from bundle ["
-           + m_activator.getBundleContext().getBundle().getBundleId() + "] was invalidated.");
-
-        if (m_state != INSTANCE_DESTROYING)
-        {
-            setState(INSTANCE_INVALID);
-        }
-    }
-
-    /**
-     * This method should be called to completely remove the InstanceManager from the system.
-     * This means that the dependency managers will stop listening to events.
-     *
-     * CONCURRENCY NOTE: This method is only called from the GenericActivator, which is
-     *                   essentially application code and not via events.
-    **/
-    synchronized void destroy()
-    {
-        if (m_state == INSTANCE_DESTROYED)
-        {
-            return;
-        }
-
-        // Theoretically this should never be in any state other than VALID or INVALID,
-        // because validate is called right after creation.
-        boolean invalidatefirst = (m_state == INSTANCE_VALID);
-
-        setState(INSTANCE_DESTROYING);
-
-        // Stop the dependency managers to listen to events...
-        Iterator it = m_dependencyManagers.iterator();
-
-        while (it.hasNext())
-        {
-            DependencyManager dm = (DependencyManager)it.next();
-            m_activator.getBundleContext().removeServiceListener(dm);
-        }
-
-        if (invalidatefirst)
-        {
-            invalidate();
-        }
-
-        m_dependencyManagers.clear();
-
-        m_instanceListener = null;
-
-        GenericActivator.trace("InstanceManager from bundle ["
-           + m_activator.getBundleContext().getBundle().getBundleId() + "] was destroyed.");
-
-        m_activator.removeInstanceManager(this);
-        setState(INSTANCE_DESTROYED);
-
-        m_activator = null;
-    }
-
-    /**
-    * Returns the InstanceMetadata
-    */
-    public InstanceMetadata getInstanceMetadata()
-    {
-        return m_instanceMetadata;
-    }
-
-    /**
-    * Get the object that is implementing this descriptor
-    *
-    * @return the object that implements
-    */
-    public Object getObject()
-    {
-        return m_implementorObject;
-    }
-
-    /**
-    * Request the registration of the service provided by this binder instance
-    *
-    * @return returns false if registration was not successful,
-    *                returns true if registration was successful
-    **/
-    boolean requestRegistration()
-    {
-        if (!m_instanceMetadata.instanceRegistersServices())
-        {
-            return true;
-        }
-        else if (m_implementorObject == null)
-        {
-            GenericActivator.error("GenericActivator : Cannot register, implementor object not created!");
-            return false;
-        }
-        else if (m_serviceRegistration != null)
-        {
-            GenericActivator.error("GenericActivator : Cannot register, binder instance already registered :"
-                + m_instanceMetadata.getImplementorName());
-            return true;
-        }
-
-        // Check validity of dependencies before registering !
-        Iterator it = m_dependencyManagers.iterator();
-        while (it.hasNext())
-        {
-            DependencyManager dm = (DependencyManager)it.next();
-            if (dm.isValid() == false)
-                return false;
-        }
-
-        // When registering a factory, add an instanceClass property which is an array
-        // of service interfaces implemented by the objects created by the factory.
-
-        if (m_instanceMetadata.isFactory())
-        {
-            if(m_instanceMetadata.getProperties().get("instanceClass") == null)
-            {
-                m_instanceMetadata.getProperties().put("instanceClass",m_instanceMetadata.getInstantiates().getInterfaces());
-            }
-        }
-
-        m_serviceRegistration = m_activator.getBundleContext().registerService(
-            m_instanceMetadata.getInterfaces(), m_implementorObject, m_instanceMetadata.getProperties());
-
-        GenericActivator.trace("Generic Activator : InstanceManager inside bundle ["
-            + m_activator.getBundleContext().getBundle().getBundleId()
-            + "] successfully registered its services !");
-
-        return true;
-    }
-
-
-    /**
-    *
-    * Request the unfegistration of the service provided by this binder instance
-    *
-    **/
-    void requestUnregistration()
-    {
-        if (m_serviceRegistration != null)
-        {
-            m_serviceRegistration.unregister();
-            m_serviceRegistration = null;
-
-            GenericActivator.trace("Generic Activator : InstanceManager inside bundle ["
-                + m_activator.getBundleContext().getBundle().getBundleId()
-                + "] unregistered its services !");
-
-         }
-    }
-
-    /**
-    * Get the state
-    */
-    public int getState()
-    {
-        return m_state;
-    }
-
-    /**
-    * Get the state
-    */
-    public long getBundleId()
-    {
-        return m_activator.getBundleContext().getBundle().getBundleId();
-    }
-
-    /**
-     * Get a property associated with this instance. For classes
-     * implementing this method, special care must be taken for
-     * values implementing <tt>InstanceReference.ValueHolder</tt>.
-     * In such cases, the value itself should not be returned, but
-     * the value of <tt>InstanceReference.ValueHolder.get()</tt>
-     * should be returned instead. This may be used to defer
-     * creating value objects in cases where creating the value
-     * object is expensive.
-     * @param name the name of the property to retrieve.
-     * @return the value of the associated property or <tt>null</tt>.
-    **/
-    public Object get(String name)
-    {
-        GenericActivator.trace("InstanceManager.get("+name+")");
-
-        if(name.equals(InstanceReference.INSTANCE_STATE))
-        {
-            return new Integer(m_state);
-        }
-        else if(name.equals(InstanceReference.INSTANCE_METADATA))
-        {
-            return getInstanceMetadata();
-        }
-        else if(name.equals(InstanceReference.INSTANCE_BUNDLE))
-        {
-            return new Integer((int) getBundleId());
-        }
-        else if(name.equals(InstanceReference.INSTANCE_DEPENDENCIES))
-        {
-            return getDependencies();
-        }
-        else
-        {
-            Object ret = m_localProperties.get(name);
-
-            if (ret != null)
-            {
-                if (ret instanceof ValueHolder)
-                {
-                    return ((ValueHolder)ret).get(this);
-                }
-                return ret;
-            }
-
-            return m_instanceMetadata.getProperties().get(name);
-        }
-
-    }
-
-    /**
-     * Associate a property with this instance. For classes
-     * implementing this method, special care must be taken for
-     * values implementing <tt>InstanceReference.ValueHolder</tt>.
-     * In such cases, the value itself should not be returned, but
-     * the value of <tt>InstanceReference.ValueHolder.get()</tt>
-     * should be returned instead. This may be used to defer
-     * creating value objects in cases where creating the value
-     * object is expensive.
-     * @param name the name of the property to add.
-     * @param obj the value of the property.
-    **/
-    public void put(String name, Object obj)
-    {
-        m_localProperties.put(name,obj);
-    }
-
-    /**
-     * Adds an instance reference listener to listen for changes to
-     * the availability of the underlying object associated with this
-     * instance reference.
-     * @param l the listener to add.
-    **/
-    public void addInstanceReferenceListener(InstanceReferenceListener l)
-    {
-        m_instanceListener = StateChangeMulticaster.add(m_instanceListener, l);
-    }
-
-    /**
-     * Removes an instance reference listener.
-     * @param l the listener to remove.
-    **/
-    public void removeInstanceReferenceListener(InstanceReferenceListener l)
-    {
-        m_instanceListener = StateChangeMulticaster.remove(m_instanceListener, l);
-    }
-
-    /**
-     * Fires an event when the instance reference has been validated
-    **/
-    protected void fireInstanceReferenceValidated()
-    {
-        try
-        {
-            if (m_instanceListener != null)
-            {
-                m_instanceListener.validated(new InstanceReferenceEvent(this));
-            }
-        }
-        catch(Exception ex)
-        {
-            // Ignore any exception
-        }
-    }
-
-    /**
-     * Fires an event when the instance reference is invalidating
-    **/
-    protected void fireInstanceReferenceInvalidating()
-    {
-        try
-        {
-            if (m_instanceListener != null)
-            {
-                m_instanceListener.invalidating(new InstanceReferenceEvent(this));
-            }
-        }
-        catch(Exception ex)
-        {
-            // Ignore any exception
-        }
-    }
-
-    /**
-     * sets the state of the instanceManager
-    **/
-    synchronized void setState(int newState)
-    {
-        m_state = newState;
-
-        if(m_state == INSTANCE_CREATED || m_state == INSTANCE_VALID || m_state == INSTANCE_INVALID || m_state == INSTANCE_DESTROYED)
-        {
-            m_activator.fireInstanceChangeEvent(new InstanceChangeEvent(this,m_instanceMetadata,m_state));
-        }
-    }
-
-    /**
-     * Get an array of dependencies for this instance. This method is declared
-     * in the Instance interface
-     *
-     * @return an array of Dependencies
-    **/
-    public Dependency [] getDependencies()
-    {
-        Dependency deps [] = new Dependency[m_dependencyManagers.size()];
-        return (Dependency[]) m_dependencyManagers.toArray(deps);
-    }
-
-    /**
-     * Get a list of child instances in case this is a factory
-     *
-     * @return an array of Instances
-    **/
-     public Instance[] getChildInstances()
-    {
-        /*
-        if(m_implementorObject != null && m_implementorObject instanceof GenericFactory)
-        {
-            List instanceRefs = ((GenericFactory)m_implementorObject).getInstanceReferences();
-            Instance [] instances = new Instance[instanceRefs.size()];
-            instances = (Instance [])instanceRefs.toArray(instances);
-            return instances;
-        }
-        */
-        return null;
-    }
-
-/**
- * This class implements the ServiceBinderContext, which cannot be directly * implemented by the activator because of the getInstanceReference() method
- */
-
-    class ServiceBinderContextImpl implements ServiceBinderContext
-    {
-
-        /**
-         * 
-         * @uml.property name="m_parent"
-         * @uml.associationEnd multiplicity="(0 1)"
-         */
-        private InstanceReference m_parent;
-
-        ServiceBinderContextImpl(InstanceReference parent)
-        {
-            m_parent = parent;
-        }
-
-        /**
-         * Get the bundle context
-        **/
-        public BundleContext getBundleContext()
-        {
-            return m_activator.getBundleContext();
-        }
-
-        /**
-         * Return all of the InstanceReferences created in the same bundle
-        **/
-        public List getInstanceReferences()
-        {
-            return m_activator.getInstanceReferences();
-        }
-
-        /**
-         * Get the parent InstanceReference
-        **/
-        public InstanceReference getInstanceReference()
-        {
-            return m_parent;
-        }
-    }
-
-/**
- * The DependencyManager task is to listen to service events and to call the * bind/unbind methods on a given object. It is also responsible for requesting * the unregistration of a service in case a dependency is broken.
- */
-
-    class DependencyManager implements ServiceListener, Dependency
-    {
-
-        /**
-         * 
-         * @uml.property name="m_dependencyMetadata"
-         * @uml.associationEnd multiplicity="(0 1)"
-         */
-        private DependencyMetadata m_dependencyMetadata;
-
-        private Map m_boundServices = new HashMap();
-        private Method m_bindMethod;
-        private Method m_unbindMethod;
-        private boolean m_isValid;
-        private int m_depState;
-        private boolean m_receivesRef = false;
-
-        /**
-         * Constructor that receives several parameters.
-         *
-         * @param   dependency  An object that contains data about the dependency
-        **/
-        DependencyManager(DependencyMetadata dependency) throws ClassNotFoundException, NoSuchMethodException
-        {
-            m_dependencyMetadata = dependency;
-            m_isValid = false;
-
-            m_bindMethod = getTargetMethod(m_dependencyMetadata.getBindMethodName(),InstanceManager.this.getInstanceMetadata().getImplementorName(),m_dependencyMetadata.getServiceName());
-            m_unbindMethod = getTargetMethod(m_dependencyMetadata.getUnbindMethodName(),InstanceManager.this.getInstanceMetadata().getImplementorName(),m_dependencyMetadata.getServiceName());
-
-            setStateDependency(DependencyChangeEvent.DEPENDENCY_CREATED);
-        }
-
-        /**
-         * initializes a dependency. This method binds all of the service occurrences to the instance object
-         *
-         * @return true if the operation was successful, false otherwise
-        **/
-        boolean initialize()
-        {
-            if(getObject() == null)
-            {
-                return false;
-            }
-
-            ServiceReference refs[] = getRequiredServiceRefs();
-
-            if (refs == null && m_dependencyMetadata.isOptional() == false)
-            {
-                m_isValid = false;
-                setStateDependency(DependencyChangeEvent.DEPENDENCY_INVALID);
-                return m_isValid;
-            }
-
-            m_isValid = true;
-            setStateDependency(DependencyChangeEvent.DEPENDENCY_VALID);
-
-            if (refs != null)
-            {
-                int max = 1;
-                boolean retval = true;
-
-                if (m_dependencyMetadata.isMultiple() == true)
-                {
-                    max = refs.length;
-                }
-
-                for (int index = 0; index < max; index++)
-                {
-                    retval = callBindMethod(refs[index]);
-                    if(retval == false && (max == 1))
-                    {
-                        // There was an exception when calling the bind method
-                        GenericActivator.error("Dependency Manager: Possible exception in the bind method during initialize()");
-                        m_isValid = false;
-                        setStateDependency(DependencyChangeEvent.DEPENDENCY_INVALID);
-                        return m_isValid;
-                    }
-                }
-            }
-
-            return m_isValid;
-        }
-
-        /**
-         * Called upon a service event. This method is responsible for calling the
-         * binding and unbinding methods and also to request the eventual unregistering
-         * of a service when a dependency breaks
-         *
-         * @param evt  The ServiceEvent
-        **/
-        public void serviceChanged(ServiceEvent evt)
-        {
-            synchronized (InstanceManager.this)
-            {
-                // If the object is being created or destroyed, we can safely ignore events.
-                if (m_state == INSTANCE_DESTROYING || m_state == INSTANCE_DESTROYED || m_state == INSTANCE_CREATING || m_state == INSTANCE_CREATED)
-                {
-                    return;
-                }
-
-                // If we are in the process of invalidating, it is not necessary to pass
-                // unregistration events, since we are unbinding everything anyway.
-                else if (m_state == INSTANCE_INVALIDATING && evt.getType() == ServiceEvent.UNREGISTERING)
-                {
-                    return;
-                }
-
-                // We do not have an entry for VALIDATING because it is reentrant.
-
-                // A service is unregistering
-                if (evt.getType() == ServiceEvent.UNREGISTERING)
-                {
-                    if (m_boundServices.keySet().contains(evt.getServiceReference()) == true)
-                    {
-                        // A static dependency is broken the instance manager will be invalidated
-                        if (m_dependencyMetadata.isStatic())
-                        {
-                            m_isValid = false;
-                            setStateDependency(DependencyChangeEvent.DEPENDENCY_INVALID);
-                            try
-                            {
-                                GenericActivator.trace("Dependency Manager: Static dependency is broken");
-                                invalidate();
-                                GenericActivator.trace("Dependency Manager: RECREATING");
-                                validate();
-                            }
-                            catch(Exception e)
-                            {
-                                e.printStackTrace();
-                            }
-                        }
-                        // dynamic dependency
-                        else
-                        {
-                            // Release references to the service, call unbinder method
-                            // and eventually request service unregistration
-
-                            callUnbindMethod(evt.getServiceReference());
-
-                            // The only thing we need to do here is check if we can reinitialize
-                            // once the bound services becomes zero. This tries to repair dynamic
-                            // 1..1 or rebind 0..1, since replacement services may be available.
-                            // In the case of aggregates, this will only invalidate them since they
-                            // can't be repaired.
-                            if (m_boundServices.size() == 0)
-                            {
-                                // try to reinitialize
-                                if (!initialize())
-                                {
-                                    if (!m_dependencyMetadata.isOptional())
-                                    {
-                                        GenericActivator.trace("Dependency Manager: Mandatory dependency not fullfilled and no replacements available... unregistering service...");
-                                        invalidate();
-                                        GenericActivator.trace("Dependency Manager: RECREATING");
-                                        validate();
-                                    }
-                                }
-                            }
-                        }
-                    }
-                }
-                // A service is registering.
-                else if (evt.getType() == ServiceEvent.REGISTERED)
-                {
-                    if (m_boundServices.keySet().contains(evt.getServiceReference()) == true)
-                    {
-                        // This is a duplicate
-                        GenericActivator.trace("DependencyManager : ignoring REGISTERED ServiceEvent (already bound)");
-                    }
-                    else
-                    {
-                        m_isValid = true;
-                        setStateDependency(DependencyChangeEvent.DEPENDENCY_VALID);
-
-                        // If the InstanceManager is invalid, a call to validate is made
-                        // which will fix everything.
-                        if (InstanceManager.this.getState() != INSTANCE_VALID)
-                        {
-                            validate();
-                        }
-                        // Otherwise, this checks for dynamic 0..1, 0..N, and 1..N it never
-                        // checks for 1..1 dynamic which is done above by the validate()
-                        else if (!m_dependencyMetadata.isStatic())
-                        {
-                            // For dependency that are aggregates, always bind the service
-                            // Otherwise only bind if bind services is zero, which captures the 0..1 case
-                            if (m_dependencyMetadata.isMultiple() || m_boundServices.size() == 0)
-                            {
-                                callBindMethod(evt.getServiceReference());
-                            }
-                        }
-                    }
-                }
-            }
-        }
-
-        /**
-         * Revoke all bindings. This method cannot throw an exception since it must try
-         * to complete all that it can
-         *
-        **/
-        void unbindAll()
-        {
-            Object []allrefs = m_boundServices.keySet().toArray();
-
-            if (allrefs == null)
-                return;
-
-            for (int i = 0; i < allrefs.length; i++)
-            {
-                callUnbindMethod((ServiceReference)allrefs[i]);
-            }
-        }
-
-        /**
-         * Test if this dependency managed by this object is valid
-        **/
-        boolean isValid()
-        {
-            return m_isValid;
-        }
-
-        /**
-         *
-         * Returns an array containing the service references that are pertinent to the
-         * dependency managed by this object. This method filters out services that
-         * belong to bundles that are being (or are actually) shutdown. This is an issue
-         * since is not clearly specified in the OSGi specification if a getServiceReference
-         * call should return the services that belong to bundles that are stopping.
-         *
-         * @return an array of ServiceReferences valid in the context of this dependency
-        **/
-        ServiceReference [] getRequiredServiceRefs()
-        {
-            try
-            {
-                ArrayList list=new ArrayList();
-                ServiceReference temprefs[] =
-                    m_activator.getBundleContext().getServiceReferences(m_dependencyMetadata.getServiceName(), m_dependencyMetadata.getFilter());
-
-                if (temprefs == null)
-                {
-                    return null;
-                }
-
-                for (int i = 0; i < temprefs.length; i++)
-                {
-                     if (temprefs[i].getBundle().getState() == Bundle.ACTIVE
-                            || temprefs[i].getBundle().getState() == Bundle.STARTING)
-                     {
-                         list.add(temprefs[i]);
-                     }
-                }
-
-                return (ServiceReference []) list.toArray(new ServiceReference [temprefs.length]);
-
-            }
-            catch (Exception e)
-            {
-                GenericActivator.error("DependencyManager: exception while getting references :"+e);
-                return null;
-            }
-        }
-
-        /**
-         * Gets a target method based on a set of parameters
-         *
-         * @param methodname The name of the method
-         * @param targetClass the class to which the method belongs to
-         * @param paramClass the class of the parameter that is passed to the method
-         * @throws java.lang.ClassNotFoundException if the class was not found
-         * @throws java.lang.NoSuchMethodException if the method was not found
-        **/
-        private Method getTargetMethod(String methodname, String targetClass, String paramClass)
-            throws ClassNotFoundException, NoSuchMethodException
-        {
-            Class targetclass = m_activator.getClass().getClassLoader().loadClass(targetClass);
-
-            Method method = null;
-            
-            try
-            {
-                method = targetclass.getMethod(methodname, 
-                    new Class[]{m_activator.getClass().getClassLoader().loadClass(paramClass)});
-               
-            }
-            catch(NoSuchMethodException ex)
-            {
-                // Test if the bind method receives a ServiceReference as the first parameter
-                
-                method = targetclass.getMethod(methodname, 
-                    new Class[]{ServiceReference.class, m_activator.getClass().getClassLoader().loadClass(paramClass)});
-               
-                m_receivesRef = true;
-            }
-            
-            return method;
-        }
-
-        /**
-         * Call the bind method. In case there is an exception while calling the bind method, the service
-         * is not considered to be bound to the instance object
-         *
-         * @param ref A ServiceReference with the service that will be bound to the instance object
-         * @return true if the call was successful, false otherwise
-        **/
-        boolean callBindMethod(ServiceReference ref)
-        {
-            try
-            {
-                Object requiredService = m_activator.getBundleContext().getService(ref);
-                Object proxy = m_activator.proxyRequiredServiceObject(requiredService,m_dependencyMetadata);
-                
-                if(proxy == null)
-                {
-                    // ignore a null return value from the proxy method
-                    proxy = requiredService;
-                }
-                if(m_receivesRef == false)
-                {
-                    m_bindMethod.invoke(getObject(),new Object[] {proxy});
-                }
-                else
-                {
-                    m_bindMethod.invoke(getObject(),new Object[] {ref,proxy});
-                }
-                m_boundServices.put(ref,proxy);
-                
-                return true;
-            }
-            catch(Exception e)
-            {
-                if(e instanceof InvocationTargetException)
-                {
-                    InvocationTargetException ite = (InvocationTargetException) e;
-                    GenericActivator.error("DependencyManager : exception while invoking "+m_dependencyMetadata.getBindMethodName()+" :"+ite.getTargetException());
-                }
-                else
-                {
-                    GenericActivator.error("DependencyManager : exception while invoking "+m_dependencyMetadata.getBindMethodName()+" :"+e);
-                }
-                e.printStackTrace();
-                return false;
-            }
-        }
-
-        /**
-         * Call the unbind method
-         *
-         * @param ref A service reference corresponding to the service that will be unbound
-        **/
-        void callUnbindMethod(ServiceReference ref)
-        {
-            Object requiredService = m_boundServices.get(ref);
-            if (requiredService == null)
-            {
-                GenericActivator.error("DependencyManager : callUnbindMethod UNBINDING UNKNOWN SERVICE !!!!");
-                return;
-            }
-
-            try
-            {
-                if(m_receivesRef == false)
-                {
-                    m_unbindMethod.invoke(getObject(),new Object [] {requiredService});
-                }
-                else
-                {
-                    m_unbindMethod.invoke(getObject(),new Object [] {ref, requiredService});
-                }
-                
-                m_boundServices.remove(ref);
-                m_activator.getBundleContext().ungetService(ref);
-            }
-            catch(Exception e)
-            {
-                if(e instanceof InvocationTargetException)
-                {
-                    InvocationTargetException ite = (InvocationTargetException) e;
-                    GenericActivator.error("DependencyManager : exception while invoking "+m_dependencyMetadata.getUnbindMethodName()+" :"+ite.getTargetException());
-                }
-                else
-                {
-                    GenericActivator.error("DependencyManager : exception while invoking "+m_dependencyMetadata.getUnbindMethodName()+" :"+e);
-                }
-                e.printStackTrace();
-            }
-        }
-
-        /**
-         * Return the dependency descriptor
-         *
-         * @return the corresponding dependency descriptor
-        **/
-        public DependencyMetadata getDependencyMetadata()
-        {
-            return m_dependencyMetadata;
-        }
-
-        /**
-         * Fire a state change event.
-         *
-         * @param state the state of the dependency manager
-        **/
-        void setStateDependency(int state)
-        {
-            m_depState = state;
-            m_activator.fireDependencyChangeEvent(new DependencyChangeEvent(this,m_dependencyMetadata,state));
-        }
-
-        /**
-         * Get the state of the dependency.
-         *
-         * @return the state of the dependency manager
-        **/
-        public int getDependencyState()
-        {
-            return m_depState;
-        }
-
-        /**
-         * Get the bound service objects. This method is declared in the Dependency interface
-         * and is used for to get a model.
-         *
-         * @return an array containing the bound service objects
-        **/
-        public Instance[] getBoundInstances()
-        {
-            Object bound[] = m_boundServices.values().toArray();
-
-            ArrayList tempArray = new ArrayList();
-
-            for(int i=0; i<bound.length; i++)
-            {
-                InstanceReference ref = ArchitectureServiceImpl.findInstanceReference(bound[i]);
-                if(ref != null)
-                {
-                    tempArray.add(ref);
-                }
-            }
-
-            Instance instances[]= new Instance[tempArray.size()];
-            instances = (Instance [])tempArray.toArray(instances);
-
-            return instances;
-
-
-        }
-    }
-
-/**
- * @version X.XX Feb 3, 2004  * @author Humberto Cervantes
- */
-
-    static public class StateChangeMulticaster implements InstanceReferenceListener
-    {
-
-        /**
-         * 
-         * @uml.property name="a"
-         * @uml.associationEnd multiplicity="(0 1)"
-         */
-        protected InstanceReferenceListener a;
-
-        /**
-         * 
-         * @uml.property name="b"
-         * @uml.associationEnd multiplicity="(0 1)"
-         */
-        protected InstanceReferenceListener b;
-
-        protected StateChangeMulticaster(InstanceReferenceListener a, InstanceReferenceListener b)    
-        {        
-            this.a = a;        
-            this.b = b;    
-        }    
-    
-    
-        public void validated(InstanceReferenceEvent e)    
-        {
-            a.validated(e);        
-            b.validated(e);
-        }
-    
-        public void invalidating(InstanceReferenceEvent e)    
-        {
-            a.invalidating(e);        
-            b.invalidating(e);
-        }
-    
-        public static InstanceReferenceListener add(InstanceReferenceListener a, InstanceReferenceListener b)
-        {
-            if (a == null)
-                return b;
-            else if (b == null)
-                return a;
-            else
-                return new StateChangeMulticaster(a, b);
-        }
-    
-        public static InstanceReferenceListener remove(InstanceReferenceListener a, InstanceReferenceListener b)
-        {
-            if ((a == null) || (a == b))            
-                return null;        
-            else if (a instanceof StateChangeMulticaster)            
-                return add (remove (((StateChangeMulticaster) a).a, b),remove (((StateChangeMulticaster) a).b, b));        
-            else            
-                return a;    
-        }
-    }
-}
diff --git a/servicebinder/src/main/java/org/apache/felix/servicebinder/InstanceMetadata.java b/servicebinder/src/main/java/org/apache/felix/servicebinder/InstanceMetadata.java
deleted file mode 100644
index 63f697e..0000000
--- a/servicebinder/src/main/java/org/apache/felix/servicebinder/InstanceMetadata.java
+++ /dev/null
@@ -1,206 +0,0 @@
-/* 
- * 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.
- */
-package org.apache.felix.servicebinder;
-
-import java.util.Properties;
-import java.util.Collection;
-import java.util.ArrayList;
-import java.util.Iterator;
-
-/**
- * Description of an instance entry in the descriptor file *  * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
- */
-public class InstanceMetadata
-{
-    // These properties will be filled by the parser
-    private String m_implementorName;
-    private Collection m_interfaces = null;
-    private Properties m_properties = new Properties();
-    private Collection m_dependencies = null;
-
-    /**
-     * 
-     * @uml.property name="m_instantiates"
-     * @uml.associationEnd multiplicity="(0 1)"
-     */
-    private InstanceMetadata m_instantiates = null;
-
-    /**
-     * 
-     * @uml.property name="m_parent"
-     * @uml.associationEnd multiplicity="(0 1)"
-     */
-    private InstanceMetadata m_parent = null;
-
-    private boolean m_isFactory = false;
-    private boolean m_registersService = false;
-    private boolean m_isInstance = false;
-
-    /**
-     * Constructor
-     *
-     * @param   implementorName name of the class of the implementation object
-     * @param   parent the parent to this service descriptor
-     */
-    InstanceMetadata(String implementorName,InstanceMetadata parent)
-    {
-        m_interfaces = new ArrayList();
-        m_dependencies = new ArrayList();
-
-        m_implementorName = implementorName;
-
-        // The parent will be != null if this descriptor corresponds to an
-        // instantiate entry
-
-        if(parent != null)
-        {
-            m_parent = parent;
-            m_parent.m_instantiates = this;
-            m_parent.m_isFactory = true;
-            m_isInstance = true;
-        }
-    }
-
-    /**
-     * Returns the name of the implementor
-     *
-     * @return the name of the implementor
-     */
-    public String getImplementorName()
-    {
-        return m_implementorName;
-    }
-
-
-    /**
-     * Used to add an interface to the service descriptor
-     *
-     * @param   newInterface name of the interface implemented by the implementation object
-     */
-    void addInterface(String newInterface)
-    {
-        // As soon as there is one interface provided, it cannot be a bundle-to-service.
-        m_registersService = true;
-        m_interfaces.add(newInterface);
-    }
-
-    /**
-     * Returns the implemented interfaces
-     *
-     * @return the implemented interfaces as a string array
-     */
-    public String [] getInterfaces()
-    {
-        String interfaces[] = new String[m_interfaces.size()];
-        Iterator it = m_interfaces.iterator();
-        int count = 0;
-        while (it.hasNext())
-        {
-            interfaces[count++] = it.next().toString();
-        }
-        return interfaces;
-    }
-
-    /**
-     * Used to add a property to the instance
-     *
-     * @param   newProperty a property descriptor
-     */
-    void addProperty(PropertyMetadata newProperty)
-    {
-        String key = newProperty.getName();
-        Object value = newProperty.getValue();
-        if(key != null && value != null)
-        {
-            m_properties.put(key,value);
-        }
-    }
-
-    /**
-     * Returns the property descriptors
-     *
-     * @return the property descriptors as a Collection
-     */
-    public Properties getProperties()
-    {
-        return m_properties;
-    }
-
-    /**
-     * Used to add a dependency descriptor to the service descriptor
-     *
-     * @param newDependency a new dependency to be added
-     */
-    void addDependency(DependencyMetadata newDependency)
-    {
-        m_dependencies.add(newDependency);
-    }
-
-
-    /**
-     * Returns the dependency descriptors
-     *
-     * @return a Collection of dependency descriptors
-     */
-    public Collection getDependencies()
-    {
-        return m_dependencies;
-    }
-
-    /**
-     * Test to see if this service is a factory
-     *
-     * @return true if it is a factory, false otherwise
-     */
-    public boolean isFactory()
-    {
-        return m_isFactory;
-    }
-
-     /**
-     * Get the meta data of the instances
-     *
-     * @return the instance metadata
-     */
-    public InstanceMetadata getInstantiates()
-    {
-        return m_instantiates;
-    }
-
-     /**
-     * Test to see if this descriptor describes a bundle-to-service dependency
-     * that means that the instance does not register any services.
-     *
-     * @return true if the dependency is bundle-to-service
-     */
-    public boolean instanceRegistersServices()
-    {
-        return m_registersService;
-    }
-
-     /**
-     * Test to see if this descriptor is registered from an instance from a factory.
-     *
-     * @return true if this descriptor is registered from an instance from a factory.
-     */
-    public boolean isInstance()
-    {
-        return m_isInstance;
-    }
-}
diff --git a/servicebinder/src/main/java/org/apache/felix/servicebinder/InstanceReference.java b/servicebinder/src/main/java/org/apache/felix/servicebinder/InstanceReference.java
deleted file mode 100644
index 3d3e5fd..0000000
--- a/servicebinder/src/main/java/org/apache/felix/servicebinder/InstanceReference.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/* 
- * 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.
- */
-package org.apache.felix.servicebinder;
-
-/**
- * This interface creates a level of indirection for the objects
- * created by a factory. This is necessary because it might not
- * be possible for a factory to create the actual object instance
- * at the time of the call to <tt>Factory.createInstance()</tt>
- * due to unfulfilled dependencies. In such a scenario, this
- * interface can be used to listen for the object instance to
- * become available.
- * 
- * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a> 
- */
-public interface InstanceReference
-{
-    public static final String INSTANCE_STATE = "INSTANCE_STATE";
-    public static final String INSTANCE_METADATA = "INSTANCE_METADATA";
-    public static final String INSTANCE_BUNDLE = "INSTANCE_BUNDLE";
-    public static final String INSTANCE_DEPENDENCIES ="INSTANCE_DEPENDENCIES";
-
-    /**
-     * Get a property associated with this instance. For classes
-     * implementing this method, special care must be taken for
-     * values implementing <tt>InstanceReference.ValueHolder</tt>.
-     * In such cases, the value itself should not be returned, but
-     * the value of <tt>InstanceReference.ValueHolder.get()</tt>
-     * should be returned instead. This may be used to defer
-     * creating value objects in cases where creating the value
-     * object is expensive.
-     * @param name the name of the property to retrieve.
-     * @return the value of the associated property or <tt>null</tt>.
-    **/
-    public Object get(String name);
-
-    /**
-     * Associate a property with this instance. For classes
-     * implementing this method, special care must be taken for
-     * values implementing <tt>InstanceReference.ValueHolder</tt>.
-     * In such cases, the value itself should not be returned, but
-     * the value of <tt>InstanceReference.ValueHolder.get()</tt>
-     * should be returned instead. This may be used to defer
-     * creating value objects in cases where creating the value
-     * object is expensive.
-     * @param name the name of the property to add.
-     * @param value the value of the property.
-    **/
-    public void put(String name, Object value);
-
-    /**
-     * Gets the actual object associated with this instance refernce.
-     * @return the object associated with this reference or <tt>null</tt>
-     *         if the reference is not currently valid.
-    **/
-    public Object getObject();
-
-    /**
-     * Adds an instance reference listener to listen for changes to
-     * the availability of the underlying object associated with this
-     * instance reference.
-     * @param l the listener to add.
-    **/
-    public void addInstanceReferenceListener(InstanceReferenceListener l);
-
-    /**
-     * Removes an instance reference listener.
-     * @param l the listener to remove.
-    **/
-    public void removeInstanceReferenceListener(InstanceReferenceListener l);
-
-    /**
-     * A simple interface that enabled deferred value creation for
-     * the <tt>InstanceReference.get()</tt> and <tt>InstanceReference.put()</tt>
-     * methods.
-    **/
-    public static interface ValueHolder
-    {
-        /**
-         * Returns the associated value.
-         * @return the associated value or <tt>null</tt>.
-        **/
-        public Object get(InstanceReference ir);
-    }
-}
diff --git a/servicebinder/src/main/java/org/apache/felix/servicebinder/InstanceReferenceEvent.java b/servicebinder/src/main/java/org/apache/felix/servicebinder/InstanceReferenceEvent.java
deleted file mode 100644
index 9520908..0000000
--- a/servicebinder/src/main/java/org/apache/felix/servicebinder/InstanceReferenceEvent.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/* 
- * 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.
- */
-package org.apache.felix.servicebinder;
-
-/**
- * This class is the event generated when the availability of the
- * underlying object associated with an <tt>InstanceReference</tt>
- * changes. Use the <tt>InstanceReferenceListener</tt> interface
- * to listen for this event. The <tt>getSource()</tt> method
- * returns the <tt>InstanceReference</tt> that generated the event.
- * 
- * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
-**/
-public class InstanceReferenceEvent extends java.util.EventObject
-{
-    private static final long serialVersionUID = 189791898139565080L;
-
-    /**
-     * Construct an event with the specified source instance reference.
-     * @param ir the instance reference that generated the event.
-    **/
-    public InstanceReferenceEvent(InstanceReference ir)
-    {
-        super(ir);
-    }
-}
diff --git a/servicebinder/src/main/java/org/apache/felix/servicebinder/InstanceReferenceListener.java b/servicebinder/src/main/java/org/apache/felix/servicebinder/InstanceReferenceListener.java
deleted file mode 100644
index a810314..0000000
--- a/servicebinder/src/main/java/org/apache/felix/servicebinder/InstanceReferenceListener.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/* 
- * 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.
- */
-package org.apache.felix.servicebinder;
-
-/**
- * This is an event listener for listening to changes in
- * the availability of the underlying object associated
- * with an <tt>InstanceReference</tt>. For the precise
- * details of when this event is fired, refer to the
- * methods below.
- * 
- * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
-**/
-public interface InstanceReferenceListener extends java.util.EventListener
-{
-    /**
-     * This method is called when an <tt>InstanceReference</tt>'s
-     * underlying object becomes valid, i.e., the instance is
-     * available for use. This event is fired during the following
-     * sequence of steps:
-     * <p>
-     * <ol>
-     *   <li>Instance created.</li>
-     *   <li>Dependencies bound, if any.</li>
-     *   <li>Services registered, if any.</li>
-     *   <li><tt>Lifecycle.activate()</tt> is called, if the instance
-     *       implements the <tt>Lifecycle</tt> interface.</li>
-     *   <li>Fire <tt>InstanceReferenceListener.validated()</tt>.
-     * </ol>
-     * @param event the associated instance reference event.
-    **/
-    public void validated(InstanceReferenceEvent event);
-
-    /**
-     * This method is called when an <tt>InstanceReference</tt>'s
-     * underlying object is going to be invalidated. This event
-     * is fired during the following sequence of steps:
-     * <p>
-     * <ol>
-     *   <li>Fire <tt>InstanceReferenceListener.invalidating()</tt>.
-     *   <li>Call <tt>Lifecycle.deactivate()</tt>, if the instance
-     *       implements the <tt>Lifecycle</tt> interface.</li>
-     *   <li>Unregister services, if any.</li>
-     *   <li>Unbind dependencies, if any.</li>
-     *   <li>Dispose instance.</li>
-     * </ol>
-     * <p>
-     * Note: Care must be taken during this callback, because the
-     * underlying object associated with the instance reference may
-     * not be fully functioning. For example, this event might be
-     * fired in direct response to a dependent service shutting down,
-     * which then instigates the invalidation of the underlying object
-     * instance.
-     * @param event the associated instance reference event.
-    **/
-    public void invalidating(InstanceReferenceEvent event);
-}
diff --git a/servicebinder/src/main/java/org/apache/felix/servicebinder/Lifecycle.java b/servicebinder/src/main/java/org/apache/felix/servicebinder/Lifecycle.java
deleted file mode 100644
index 9b1daee..0000000
--- a/servicebinder/src/main/java/org/apache/felix/servicebinder/Lifecycle.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/* 
- * 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.
- */
-package org.apache.felix.servicebinder;
-
-/**
- * Instances created by the service binder, either via the
- * <tt>GenericActivator</tt> or the <tt>GenericFactory</tt>,
- * may implement this interface to receive notification of
- * object life cycle events. See each interface method for
- * a precise description of when the method is invoked.
- * 
- * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
-**/
-public interface Lifecycle
-{
-    /**
-     * This method is called after the instance is created, all of its
-     * dependencies are valid, and all implemented services are registered.
-    **/
-    public void activate();
-
-    /**
-     * This method is called prior to instance disposal. At the time
-     * of invocation, all dependencies are still valid and all services
-     * are still registered. Be aware that at this point some dependent
-     * services may have been shutdown and using them may result in
-     * error conditions.
-    **/
-    public void deactivate();
-}
diff --git a/servicebinder/src/main/java/org/apache/felix/servicebinder/PropertyMetadata.java b/servicebinder/src/main/java/org/apache/felix/servicebinder/PropertyMetadata.java
deleted file mode 100644
index ef3d671..0000000
--- a/servicebinder/src/main/java/org/apache/felix/servicebinder/PropertyMetadata.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/* 
- * 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.
- */
-package org.apache.felix.servicebinder;
-
-/**
- * A property descriptor that contains the information for properties
- * defined in the meta-data file.
- *
- * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
- */
-public class PropertyMetadata
-{
-	String name;
-	String type;
-	Object value;
-
-	/**
-	 * Create a PropertyMetadata object
-	 *
-	 * @param   name the name of the property
-	 * @param   type the type of the property (string, boolean, byte, char, short, int, long, float or double)
-	 * @param   val the value of the property
-	 */
-	public PropertyMetadata(String name, String type, String val)
-	{
-		this.name = name;
-		type.toLowerCase();
-		this.type = type;
-		value = null;
-
-		if(type.equals("string") || type.equals("String"))
-        {
-			value = new String(val);
-        }
-		else if(type.equals("boolean"))
-        {
-			value = new Boolean(val);
-        }
-		else if(type.equals("byte"))
-        {
-			value = new Byte(val);
-        }
-		else if(type.equals("char"))
-        {
-			value = new Byte(val);
-        }
-		else if(type.equals("short"))
-        {
-			value = new Short(val);
-        }
-		else if(type.equals("int"))
-        {
-			value = new Integer(val);
-        }
-		else if(type.equals("long"))
-        {
-			value = new Long(val);
-        }
-		else if(type.equals("float"))
-        {
-			value = new Float(val);
-        }
-		else if(type.equals("double"))
-        {
-			value = new Double(val);
-        }
-	}
-
-    /**
-     * Get the name of the property
-     * 
-     * @return the name of the property
-     * 
-     * @uml.property name="name"
-     */
-    public String getName() {
-        return name;
-    }
-
-    /**
-     * Get the type of the property
-     * 
-     * @return the type of the property
-     * 
-     * @uml.property name="type"
-     */
-    public String getType() {
-        return type;
-    }
-
-    /**
-     * Get the value of the property
-     * 
-     * @return the value of the property as an Object
-     * 
-     * @uml.property name="value"
-     */
-    public Object getValue() {
-        return value;
-    }
-}
diff --git a/servicebinder/src/main/java/org/apache/felix/servicebinder/ServiceBinderContext.java b/servicebinder/src/main/java/org/apache/felix/servicebinder/ServiceBinderContext.java
deleted file mode 100644
index 870d902..0000000
--- a/servicebinder/src/main/java/org/apache/felix/servicebinder/ServiceBinderContext.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/* 
- * 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.
- */
-package org.apache.felix.servicebinder;
-
-import org.osgi.framework.BundleContext;
-
-import java.util.List;
-
-/**
- * The ServiceBinderContext is passed to the objects that implement the services
- * if they implement a constructor that receives a reference of this type. Through
- * this interface, they can access the BundleContext along with the list ob
- * binder instances located on the same bundle.
- *
- * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
- */
-public interface ServiceBinderContext
-{
-    /**
-     *
-     *@return the Bundle Context of the bundle where the receiver of the context is located
-    **/
-    BundleContext getBundleContext();
-
-    /**
-     *
-     *
-    **/
-    List getInstanceReferences();
-
-    /**
-     *
-     *
-    **/
-    InstanceReference getInstanceReference();
-}
diff --git a/servicebinder/src/main/java/org/apache/felix/servicebinder/ServiceBinderException.java b/servicebinder/src/main/java/org/apache/felix/servicebinder/ServiceBinderException.java
deleted file mode 100644
index aef1a47..0000000
--- a/servicebinder/src/main/java/org/apache/felix/servicebinder/ServiceBinderException.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/* 
- * 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.
- */
-package org.apache.felix.servicebinder;
-
-/**
- * Exceptions thrown by the ServiceBinder.
- *
- * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
- */
-public class ServiceBinderException extends Exception
-{
-    private static final long serialVersionUID = 2819108687170297942L;
-
-    public ServiceBinderException(String msg)
-    {
-        super(msg);
-    }
-}
diff --git a/servicebinder/src/main/java/org/apache/felix/servicebinder/XmlHandler.java b/servicebinder/src/main/java/org/apache/felix/servicebinder/XmlHandler.java
deleted file mode 100644
index 59e500e..0000000
--- a/servicebinder/src/main/java/org/apache/felix/servicebinder/XmlHandler.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/* 
- * 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.
- */
-package org.apache.felix.servicebinder;
-
-import java.util.Properties;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.felix.servicebinder.parser.ParseException;
-
-/**
- * Simple content handler that builds a list of service descriptors
- * 
- * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
- */
-public class XmlHandler
-{
-    /**
-     * 
-     * @uml.property name="parentDescriptor"
-     * @uml.associationEnd multiplicity="(0 1)"
-     */
-    private InstanceMetadata parentDescriptor = null;
-
-    /**
-     * 
-     * @uml.property name="currentDescriptor"
-     * @uml.associationEnd multiplicity="(0 1)"
-     */
-    private InstanceMetadata currentDescriptor = null;
-
-    private List descriptors = new ArrayList();
-
-    XmlHandler()
-    {
-    }
-
-    /**
-     * Method called when a tag opens
-     *
-     * @param   uri
-     * @param   localName
-     * @param   qName
-     * @param   attrib
-     * @exception   ParseException
-    **/
-    public void startElement(String uri,String localName,String qName,Properties attrib) throws ParseException
-    {
-        if (qName.equals("instance") || qName.equals("component"))
-        {
-            currentDescriptor = new InstanceMetadata(attrib.getProperty("class"),parentDescriptor);
-            descriptors.add(currentDescriptor);
-        }
-        if (qName.equals("service")) // will be deprecated
-        {
-            if(currentDescriptor == null)
-            {
-                return;
-            }
-            currentDescriptor.addInterface(attrib.getProperty("interface"));
-        }
-        if (qName.equals("provides"))
-        {
-            if(currentDescriptor == null)
-            {
-                return;
-            }
-            currentDescriptor.addInterface(attrib.getProperty("service"));
-        }
-        if (qName.equals("property"))
-        {
-
-            if(currentDescriptor == null)
-            {
-                return;
-            }
-            PropertyMetadata prop = new PropertyMetadata(attrib.getProperty("name"),
-                attrib.getProperty("type"),
-                attrib.getProperty("value"));
-            currentDescriptor.addProperty(prop);
-        }
-        if (qName.equals("requires"))
-        {
-            if(currentDescriptor == null)
-            {
-                return;
-            }
-
-            DependencyMetadata dd=new DependencyMetadata(attrib.getProperty("service"),
-                attrib.getProperty("cardinality"),attrib.getProperty("policy"),attrib.getProperty("filter"),
-                attrib.getProperty("bind-method"),attrib.getProperty("unbind-method"));
-
-            currentDescriptor.addDependency(dd);
-        }
-        
-        if (qName.equals("instantiates"))
-        {
-            GenericActivator.error("ERROR: Version 1.1 does not support factories");
-        }
-
-    }
-
-    /**
-    * Method called when a tag closes
-    *
-    * @param   uri
-    * @param   localName
-    * @param   qName
-    * @exception   ParseException
-    */
-    public void endElement(java.lang.String uri,java.lang.String localName,java.lang.String qName) throws ParseException
-    {
-        if (qName.equals("instantiates") || qName.equals("component"))
-        {
-            currentDescriptor = parentDescriptor;
-            parentDescriptor = null;
-        }
-    }
-
-    /**
-    * Called to retrieve the service descriptors
-    *
-    * @return   A list of service descriptors
-    */
-    List getInstanceMetadatas()
-    {
-        return descriptors;
-    }
-}
diff --git a/servicebinder/src/main/java/org/apache/felix/servicebinder/architecture/ArchitectureService.java b/servicebinder/src/main/java/org/apache/felix/servicebinder/architecture/ArchitectureService.java
deleted file mode 100644
index 2b981ed..0000000
--- a/servicebinder/src/main/java/org/apache/felix/servicebinder/architecture/ArchitectureService.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/* 
- * 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.
- */
-package org.apache.felix.servicebinder.architecture;
-
-/**
- *
- * A service to provide an architectural vision of the instances created by the
- * service binder
- *
- * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
- */
-public interface ArchitectureService
-{
-    /**
-     * Get a list of all the available instance references
-     *
-     * @return a List containing all of the instance references
-    **/
-    public Instance [] getInstances();
-
-    /**
-     * Add a service binder listener
-     *
-     * @param listener a ServiceBinderListener to add to the Architecture service
-    **/
-    public void addServiceBinderListener(ServiceBinderListener listener);
-
-    /**
-     * Remove a service binder listener
-     *
-     * @param listener the listener to be removed
-    **/
-    public void removeServiceBinderListener(ServiceBinderListener listener);
-}
diff --git a/servicebinder/src/main/java/org/apache/felix/servicebinder/architecture/Dependency.java b/servicebinder/src/main/java/org/apache/felix/servicebinder/architecture/Dependency.java
deleted file mode 100644
index a488840..0000000
--- a/servicebinder/src/main/java/org/apache/felix/servicebinder/architecture/Dependency.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/* 
- * 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.
- */
-package org.apache.felix.servicebinder.architecture;
-
-import org.apache.felix.servicebinder.DependencyMetadata;
-
-/**
- * Interface for a dependency
- *
- * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
- */
-public interface Dependency
-{
-    /**
-     * get the dependency state
-     *
-     * @return the state of the dependency
-    **/
-    public int getDependencyState();
-
-    /**
-     * get the dependency metadata
-     *
-     * @return the metadata of the dependency
-    **/
-    public DependencyMetadata getDependencyMetadata();
-
-    /**
-     * get the bound service objects
-     *
-     * @return the bound Instances
-    **/
-    public Instance []getBoundInstances();
-}
diff --git a/servicebinder/src/main/java/org/apache/felix/servicebinder/architecture/DependencyChangeEvent.java b/servicebinder/src/main/java/org/apache/felix/servicebinder/architecture/DependencyChangeEvent.java
deleted file mode 100644
index bda6772..0000000
--- a/servicebinder/src/main/java/org/apache/felix/servicebinder/architecture/DependencyChangeEvent.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/* 
- * 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.
- */
-package org.apache.felix.servicebinder.architecture;
-
-import org.apache.felix.servicebinder.DependencyMetadata;
-
-/**
- * An event thrown when a dependency changes
- * 
- * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
- */
-public class DependencyChangeEvent
-{
-    public static final int DEPENDENCY_CREATED = 0;
-    public static final int DEPENDENCY_VALID = 1;
-    public static final int DEPENDENCY_INVALID = 2;
-    public static final int DEPENDENCY_DESTROYED = 3;
-
-    /**
-     * 
-     * @uml.property name="m_dep"
-     * @uml.associationEnd multiplicity="(0 1)"
-     */
-    private Dependency m_dep;
-
-    /**
-     * 
-     * @uml.property name="m_meta"
-     * @uml.associationEnd multiplicity="(0 1)"
-     */
-    private DependencyMetadata m_meta;
-
-    private int m_state;
-
-    public DependencyChangeEvent(Dependency dep, DependencyMetadata meta,int newState)
-    {
-        m_dep = dep;
-        m_meta = meta;
-        m_state = newState;
-    }
-
-    public Dependency getDependency()
-    {
-        return m_dep;
-    }
-
-    public DependencyMetadata getDependencyMetadata()
-    {
-        return m_meta;
-    }
-
-    public int getState()
-    {
-        return m_state;
-    }
-}
diff --git a/servicebinder/src/main/java/org/apache/felix/servicebinder/architecture/Instance.java b/servicebinder/src/main/java/org/apache/felix/servicebinder/architecture/Instance.java
deleted file mode 100644
index 9eb0f23..0000000
--- a/servicebinder/src/main/java/org/apache/felix/servicebinder/architecture/Instance.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/* 
- * 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.
- */
-package org.apache.felix.servicebinder.architecture;
-
-import org.apache.felix.servicebinder.InstanceMetadata;
-
-/**
- *
- * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
- */
-public interface Instance
-{
-    public static final int INSTANCE_CREATED = 0;
-    public static final int INSTANCE_VALID = 1;
-    public static final int INSTANCE_INVALID = 2;
-    public static final int INSTANCE_DESTROYED = 3;
-
-    /**
-     * Get the state of the instance
-     *
-     * @return an integer representing the state of the instance
-    **/
-    public int getState();
-
-    /**
-     * Get the bundle
-     *
-     * @return an integer with the bundle id
-    **/
-     public long getBundleId();
-
-    /**
-     * Get a list of depenencies
-     *
-     * @return a List containing all of the dependencies
-    **/
-    public Dependency[] getDependencies();
-
-    /**
-     * Get a list of child instances in case this instance is a factory
-     *
-     * @return a List containing all of the child instances
-    **/
-    public Instance[] getChildInstances();
-
-    /**
-     * Get the instance metadata
-     *
-     * @return the isntance metadata
-    **/
-    public InstanceMetadata getInstanceMetadata();
-}
diff --git a/servicebinder/src/main/java/org/apache/felix/servicebinder/architecture/InstanceChangeEvent.java b/servicebinder/src/main/java/org/apache/felix/servicebinder/architecture/InstanceChangeEvent.java
deleted file mode 100644
index 425d0d4..0000000
--- a/servicebinder/src/main/java/org/apache/felix/servicebinder/architecture/InstanceChangeEvent.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/* 
- * 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.
- */
-package org.apache.felix.servicebinder.architecture;
-
-import org.apache.felix.servicebinder.InstanceMetadata;
-
-/**
- * 
- * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
- */
-public class InstanceChangeEvent
-{
-    /**
-     * 
-     * @uml.property name="m_ref"
-     * @uml.associationEnd multiplicity="(0 1)"
-     */
-    private Instance m_ref;
-
-    /**
-     * 
-     * @uml.property name="m_meta"
-     * @uml.associationEnd multiplicity="(0 1)"
-     */
-    private InstanceMetadata m_meta;
-
-    private int m_state;
-
-    public InstanceChangeEvent(Instance ref,InstanceMetadata meta,int state)
-    {
-        m_ref = ref;
-        m_meta = meta;
-        m_state = state;
-    }
-
-    public Instance getInstance()
-    {
-        return m_ref;
-    }
-
-    public InstanceMetadata getInstanceMetadata()
-    {
-        return m_meta;
-    }
-
-    public int getState()
-    {
-        return m_state;
-    }
-}
diff --git a/servicebinder/src/main/java/org/apache/felix/servicebinder/architecture/ServiceBinderListener.java b/servicebinder/src/main/java/org/apache/felix/servicebinder/architecture/ServiceBinderListener.java
deleted file mode 100644
index 0011fbc..0000000
--- a/servicebinder/src/main/java/org/apache/felix/servicebinder/architecture/ServiceBinderListener.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/* 
- * 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.
- */
-package org.apache.felix.servicebinder.architecture;
-
-/**
- * The ServiceBinderListener interface must be implemented by any subclass
- * of the GenericActivator if it wishes to receive notifications about
- * changes in the architecture
- *
- * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
- */
-public interface ServiceBinderListener extends java.util.EventListener
-{
-    /*
-    * Method called when an instance changes its state
-    */
-    void instanceReferenceChanged(InstanceChangeEvent evt);
-
-    /*
-    * Method called when a dependency changes its state
-    */
-    void dependencyChanged(DependencyChangeEvent evt);
-
-}
diff --git a/servicebinder/src/main/java/org/apache/felix/servicebinder/impl/Activator.java b/servicebinder/src/main/java/org/apache/felix/servicebinder/impl/Activator.java
deleted file mode 100644
index 4d43550..0000000
--- a/servicebinder/src/main/java/org/apache/felix/servicebinder/impl/Activator.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/* 
- * 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.
- */
-package org.apache.felix.servicebinder.impl;
-
-import org.apache.felix.servicebinder.GenericActivator;
-
-/**
- *
- * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
- */
-public class Activator extends GenericActivator
-{
-}
diff --git a/servicebinder/src/main/java/org/apache/felix/servicebinder/impl/ArchitectureEventMulticaster.java b/servicebinder/src/main/java/org/apache/felix/servicebinder/impl/ArchitectureEventMulticaster.java
deleted file mode 100644
index db1a506..0000000
--- a/servicebinder/src/main/java/org/apache/felix/servicebinder/impl/ArchitectureEventMulticaster.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/* 
- * 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.
- */
-package org.apache.felix.servicebinder.impl;
-
-import org.apache.felix.servicebinder.architecture.DependencyChangeEvent;
-import org.apache.felix.servicebinder.architecture.InstanceChangeEvent;
-import org.apache.felix.servicebinder.architecture.ServiceBinderListener;
-
-/**
- * 
- * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
- */
-public class ArchitectureEventMulticaster implements ServiceBinderListener
-{
-    /**
-     * 
-     * @uml.property name="a"
-     * @uml.associationEnd multiplicity="(0 1)"
-     */
-    protected ServiceBinderListener a;
-
-    /**
-     * 
-     * @uml.property name="b"
-     * @uml.associationEnd multiplicity="(0 1)"
-     */
-    protected ServiceBinderListener b;
-
-    protected ArchitectureEventMulticaster(ServiceBinderListener a, ServiceBinderListener b)    
-    {        
-        this.a = a;        
-        this.b = b;    
-    }    
-    
-    public void dependencyChanged(DependencyChangeEvent e)    
-    {
-        a.dependencyChanged(e);        
-        b.dependencyChanged(e);
-    }
-    
-    public void instanceReferenceChanged(InstanceChangeEvent e)    
-    {
-        a.instanceReferenceChanged(e);        
-        b.instanceReferenceChanged(e);
-    }
-    
-    public static ServiceBinderListener add(ServiceBinderListener a, ServiceBinderListener b)
-    {
-        if (a == null)
-            return b;
-        else if (b == null)
-            return a;
-        else
-            return new ArchitectureEventMulticaster(a, b);
-    }
-    
-    public static ServiceBinderListener remove(ServiceBinderListener a, ServiceBinderListener b)
-    {
-        if ((a == null) || (a == b))            
-            return null;        
-        else if (a instanceof ArchitectureEventMulticaster)            
-            return add (remove (((ArchitectureEventMulticaster) a).a, b),remove (((ArchitectureEventMulticaster) a).b, b));        
-        else            
-            return a;    
-    }
-}
diff --git a/servicebinder/src/main/java/org/apache/felix/servicebinder/impl/ArchitectureServiceImpl.java b/servicebinder/src/main/java/org/apache/felix/servicebinder/impl/ArchitectureServiceImpl.java
deleted file mode 100644
index 3a7a9f7..0000000
--- a/servicebinder/src/main/java/org/apache/felix/servicebinder/impl/ArchitectureServiceImpl.java
+++ /dev/null
@@ -1,173 +0,0 @@
-/* 
- * 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.
- */
-package org.apache.felix.servicebinder.impl;
-
-import org.apache.felix.servicebinder.InstanceReference;
-import org.apache.felix.servicebinder.Lifecycle;
-import org.apache.felix.servicebinder.architecture.ArchitectureService;
-import org.apache.felix.servicebinder.architecture.DependencyChangeEvent;
-import org.apache.felix.servicebinder.architecture.Instance;
-import org.apache.felix.servicebinder.architecture.InstanceChangeEvent;
-import org.apache.felix.servicebinder.architecture.ServiceBinderListener;
-
-import java.util.List;
-import java.util.ArrayList;
-
-/**
- * Class that implements the architecture service
- * an object of this class is created when the
- * service binder bundle is activated
- * 
- * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
- */
-public class ArchitectureServiceImpl implements ArchitectureService, Lifecycle
-{
-    /**
-     * 
-     * @uml.property name="m_listeners"
-     * @uml.associationEnd multiplicity="(0 1)"
-     */
-    private ServiceBinderListener m_listeners = null;
-
-    /**
-     * 
-     * @uml.property name="m_ref"
-     * @uml.associationEnd multiplicity="(0 1)"
-     */
-    private static ArchitectureServiceImpl m_ref = null;
-
-    private static List m_instanceReferences = new ArrayList();
-
-    public ArchitectureServiceImpl() throws Exception
-    {
-        if(m_ref == null)
-        {
-            m_ref = this;
-        }
-    }
-
-    public static InstanceReference findInstanceReference(Object obj)
-    {
-        Object[] refs=m_instanceReferences.toArray();
-
-        for(int i=0; i<refs.length ;i++)
-        {
-            InstanceReference current = (InstanceReference) refs [i];
-            if(current.getObject( )== obj)
-            {
-                return current;
-            }
-        }
-
-        return null;
-    }
-
-    public static void addInstanceReference(InstanceReference ref)
-    {
-        m_instanceReferences.add(ref);
-    }
-
-    public static void removeInstanceReference(InstanceReference ref)
-    {
-        m_instanceReferences.remove(ref);
-    }
-
-    public Instance[] getInstances()
-    {
-        Instance instances[]=new Instance[m_instanceReferences.size()];
-        instances = (Instance [])m_instanceReferences.toArray(instances);
-
-        return instances;
-    }
-
-    public static ArchitectureServiceImpl getReference()
-    {
-        return m_ref;
-    }
-
-    public void activate()
-    {
-    }
-
-    synchronized public void deactivate()
-    {
-        m_ref = null;
-        m_listeners = null; //new EventListenerList();
-    }
-
-    /**
-     * Add a service binder listener
-    **/
-    public void addServiceBinderListener(ServiceBinderListener listener)
-    {
-        //m_listeners.add(ServiceBinderListener.class, listener);
-        m_listeners = ArchitectureEventMulticaster.add(m_listeners, listener);
-    }
-
-    /**
-     * Remove a service binder listener
-    **/
-    public void removeServiceBinderListener(ServiceBinderListener listener)
-    {
-        //m_listeners.remove(ServiceBinderListener.class, listener);
-        m_listeners = ArchitectureEventMulticaster.remove(m_listeners, listener);
-    }
-
-    /**
-     * Fires an event when an instance has changed
-    **/
-    public void fireInstanceChangeEvent(InstanceChangeEvent evt)
-    {
-        try
-        {
-            if (m_listeners != null)
-            {
-                m_listeners.instanceReferenceChanged(evt);
-            }
-        }
-        catch(Exception ex)
-        {
-            // Ignore any exception
-        }
-    }
-
-    /**
-     * Fires an event when a dependency has changed
-    **/
-    public void fireDependencyChangeEvent(DependencyChangeEvent evt)
-    {
-        try
-        {
-            if (m_listeners != null)
-            {
-                m_listeners.dependencyChanged(evt);
-            }
-        }
-        catch(Exception ex)
-        {
-            // Ignore any exception
-        }
-    }
-    
-
-
-}
-
-
-
diff --git a/servicebinder/src/main/java/org/apache/felix/servicebinder/parser/KxmlParser.java b/servicebinder/src/main/java/org/apache/felix/servicebinder/parser/KxmlParser.java
deleted file mode 100644
index 875d759..0000000
--- a/servicebinder/src/main/java/org/apache/felix/servicebinder/parser/KxmlParser.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/* 
- * 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.
- */
-package org.apache.felix.servicebinder.parser;
-
-import org.apache.felix.servicebinder.XmlHandler;
-import org.kxml2.io.KXmlParser;
-import org.xmlpull.v1.XmlPullParser;
-import org.xmlpull.v1.XmlPullParserException;
-import java.io.IOException;
-import java.io.Reader;
-import java.util.Properties;
-
-/**
- * The KxmlParser extends the XmlParser from kxml. This is a very
- * simple parser that does not take into account the DTD
- *
- * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
- */
-public class KxmlParser extends KXmlParser
-{
-    /**
-     * The constructor for a parser, it receives a java.io.Reader.
-     * 
-     * @param reader The reader
-     * @throws XmlPullParserException thrown by the super class.
-     */
-    public KxmlParser(final Reader reader) throws XmlPullParserException
-    {
-        super();
-        setInput(reader);
-    }
-
-    /**
-     * Parser from the reader provided in the constructor, and call the
-     * startElement and endElement in a KxmlHandler
-     * 
-     * @param handler The handler
-     * @throws XmlPullParserException thrown by the super class.
-     * @throws IOException thrown by the super class.
-     * @throws ParseException thrown by the handler.
-     */
-    public void parseXML(final XmlHandler handler)
-        throws XmlPullParserException, IOException, ParseException
-    {
-        while (next() != XmlPullParser.END_DOCUMENT)
-        {
-            switch (getEventType())
-            {
-                case XmlPullParser.START_TAG:
-                    Properties props = new Properties();
-                    for (int i = 0; i < getAttributeCount(); i++)
-                    {
-                        props.put(getAttributeName(i), getAttributeValue(i));
-                    }
-                    handler.startElement(getNamespace(), getName(), getName(), props);
-                    break;
-                case XmlPullParser.END_TAG:
-                    handler.endElement(getNamespace(), getName(), getName());
-                    break;
-                default:
-                    continue;
-            }
-        }
-    }
-}
diff --git a/servicebinder/src/main/java/org/apache/felix/servicebinder/parser/ParseException.java b/servicebinder/src/main/java/org/apache/felix/servicebinder/parser/ParseException.java
deleted file mode 100644
index eb252f9..0000000
--- a/servicebinder/src/main/java/org/apache/felix/servicebinder/parser/ParseException.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/* 
- * 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.
- */
-package org.apache.felix.servicebinder.parser;
-
-/**
- * Exceptions thrown by the ServiceBinder.
- *
- * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
- */
-public class ParseException extends Exception
-{
-    private static final long serialVersionUID = -2658823754557277056L;
-
-    public ParseException(String msg)
-    {
-        super(msg);
-    }
-}
diff --git a/servicebinder/src/main/resources/metadata.dtd b/servicebinder/src/main/resources/metadata.dtd
deleted file mode 100644
index 6917216..0000000
--- a/servicebinder/src/main/resources/metadata.dtd
+++ /dev/null
@@ -1,29 +0,0 @@
-<!--
-  DTD for org.apache.felix.servicebinder descriptor DTD
-  Version: 1.1
--->
-
-<!ELEMENT bundle (component*)>
-<!ELEMENT component (property*,provides*,requires*)>
-  <!ATTLIST  component
-    class CDATA #REQUIRED
-  >
-<!ELEMENT provides EMPTY>
-  <!ATTLIST  provides
-    service CDATA #REQUIRED
-  >
-<!ELEMENT property EMPTY>
-  <!ATTLIST  property
-    name CDATA #REQUIRED
-    type CDATA #REQUIRED
-    value CDATA #REQUIRED
-  >
-<!ELEMENT requires EMPTY>
-  <!ATTLIST  requires
-    service CDATA #REQUIRED
-    filter CDATA #REQUIRED
-    cardinality (0..1|0..n|1..1|1..n) #REQUIRED
-    policy (static|dynamic) #REQUIRED
-    bind-method CDATA #REQUIRED
-    unbind-method CDATA #REQUIRED
->
diff --git a/servicebinder/src/main/resources/metadata.xml b/servicebinder/src/main/resources/metadata.xml
deleted file mode 100644
index 18f0797..0000000
--- a/servicebinder/src/main/resources/metadata.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--<!DOCTYPE bundle SYSTEM "metadata.dtd">-->
-<bundle>
-  <component class="org.apache.felix.servicebinder.impl.ArchitectureServiceImpl">
-    <provides service="org.apache.felix.servicebinder.architecture.ArchitectureService"/>
-  </component>
-</bundle>