summaryrefslogtreecommitdiffstats
path: root/java/sca/modules/node-impl-osgi
diff options
context:
space:
mode:
authorrfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68>2009-10-28 19:29:50 +0000
committerrfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68>2009-10-28 19:29:50 +0000
commit3ab338ad0b521192e72a4e1da2e6fae0f45b38ae (patch)
tree14b6aab8959c1e79b4578a1617966c96cf329a45 /java/sca/modules/node-impl-osgi
parentc13b16cafe0cd2999754186270f6b8e03baefe6d (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')
-rw-r--r--java/sca/modules/node-impl-osgi/META-INF/MANIFEST.MF1
-rw-r--r--java/sca/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/node/osgi/impl/OSGiNodeFactoryImpl.java13
-rw-r--r--java/sca/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/OSGiServiceExporter.java49
-rw-r--r--java/sca/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/OSGiServiceImporter.java48
-rw-r--r--java/sca/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/RemoteServiceAdminImpl.java22
-rw-r--r--java/sca/modules/node-impl-osgi/src/main/resources/META-INF/services/org.apache.tuscany.sca.node.NodeFactory2
6 files changed, 46 insertions, 89 deletions
diff --git a/java/sca/modules/node-impl-osgi/META-INF/MANIFEST.MF b/java/sca/modules/node-impl-osgi/META-INF/MANIFEST.MF
index 70ba184107..3eae6468a1 100644
--- a/java/sca/modules/node-impl-osgi/META-INF/MANIFEST.MF
+++ b/java/sca/modules/node-impl-osgi/META-INF/MANIFEST.MF
@@ -42,6 +42,7 @@ Import-Package: javax.xml.namespace,
org.oasisopen.sca.annotation;version="2.0.0";resolution:=optional,
org.osgi.framework;version="1.4.0",
org.osgi.framework.hooks.service;version="1.0.0";resolution:=optional,
+ org.osgi.service.cm;version="1.2.1",
org.osgi.service.component;version="1.1.0";resolution:=optional,
org.osgi.service.event;version="1.2.0",
org.osgi.service.packageadmin;version="1.2.0";resolution:=optional,
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