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>