diff options
author | rfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68> | 2009-10-28 19:29:50 +0000 |
---|---|---|
committer | rfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68> | 2009-10-28 19:29:50 +0000 |
commit | 3ab338ad0b521192e72a4e1da2e6fae0f45b38ae (patch) | |
tree | 14b6aab8959c1e79b4578a1617966c96cf329a45 /java/sca/modules/node-impl-osgi/src | |
parent | c13b16cafe0cd2999754186270f6b8e03baefe6d (diff) |
Pass ServiceRegistry via extensionPointRegistry to remove static references
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@830738 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java/sca/modules/node-impl-osgi/src')
5 files changed, 45 insertions, 89 deletions
diff --git a/java/sca/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/node/osgi/impl/OSGiNodeFactoryImpl.java b/java/sca/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/node/osgi/impl/OSGiNodeFactoryImpl.java index 42481c7e8e..e8bf5def45 100644 --- a/java/sca/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/node/osgi/impl/OSGiNodeFactoryImpl.java +++ b/java/sca/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/node/osgi/impl/OSGiNodeFactoryImpl.java @@ -33,6 +33,7 @@ import org.apache.tuscany.sca.node.configuration.NodeConfigurationFactory; import org.apache.tuscany.sca.node.impl.NodeFactoryImpl; import org.osgi.framework.Bundle; import org.osgi.framework.BundleContext; +import org.osgi.framework.FrameworkUtil; import org.osgi.framework.ServiceRegistration; /** @@ -44,10 +45,22 @@ public class OSGiNodeFactoryImpl extends NodeFactoryImpl { private ServiceRegistration registration; private BundleContext bundleContext; + public OSGiNodeFactoryImpl() { + super(); + Bundle bundle = FrameworkUtil.getBundle(OSGiNodeFactoryImpl.class); + if (bundle != null) { + this.bundleContext = bundle.getBundleContext(); + autoDestroy = false; + setNodeFactory(this); + } else { + throw new IllegalStateException(OSGiNodeFactoryImpl.class + " is not loaded by OSGi"); + } + } /** * Constructs a new Node controller */ public OSGiNodeFactoryImpl(BundleContext bundleContext) { + super(); this.bundleContext = bundleContext; autoDestroy = false; setNodeFactory(this); diff --git a/java/sca/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/OSGiServiceExporter.java b/java/sca/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/OSGiServiceExporter.java index d6cbe1a44b..02603417cc 100644 --- a/java/sca/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/OSGiServiceExporter.java +++ b/java/sca/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/OSGiServiceExporter.java @@ -30,29 +30,18 @@ import org.apache.tuscany.sca.assembly.Component; import org.apache.tuscany.sca.assembly.ComponentService; import org.apache.tuscany.sca.assembly.Endpoint; import org.apache.tuscany.sca.contribution.Contribution; -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.core.LifeCycleListener; -import org.apache.tuscany.sca.node.NodeFactory; import org.apache.tuscany.sca.node.configuration.NodeConfiguration; -import org.apache.tuscany.sca.node.impl.NodeFactoryImpl; import org.apache.tuscany.sca.node.impl.NodeImpl; import org.apache.tuscany.sca.osgi.remoteserviceadmin.EndpointDescription; import org.apache.tuscany.sca.osgi.remoteserviceadmin.ExportRegistration; -import org.apache.tuscany.sca.osgi.service.discovery.impl.LocalDiscoveryService; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceReference; -import org.osgi.util.tracker.ServiceTracker; import org.osgi.util.tracker.ServiceTrackerCustomizer; /** * Watching and exporting OSGi services */ -public class OSGiServiceExporter implements ServiceTrackerCustomizer, LifeCycleListener { - private ExtensionPointRegistry registry; - private BundleContext context; - private NodeFactoryImpl nodeFactory; - private EndpointIntrospector introspector; - private ServiceTracker discoveryTracker; +public class OSGiServiceExporter extends AbstractOSGiServiceHandler implements ServiceTrackerCustomizer { /** * @param context @@ -60,32 +49,13 @@ public class OSGiServiceExporter implements ServiceTrackerCustomizer, LifeCycleL * @param customizer */ public OSGiServiceExporter(BundleContext context) { - this.context = context; - } - - private synchronized void init() { - if (nodeFactory == null) { - this.nodeFactory = (NodeFactoryImpl)NodeFactory.newInstance(); - this.nodeFactory.init(); - this.discoveryTracker = LocalDiscoveryService.getTracker(context); - discoveryTracker.open(); - this.introspector = new EndpointIntrospector(context, getExtensionPointRegistry(), discoveryTracker); - } + super(context); } public void start() { init(); } - public void stop() { - discoveryTracker.close(); - discoveryTracker = null; - introspector = null; - nodeFactory = null; - registry = null; - context = null; - } - public Object addingService(ServiceReference reference) { return exportService(reference, null); } @@ -97,6 +67,9 @@ public class OSGiServiceExporter implements ServiceTrackerCustomizer, LifeCycleL if (contribution != null) { NodeConfiguration configuration = nodeFactory.createNodeConfiguration(); + if (domainRegistry != null) { + configuration.setDomainRegistryURI(domainRegistry); + } configuration.setURI(contribution.getURI()); configuration.getExtensions().add(reference.getBundle()); // FIXME: Configure the domain and node URI @@ -132,16 +105,4 @@ public class OSGiServiceExporter implements ServiceTrackerCustomizer, LifeCycleL exportRegistration.close(); } } - - protected ExtensionPointRegistry getExtensionPointRegistry() { - if (registry == null) { - ServiceTracker tracker = new ServiceTracker(context, ExtensionPointRegistry.class.getName(), null); - tracker.open(); - // tracker.waitForService(1000); - registry = (ExtensionPointRegistry)tracker.getService(); - tracker.close(); - } - return registry; - } - } diff --git a/java/sca/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/OSGiServiceImporter.java b/java/sca/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/OSGiServiceImporter.java index 582adb22ef..5d5b72183f 100644 --- a/java/sca/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/OSGiServiceImporter.java +++ b/java/sca/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/OSGiServiceImporter.java @@ -24,30 +24,19 @@ import java.util.Collections; import org.apache.tuscany.sca.assembly.Component; import org.apache.tuscany.sca.assembly.ComponentReference; import org.apache.tuscany.sca.contribution.Contribution; -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.core.LifeCycleListener; import org.apache.tuscany.sca.node.Node; -import org.apache.tuscany.sca.node.NodeFactory; import org.apache.tuscany.sca.node.configuration.NodeConfiguration; -import org.apache.tuscany.sca.node.impl.NodeFactoryImpl; import org.apache.tuscany.sca.node.impl.NodeImpl; import org.apache.tuscany.sca.osgi.remoteserviceadmin.EndpointDescription; import org.apache.tuscany.sca.osgi.remoteserviceadmin.ImportRegistration; -import org.apache.tuscany.sca.osgi.service.discovery.impl.LocalDiscoveryService; import org.osgi.framework.Bundle; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceReference; -import org.osgi.util.tracker.ServiceTracker; /** * Watching and exporting OSGi services */ -public class OSGiServiceImporter implements LifeCycleListener { - private ExtensionPointRegistry registry; - private BundleContext context; - private NodeFactoryImpl nodeFactory; - private EndpointIntrospector introspector; - private ServiceTracker discoveryTracker; +public class OSGiServiceImporter extends AbstractOSGiServiceHandler { /** * @param context @@ -55,31 +44,12 @@ public class OSGiServiceImporter implements LifeCycleListener { * @param customizer */ public OSGiServiceImporter(BundleContext context) { - this.context = context; - } - - private synchronized void init() { - if (nodeFactory == null) { - this.nodeFactory = (NodeFactoryImpl)NodeFactory.newInstance(); - this.nodeFactory.init(); - this.discoveryTracker = LocalDiscoveryService.getTracker(context); - discoveryTracker.open(); - this.introspector = new EndpointIntrospector(context, getExtensionPointRegistry(), discoveryTracker); - } + super(context); } public void start() { } - public void stop() { - discoveryTracker.close(); - discoveryTracker = null; - introspector = null; - nodeFactory = null; - registry = null; - context = null; - } - public ImportRegistration importService(Bundle bundle, EndpointDescription endpointDescription) { init(); try { @@ -87,6 +57,9 @@ public class OSGiServiceImporter implements LifeCycleListener { if (contribution != null) { NodeConfiguration configuration = nodeFactory.createNodeConfiguration(); + if (domainRegistry != null) { + configuration.setDomainRegistryURI(domainRegistry); + } configuration.setURI(contribution.getURI()); configuration.getExtensions().add(bundle); // FIXME: Configure the domain and node URI @@ -115,15 +88,4 @@ public class OSGiServiceImporter implements LifeCycleListener { node.stop(); } - protected ExtensionPointRegistry getExtensionPointRegistry() { - if (registry == null) { - ServiceTracker tracker = new ServiceTracker(context, ExtensionPointRegistry.class.getName(), null); - tracker.open(); - // tracker.waitForService(1000); - registry = (ExtensionPointRegistry)tracker.getService(); - tracker.close(); - } - return registry; - } - } diff --git a/java/sca/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/RemoteServiceAdminImpl.java b/java/sca/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/RemoteServiceAdminImpl.java index 698fbb2942..544297da43 100644 --- a/java/sca/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/RemoteServiceAdminImpl.java +++ b/java/sca/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/RemoteServiceAdminImpl.java @@ -21,7 +21,9 @@ package org.apache.tuscany.sca.osgi.remoteserviceadmin.impl; import java.util.ArrayList; import java.util.Collection; +import java.util.Dictionary; import java.util.HashMap; +import java.util.Hashtable; import java.util.List; import java.util.Map; @@ -36,6 +38,8 @@ import org.osgi.framework.BundleContext; import org.osgi.framework.Constants; import org.osgi.framework.ServiceReference; import org.osgi.framework.ServiceRegistration; +import org.osgi.service.cm.ConfigurationException; +import org.osgi.service.cm.ManagedService; import org.osgi.service.event.Event; import org.osgi.service.event.EventAdmin; import org.osgi.util.tracker.ServiceTracker; @@ -43,9 +47,10 @@ import org.osgi.util.tracker.ServiceTracker; /** * SCA Implementation of {@link RemoteServiceAdmin} */ -public class RemoteServiceAdminImpl implements RemoteServiceAdmin { +public class RemoteServiceAdminImpl implements RemoteServiceAdmin, ManagedService { private BundleContext context; private ServiceRegistration registration; + private ServiceRegistration managedService; private ServiceTracker listeners; private OSGiServiceExporter exporter; @@ -64,6 +69,9 @@ public class RemoteServiceAdminImpl implements RemoteServiceAdmin { exporter.start(); importer.start(); registration = context.registerService(RemoteServiceAdmin.class.getName(), this, null); + Hashtable<String, Object> props = new Hashtable<String, Object>(); + props.put(Constants.SERVICE_PID, RemoteServiceAdminImpl.class.getName()); + managedService = context.registerService(ManagedService.class.getName(), this, props); listeners = new ServiceTracker(this.context, RemoteServiceAdminListener.class.getName(), null); listeners.open(); } @@ -73,6 +81,10 @@ public class RemoteServiceAdminImpl implements RemoteServiceAdmin { registration.unregister(); registration = null; } + if (managedService != null) { + managedService.unregister(); + managedService = null; + } if (listeners != null) { listeners.close(); listeners = null; @@ -249,4 +261,12 @@ public class RemoteServiceAdminImpl implements RemoteServiceAdmin { } return importReg; } + + public synchronized void updated(Dictionary props) throws ConfigurationException { + String domainRegistry = (String)props.get("org.osgi.sca.domain.registry"); + if (domainRegistry != null) { + exporter.setDomainRegistry(domainRegistry); + importer.setDomainRegistry(domainRegistry); + } + } } diff --git a/java/sca/modules/node-impl-osgi/src/main/resources/META-INF/services/org.apache.tuscany.sca.node.NodeFactory b/java/sca/modules/node-impl-osgi/src/main/resources/META-INF/services/org.apache.tuscany.sca.node.NodeFactory index 488529a04f..7ef0213d11 100644 --- a/java/sca/modules/node-impl-osgi/src/main/resources/META-INF/services/org.apache.tuscany.sca.node.NodeFactory +++ b/java/sca/modules/node-impl-osgi/src/main/resources/META-INF/services/org.apache.tuscany.sca.node.NodeFactory @@ -14,4 +14,4 @@ # KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
-# org.apache.tuscany.sca.node.osgi.impl.OSGiNodeFactoryImpl
\ No newline at end of file +# org.apache.tuscany.sca.node.osgi.impl.OSGiNodeFactoryImpl;ranking=100
\ No newline at end of file |