From 5963a2d3d6860fe57afc138f095bf2d2eb5a7b80 Mon Sep 17 00:00:00 2001 From: lresende Date: Mon, 7 Oct 2013 22:23:21 +0000 Subject: Official Tuscany 2.0.1 Release git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1530096 13f79535-47bb-0310-9956-ffa450edef68 --- .../tuscany/sca/node/osgi/impl/NodeActivator.java | 129 ---- .../tuscany/sca/node/osgi/impl/NodeManager.java | 143 ----- .../sca/node/osgi/impl/OSGiNodeFactoryImpl.java | 142 ----- .../impl/AbstractOSGiServiceHandler.java | 97 --- .../remoteserviceadmin/impl/EndpointHelper.java | 109 ---- .../impl/EndpointIntrospector.java | 550 ---------------- .../remoteserviceadmin/impl/EndpointMatcher.java | 273 -------- .../impl/ExportReferenceImpl.java | 73 --- .../impl/ExportRegistrationImpl.java | 80 --- .../impl/ImportReferenceImpl.java | 72 --- .../impl/ImportRegistrationImpl.java | 70 --- .../osgi/remoteserviceadmin/impl/OSGiHelper.java | 234 ------- .../impl/OSGiServiceExporter.java | 163 ----- .../impl/OSGiServiceImporter.java | 114 ---- .../impl/RemoteServiceAdminImpl.java | 346 ---------- .../impl/TopologyManagerImpl.java | 400 ------------ .../discovery/impl/AbstractDiscoveryService.java | 265 -------- .../sca/osgi/service/discovery/impl/Discovery.java | 66 -- .../service/discovery/impl/DiscoveryActivator.java | 57 -- .../discovery/impl/DomainDiscoveryService.java | 140 ----- .../discovery/impl/LocalDiscoveryService.java | 262 -------- .../remoteserviceadmin/EndpointDescription.java | 682 -------------------- .../remoteserviceadmin/EndpointListener.java | 126 ---- .../remoteserviceadmin/EndpointPermission.java | 693 --------------------- .../remoteserviceadmin/ExportReference.java | 45 -- .../remoteserviceadmin/ExportRegistration.java | 71 --- .../remoteserviceadmin/ImportReference.java | 44 -- .../remoteserviceadmin/ImportRegistration.java | 67 -- .../remoteserviceadmin/RemoteConstants.java | 216 ------- .../remoteserviceadmin/RemoteServiceAdmin.java | 124 ---- .../RemoteServiceAdminEvent.java | 178 ------ .../RemoteServiceAdminListener.java | 44 -- ...any.sca.contribution.processor.ValidationSchema | 18 - .../org.apache.tuscany.sca.node.NodeFactory | 17 - .../remoteserviceadmin/osgi-remoteserviceadmin.xsd | 92 --- .../java/calculator/dosgi/CalculatorService.java | 36 -- .../calculator/dosgi/impl/CalculatorActivator.java | 75 --- .../dosgi/impl/CalculatorServiceDSImpl.java | 114 ---- .../dosgi/impl/CalculatorServiceImpl.java | 96 --- .../calculator/dosgi/operations/AddService.java | 31 - .../calculator/dosgi/operations/DivideService.java | 31 - .../dosgi/operations/MultiplyService.java | 31 - .../dosgi/operations/SubtractService.java | 31 - .../dosgi/operations/impl/AddServiceImpl.java | 37 -- .../dosgi/operations/impl/DivideServiceImpl.java | 37 -- .../dosgi/operations/impl/MultiplyServiceImpl.java | 37 -- .../dosgi/operations/impl/OperationsActivator.java | 88 --- .../dosgi/operations/impl/SubtractServiceImpl.java | 37 -- .../dosgi/test/CalculatorOSGiNodeTestCase.java | 156 ----- .../dosgi/test/CalculatorOSGiTestCase.java | 99 --- .../calculator/dosgi/test/OSGiTestBundles.java | 362 ----------- .../calculator/dosgi/META-INF/MANIFEST.MF | 20 - .../calculator/dosgi/META-INF/sca-contribution.xml | 24 - .../dosgi/OSGI-INF/blueprint/calculator-module.xml | 43 -- .../dosgi/OSGI-INF/calculator-component.xml | 36 -- .../calculator-service-descriptions.xml | 55 -- .../calculator/dosgi/bundle.componentType | 63 -- .../calculator/dosgi/calculator.composite | 53 -- .../dosgi/operations/META-INF/MANIFEST.MF | 22 - .../dosgi/operations/META-INF/sca-contribution.xml | 23 - .../dosgi/operations/OSGI-INF/add-component.xml | 25 - .../OSGI-INF/blueprint/operations-module.xml | 40 -- .../dosgi/operations/OSGI-INF/divide-component.xml | 25 - .../operations/OSGI-INF/multiply-component.xml | 25 - .../operations/OSGI-INF/subtract-component.xml | 25 - .../dosgi/operations/bundle.componentType | 54 -- .../dosgi/operations/operations.composite | 43 -- .../calculator/dosgi/sca/META-INF/MANIFEST.MF | 12 - .../dosgi/sca/META-INF/sca-contribution.xml | 24 - .../dosgi/sca/OSGI-INF/sca/calculator.composite | 70 --- 70 files changed, 8182 deletions(-) delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/node/osgi/impl/NodeActivator.java delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/node/osgi/impl/NodeManager.java delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/node/osgi/impl/OSGiNodeFactoryImpl.java delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/AbstractOSGiServiceHandler.java delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/EndpointHelper.java delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/EndpointIntrospector.java delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/EndpointMatcher.java delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/ExportReferenceImpl.java delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/ExportRegistrationImpl.java delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/ImportReferenceImpl.java delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/ImportRegistrationImpl.java delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/OSGiHelper.java delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/OSGiServiceExporter.java delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/OSGiServiceImporter.java delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/RemoteServiceAdminImpl.java delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/TopologyManagerImpl.java delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/service/discovery/impl/AbstractDiscoveryService.java delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/service/discovery/impl/Discovery.java delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/service/discovery/impl/DiscoveryActivator.java delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/service/discovery/impl/DomainDiscoveryService.java delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/service/discovery/impl/LocalDiscoveryService.java delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/osgi/service/remoteserviceadmin/EndpointDescription.java delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/osgi/service/remoteserviceadmin/EndpointListener.java delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/osgi/service/remoteserviceadmin/EndpointPermission.java delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/osgi/service/remoteserviceadmin/ExportReference.java delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/osgi/service/remoteserviceadmin/ExportRegistration.java delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/osgi/service/remoteserviceadmin/ImportReference.java delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/osgi/service/remoteserviceadmin/ImportRegistration.java delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/osgi/service/remoteserviceadmin/RemoteConstants.java delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/osgi/service/remoteserviceadmin/RemoteServiceAdmin.java delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/osgi/service/remoteserviceadmin/RemoteServiceAdminEvent.java delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/osgi/service/remoteserviceadmin/RemoteServiceAdminListener.java delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.ValidationSchema delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/resources/META-INF/services/org.apache.tuscany.sca.node.NodeFactory delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/resources/org/osgi/service/remoteserviceadmin/osgi-remoteserviceadmin.xsd delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/CalculatorService.java delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/impl/CalculatorActivator.java delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/impl/CalculatorServiceDSImpl.java delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/impl/CalculatorServiceImpl.java delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/operations/AddService.java delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/operations/DivideService.java delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/operations/MultiplyService.java delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/operations/SubtractService.java delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/operations/impl/AddServiceImpl.java delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/operations/impl/DivideServiceImpl.java delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/operations/impl/MultiplyServiceImpl.java delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/operations/impl/OperationsActivator.java delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/operations/impl/SubtractServiceImpl.java delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/test/CalculatorOSGiNodeTestCase.java delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/test/CalculatorOSGiTestCase.java delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/test/OSGiTestBundles.java delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/META-INF/MANIFEST.MF delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/META-INF/sca-contribution.xml delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/OSGI-INF/blueprint/calculator-module.xml delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/OSGI-INF/calculator-component.xml delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/OSGI-INF/remote-service/calculator-service-descriptions.xml delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/bundle.componentType delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/calculator.composite delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/operations/META-INF/MANIFEST.MF delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/operations/META-INF/sca-contribution.xml delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/operations/OSGI-INF/add-component.xml delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/operations/OSGI-INF/blueprint/operations-module.xml delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/operations/OSGI-INF/divide-component.xml delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/operations/OSGI-INF/multiply-component.xml delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/operations/OSGI-INF/subtract-component.xml delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/operations/bundle.componentType delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/operations/operations.composite delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/sca/META-INF/MANIFEST.MF delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/sca/META-INF/sca-contribution.xml delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/sca/OSGI-INF/sca/calculator.composite (limited to 'sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src') diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/node/osgi/impl/NodeActivator.java b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/node/osgi/impl/NodeActivator.java deleted file mode 100644 index 36feb6526a..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/node/osgi/impl/NodeActivator.java +++ /dev/null @@ -1,129 +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.tuscany.sca.node.osgi.impl; - -import static org.apache.tuscany.sca.node.osgi.impl.NodeManager.isSCABundle; - -import java.util.logging.Level; -import java.util.logging.Logger; - -import org.apache.tuscany.sca.osgi.remoteserviceadmin.impl.RemoteServiceAdminImpl; -import org.apache.tuscany.sca.osgi.remoteserviceadmin.impl.TopologyManagerImpl; -import org.apache.tuscany.sca.osgi.service.discovery.impl.DiscoveryActivator; -import org.osgi.framework.Bundle; -import org.osgi.framework.BundleActivator; -import org.osgi.framework.BundleContext; -import org.osgi.framework.BundleEvent; -import org.osgi.framework.SynchronousBundleListener; - -/** - * Bundle activator to receive the BundleContext - */ -public class NodeActivator implements BundleActivator, SynchronousBundleListener { - private final static Logger logger = Logger.getLogger(NodeActivator.class.getName()); - private static BundleContext bundleContext; - private boolean inited; - private NodeManager manager; - - private DiscoveryActivator discoveryActivator = new DiscoveryActivator(); - private RemoteServiceAdminImpl remoteAdmin; - private TopologyManagerImpl controller; - - private void init() { - synchronized (this) { - if (inited) { - return; - } - manager = new NodeManager(bundleContext); - manager.start(); - bundleContext.addBundleListener(manager); - inited = true; - } - } - - public void start(BundleContext context) throws Exception { - try { - bundleContext = context; - - // FIXME: We should try to avoid aggressive initialization - init(); - - remoteAdmin = new RemoteServiceAdminImpl(context); - remoteAdmin.start(); - - discoveryActivator.start(context); - - controller = new TopologyManagerImpl(context); - controller.start(); - - boolean found = false; - for (Bundle b : context.getBundles()) { - if (isSCABundle(b)) { - found = true; - break; - } - } - - if (found) { - init(); - } else { - context.addBundleListener(this); - } - } catch (Exception e) { - logger.log(Level.SEVERE, e.getMessage(), e); - throw e; - } - } - - public void stop(BundleContext context) throws Exception { - if (inited) { - context.removeBundleListener(this); - controller.stop(); - controller = null; - - discoveryActivator.stop(context); - discoveryActivator = null; - - remoteAdmin.stop(); - remoteAdmin = null; - - manager.stop(); - bundleContext.removeBundleListener(manager); - manager = null; - bundleContext = null; - inited = false; - } - } - - public static BundleContext getBundleContext() { - return bundleContext; - } - - public void bundleChanged(BundleEvent event) { - if (event.getType() == BundleEvent.STARTING) { - if (isSCABundle(event.getBundle())) { - bundleContext.removeBundleListener(this); - init(); - } - } - - } - -} diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/node/osgi/impl/NodeManager.java b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/node/osgi/impl/NodeManager.java deleted file mode 100644 index 6914e09b8e..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/node/osgi/impl/NodeManager.java +++ /dev/null @@ -1,143 +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.tuscany.sca.node.osgi.impl; - -import java.net.URL; -import java.util.Dictionary; -import java.util.logging.Level; -import java.util.logging.Logger; - -import org.apache.tuscany.sca.node.Node; -import org.apache.tuscany.sca.node.configuration.NodeConfiguration; -import org.osgi.framework.Bundle; -import org.osgi.framework.BundleContext; -import org.osgi.framework.BundleEvent; -import org.osgi.framework.ServiceEvent; -import org.osgi.framework.ServiceListener; -import org.osgi.framework.SynchronousBundleListener; - -/** - * Managing the mapping between OSGi bundles and SCA implementation.osgi - */ -public class NodeManager implements SynchronousBundleListener, ServiceListener { - private static final Logger logger = Logger.getLogger(NodeManager.class.getName()); - private BundleContext bundleContext; - OSGiNodeFactoryImpl factory; - - public NodeManager(BundleContext bundleContext) { - super(); - this.bundleContext = bundleContext; - this.factory = new OSGiNodeFactoryImpl(this.bundleContext); - } - - public void start() { - for (Bundle b : bundleContext.getBundles()) { - if ((b.getState() & Bundle.ACTIVE) != 0) { - // Process the active bundles - bundleStarted(b); - } - } - } - - public void stop() { - if (factory != null) { - factory.destroy(); - } - } - - public static boolean isSCABundle(Bundle bundle) { - Dictionary headers = bundle.getHeaders(); - // OSGi RFC 119 SCA - if (headers.get("SCA-Composite") != null) { - return true; - } - - URL bundleComposite = bundle.getResource("OSGI-INF/sca/bundle.composite"); - if (bundleComposite != null) { - return true; - } - - /* FIXME: What if there is a META-INF/sca-contribution.xml? There are two cases: - * 1. The file contains deployable elements - * 2. The file doesn't contain deployable elements - */ - - /* - * FIXME: Do we want to use all of the .composite files under OSGI-INF/sca? - */ - - /* - Enumeration entries = bundle.findEntries("OSGI-INF/sca", "bundle.composite", false); - if (entries != null && entries.hasMoreElements()) { - return true; - } - - // OSGi Declarative Services - if (headers.get("Service-Component") != null) { - return true; - } - - // OSGI RFC 124: BluePrint Service - if (headers.get("Bundle-Blueprint") != null) { - return true; - } - - entries = bundle.findEntries("OSGI-INF/blueprint", "*.xml", false); - if (entries != null && entries.hasMoreElements()) { - return true; - } - */ - return false; - } - - private void bundleStarted(Bundle bundle) { - if (!isSCABundle(bundle)) { - return; - } - try { - NodeConfiguration configuration = factory.getConfiguration(bundle, null); - Node node = factory.createNode(configuration); - node.start(); - } catch (Throwable e) { - logger.log(Level.SEVERE, e.getMessage(), e); - } - } - - private void bundleStopping(Bundle bundle) { - Node node = factory.getNodes().get(bundle); - if (node == null) { - return; - } - node.stop(); - } - - public void serviceChanged(ServiceEvent event) { - } - - public void bundleChanged(BundleEvent event) { - int type = event.getType(); - if (type == BundleEvent.STOPPING) { - bundleStopping(event.getBundle()); - } else if (type == BundleEvent.STARTED) { - bundleStarted(event.getBundle()); - } - } - -} diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/node/osgi/impl/OSGiNodeFactoryImpl.java b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/node/osgi/impl/OSGiNodeFactoryImpl.java deleted file mode 100644 index c79fc04c4d..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/node/osgi/impl/OSGiNodeFactoryImpl.java +++ /dev/null @@ -1,142 +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.tuscany.sca.node.osgi.impl; - -import java.io.StringReader; -import java.net.URL; -import java.util.Dictionary; -import java.util.Hashtable; -import java.util.logging.Level; - -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.core.FactoryExtensionPoint; -import org.apache.tuscany.sca.extensibility.equinox.OSGiExtensionPointRegistry; -import org.apache.tuscany.sca.node.configuration.NodeConfiguration; -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; - -/** - * The OSGi based NodeFactory - * - * @version $Rev$ $Date$ - */ -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); - } - - protected NodeConfiguration getConfiguration(Bundle bundle, String compositeContent) { - init(); - - // Create a node configuration - FactoryExtensionPoint modelFactories = registry.getExtensionPoint(FactoryExtensionPoint.class); - NodeConfigurationFactory configurationFactory = modelFactories.getFactory(NodeConfigurationFactory.class); - NodeConfiguration configuration = configurationFactory.createNodeConfiguration(); - - URL location = bundle.getEntry("/"); - String uri = bundle.getSymbolicName(); - configuration.setURI(uri).addContribution(uri, location); - - if (compositeContent != null) { - configuration.addDeploymentComposite(uri, new StringReader(compositeContent)); - } else { - String compositeURI = (String)bundle.getHeaders().get("SCA-Composite"); - if (compositeURI == null) { - compositeURI = "OSGI-INF/sca/bundle.composite"; - } - if (compositeURI != null) { - configuration.addDeploymentComposite(uri, compositeURI); - } - } - // Set the bundle - // configuration.getExtensions().add(bundle); - return configuration; - } - - public synchronized void init() { - if (!inited) { - // Register the ExtensionPointRegistry as an OSGi service - Dictionary props = new Hashtable(); - registry = createExtensionPointRegistry(); - registry.start(); - registration = - bundleContext.registerService(ExtensionPointRegistry.class.getName(), registry, props); - - // Call super.init after the extension point registry is registered - super.init(); - } - } - - public synchronized void destroy() { - if (inited) { - if (registration != null) { - try { - registration.unregister(); - } catch (IllegalStateException e) { - // The service has been unregistered, ignore it - } - registration = null; - } - super.destroy(); - } - - } - - @Override - protected Object getNodeKey(NodeConfiguration configuration) { - // each bundle might have more than one nodes started - return super.getNodeKey(configuration); - } - - @Override - protected ExtensionPointRegistry createExtensionPointRegistry() { - return new OSGiExtensionPointRegistry(bundleContext); - } - - @Override - protected boolean isSchemaValidationEnabled() { - return logger.isLoggable(Level.FINE); - } - -} diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/AbstractOSGiServiceHandler.java b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/AbstractOSGiServiceHandler.java deleted file mode 100644 index 5a4b5aa836..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/AbstractOSGiServiceHandler.java +++ /dev/null @@ -1,97 +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.tuscany.sca.osgi.remoteserviceadmin.impl; - -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.impl.NodeFactoryImpl; -import org.apache.tuscany.sca.osgi.service.discovery.impl.LocalDiscoveryService; -import org.osgi.framework.BundleContext; -import org.osgi.util.tracker.ServiceTracker; - -/** - * Watching and exporting OSGi services - */ -public class AbstractOSGiServiceHandler implements LifeCycleListener { - protected ExtensionPointRegistry registry; - protected BundleContext context; - protected NodeFactoryImpl nodeFactory; - protected EndpointIntrospector introspector; - protected ServiceTracker discoveryTracker; - protected String domainRegistry; - protected String domainURI; - - /** - * @param context - * @param clazz - * @param customizer - */ - protected AbstractOSGiServiceHandler(BundleContext context) { - this.context = context; - this.domainRegistry = context.getProperty("org.osgi.sca.domain.registry"); - this.domainURI = context.getProperty("org.osgi.sca.domain.uri"); - } - - 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; - } - - protected synchronized void init() { - if (nodeFactory == null) { - this.nodeFactory = (NodeFactoryImpl)NodeFactory.getInstance(); - this.nodeFactory.init(); - this.discoveryTracker = LocalDiscoveryService.getTracker(context); - discoveryTracker.open(); - this.introspector = new EndpointIntrospector(context, getExtensionPointRegistry(), discoveryTracker); - } - } - - public void start() { - init(); - } - - public void stop() { - if (nodeFactory != null) { - discoveryTracker.close(); - discoveryTracker = null; - introspector = null; - nodeFactory = null; - registry = null; - context = null; - } - } - - public void setDomainRegistry(String domainRegistry) { - this.domainRegistry = domainRegistry; - } - - public void setDomainURI(String domainURI) { - this.domainURI = domainURI; - } - -} diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/EndpointHelper.java b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/EndpointHelper.java deleted file mode 100644 index 8ecc5f7ea8..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/EndpointHelper.java +++ /dev/null @@ -1,109 +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.tuscany.sca.osgi.remoteserviceadmin.impl; - -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.apache.tuscany.sca.assembly.Endpoint; -import org.apache.tuscany.sca.implementation.osgi.OSGiProperty; -import org.apache.tuscany.sca.interfacedef.Interface; -import org.apache.tuscany.sca.interfacedef.java.JavaInterface; -import org.osgi.framework.BundleContext; -import org.osgi.framework.Constants; -import org.osgi.service.remoteserviceadmin.EndpointDescription; -import org.osgi.service.remoteserviceadmin.RemoteConstants; - -/** - * Implementation of {@link EndpointDescription} - */ -public class EndpointHelper { - private EndpointHelper() { - } - - public static EndpointDescription createEndpointDescription(BundleContext bundleContext, Endpoint endpoint) { - return new EndpointDescription(getProperties(bundleContext, endpoint)); - } - - private static List getInterfaces(Endpoint endpoint) { - Interface intf = endpoint.getComponentServiceInterfaceContract().getInterface(); - JavaInterface javaInterface = (JavaInterface)intf; - return Collections.singletonList(javaInterface.getName()); - } - - private static Map getProperties(BundleContext bundleContext, Endpoint endpoint) { - Map props = new HashMap(); - - if (!endpoint.isRemote()) { - String uuid = OSGiHelper.getFrameworkUUID(bundleContext); - props.put(RemoteConstants.ENDPOINT_FRAMEWORK_UUID, uuid); - } - - for (Object ext : endpoint.getService().getExtensions()) { - if (ext instanceof OSGiProperty) { - OSGiProperty prop = (OSGiProperty)ext; - props.put(prop.getName(), prop.getStringValue()); - } - } - - String serviceID = (String)props.get(Constants.SERVICE_ID); - if (serviceID != null) { - props.put(RemoteConstants.ENDPOINT_SERVICE_ID, Long.parseLong(serviceID)); - } - - // FIXME: [rfeng] We need to calculate the intents supported by this endpoint - /* - QName bindingTypeName = endpoint.getBinding().getType(); - Definitions definitions = null; - if(definitions!=null) { - for(BindingType bindingType: definitions.getBindingTypes()) { - if(bindingType.getType().equals(bindingTypeName)) { - bindingType.getAlwaysProvidedIntents(); - } - } - */ - - String intents = (String)props.get(RemoteConstants.SERVICE_EXPORTED_INTENTS); - String extraIntents = (String)props.get(RemoteConstants.SERVICE_EXPORTED_INTENTS_EXTRA); - if (intents == null) { - intents = ""; - } - if (extraIntents != null) { - intents = intents + " " + extraIntents; - } - - props.put(RemoteConstants.SERVICE_INTENTS, intents.trim()); - - props.put(RemoteConstants.ENDPOINT_ID, endpoint.getURI()); - // FIXME: [rfeng] How to pass in the remote service id from the endpoint XML - props.put(RemoteConstants.SERVICE_IMPORTED_CONFIGS, new String[] {"org.osgi.sca"}); - props.put(Endpoint.class.getName(), endpoint); - List interfaces = getInterfaces(endpoint); - props.put(Constants.OBJECTCLASS, interfaces.toArray(new String[interfaces.size()])); - return props; - } - - public static Endpoint getEndpoint(EndpointDescription endpointDescription) { - return (Endpoint)endpointDescription.getProperties().get(Endpoint.class.getName()); - } - -} diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/EndpointIntrospector.java b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/EndpointIntrospector.java deleted file mode 100644 index d00696a822..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/EndpointIntrospector.java +++ /dev/null @@ -1,550 +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.tuscany.sca.osgi.remoteserviceadmin.impl; - -import static org.apache.tuscany.sca.assembly.Base.SCA11_TUSCANY_NS; -import static org.apache.tuscany.sca.implementation.osgi.OSGiProperty.SCA_BINDINGS; -import static org.apache.tuscany.sca.osgi.remoteserviceadmin.impl.OSGiHelper.createOSGiProperty; -import static org.apache.tuscany.sca.osgi.remoteserviceadmin.impl.OSGiHelper.getStringArray; -import static org.osgi.framework.Constants.OBJECTCLASS; -import static org.osgi.framework.Constants.SERVICE_ID; - -import java.io.IOException; -import java.io.StringWriter; -import java.io.Writer; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.UUID; - -import javax.xml.namespace.QName; -import javax.xml.stream.XMLStreamException; -import javax.xml.stream.XMLStreamWriter; - -import org.apache.tuscany.sca.assembly.AssemblyFactory; -import org.apache.tuscany.sca.assembly.Base; -import org.apache.tuscany.sca.assembly.Binding; -import org.apache.tuscany.sca.assembly.Component; -import org.apache.tuscany.sca.assembly.ComponentReference; -import org.apache.tuscany.sca.assembly.ComponentService; -import org.apache.tuscany.sca.assembly.Composite; -import org.apache.tuscany.sca.assembly.Endpoint; -import org.apache.tuscany.sca.assembly.Reference; -import org.apache.tuscany.sca.assembly.Service; -import org.apache.tuscany.sca.contribution.Contribution; -import org.apache.tuscany.sca.contribution.ContributionFactory; -import org.apache.tuscany.sca.contribution.processor.ContributionReadException; -import org.apache.tuscany.sca.contribution.processor.ContributionResolveException; -import org.apache.tuscany.sca.contribution.resolver.ExtensibleModelResolver; -import org.apache.tuscany.sca.contribution.resolver.ModelResolver; -import org.apache.tuscany.sca.contribution.resolver.ModelResolverExtensionPoint; -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.core.FactoryExtensionPoint; -import org.apache.tuscany.sca.core.UtilityExtensionPoint; -import org.apache.tuscany.sca.deployment.Deployer; -import org.apache.tuscany.sca.implementation.osgi.OSGiImplementation; -import org.apache.tuscany.sca.implementation.osgi.OSGiImplementationFactory; -import org.apache.tuscany.sca.implementation.osgi.OSGiProperty; -import org.apache.tuscany.sca.implementation.osgi.SCAConfig; -import org.apache.tuscany.sca.implementation.osgi.ServiceDescriptionsFactory; -import org.apache.tuscany.sca.interfacedef.InvalidInterfaceException; -import org.apache.tuscany.sca.interfacedef.java.JavaInterface; -import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceContract; -import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceFactory; -import org.apache.tuscany.sca.osgi.service.discovery.impl.LocalDiscoveryService; -import org.apache.tuscany.sca.osgi.service.discovery.impl.LocalDiscoveryService.ExtenderConfiguration; -import org.apache.tuscany.sca.policy.Intent; -import org.apache.tuscany.sca.policy.PolicyFactory; -import org.apache.tuscany.sca.policy.PolicySet; -import org.oasisopen.sca.ServiceRuntimeException; -import org.oasisopen.sca.annotation.PolicySets; -import org.osgi.framework.Bundle; -import org.osgi.framework.BundleContext; -import org.osgi.framework.ServiceReference; -import org.osgi.service.remoteserviceadmin.EndpointDescription; -import org.osgi.service.remoteserviceadmin.RemoteConstants; -import org.osgi.util.tracker.ServiceTracker; - -/** - * Introspect an OSGi Service to create an SCA composite that contains a single component with - * implementation.osgi - */ -public class EndpointIntrospector { - // private BundleContext context; - private AssemblyFactory assemblyFactory; - private ContributionFactory contributionFactory; - private OSGiImplementationFactory implementationFactory; - private PolicyFactory policyFactory; - private ExtensionPointRegistry registry; - private FactoryExtensionPoint factories; - private ModelResolverExtensionPoint modelResolvers; - // private StAXArtifactProcessor compositeProcessor; - private JavaInterfaceFactory javaInterfaceFactory; - private Deployer deployer; - private ServiceTracker discoveryTracker; - - /** - * @param name - * @return - */ - private static QName getQName(String name) { - QName qname; - if (name.startsWith("{")) { - int i = name.indexOf('}'); - if (i != -1) { - qname = new QName(name.substring(1, i), name.substring(i + 1)); - } else { - throw new IllegalArgumentException("Invalid qname: " + name); - } - } else { - // Default to SCA namespace - qname = new QName("", name); - } - return qname; - } - - /** - * @param context TODO - * @param registry - */ - public EndpointIntrospector(BundleContext context, ExtensionPointRegistry registry, ServiceTracker discoveryTracker) { - super(); - this.registry = registry; - // this.context = context; - this.discoveryTracker = discoveryTracker; - this.factories = registry.getExtensionPoint(FactoryExtensionPoint.class); - this.modelResolvers = registry.getExtensionPoint(ModelResolverExtensionPoint.class); -// this.compositeProcessor = -// registry.getExtensionPoint(StAXArtifactProcessorExtensionPoint.class).getProcessor(Composite.class); - this.assemblyFactory = factories.getFactory(AssemblyFactory.class); - this.contributionFactory = factories.getFactory(ContributionFactory.class); - this.policyFactory = factories.getFactory(PolicyFactory.class); - this.implementationFactory = factories.getFactory(OSGiImplementationFactory.class); - this.javaInterfaceFactory = factories.getFactory(JavaInterfaceFactory.class); - this.deployer = registry.getExtensionPoint(UtilityExtensionPoint.class).getUtility(Deployer.class); - } - - private Intent getIntent(String intent) { - QName name = getQName(intent); - Intent i = policyFactory.createIntent(); - i.setName(name); - return i; - } - - private List getIntents(String[] intents) { - if (intents == null || intents.length == 0) { - return Collections.emptyList(); - } - List intentList = new ArrayList(); - for (String i : intents) { - Intent intent = getIntent(i); - if (intent != null) { - intentList.add(intent); - } - } - return intentList; - } - - /** - * Any property in the map overrides the service reference properties, regardless of - * case. That is, if the map contains a key then it will override any case variant - * of this key in the Service Reference.

- * If the map contains the objectClass or service. id property key in any case - * variant, then these properties must not override the Service References value. This - * implies that the map can provide the service.exported. interfaces, property allowing - * the Topology Manager to export any registered service, also services not specifically - * marked to be exported. - * @param reference - * @param props - * @return - */ - private Map getProperties(ServiceReference reference, Map props) { - String[] names = reference.getPropertyKeys(); - Map properties = new HashMap(); - if (names != null) { - for (String name : names) { - properties.put(name, reference.getProperty(name)); - } - } - if (props != null) { - // Create a map of names (key = lowcase name, value = name) - Map nameMap = new HashMap(); - if (names != null) { - for (String name : names) { - nameMap.put(name.toLowerCase(), name); - } - } - for (Map.Entry p : props.entrySet()) { - if (OBJECTCLASS.equalsIgnoreCase(p.getKey())) { - throw new IllegalArgumentException(OBJECTCLASS + " property cannot be overridden."); - } else if (SERVICE_ID.equalsIgnoreCase(p.getKey())) { - throw new IllegalArgumentException(SERVICE_ID + " property cannot be overridden."); - } - String key = nameMap.get(p.getKey().toLowerCase()); - if (key != null) { - properties.put(key, p.getValue()); - } else { - properties.put(p.getKey(), p.getValue()); - } - } - } - return properties; - } - - /** - * Parse the Stringp[] to support values that are separated by comma - * @param interfaces - * @return - */ - private String[] parse(String[] interfaces) { - if (interfaces == null) { - return null; - } - List names = new ArrayList(); - for (String i : interfaces) { - String[] parts = i.split(","); - for (String p : parts) { - names.add(p.trim()); - } - } - return names.toArray(new String[names.size()]); - } - - /** - * Introspect a local OSGi Service represented by the ServiceReference to create - * an SCA service with the required intents and bindings - * @param reference The service reference for a local OSGi service - * @param props Addiontal properties - * @return An SCA contribution with a deployable composite for the SCA service - * @throws Exception - */ - public Contribution introspect(ServiceReference reference, Map props) throws Exception { - Bundle bundle = reference.getBundle(); - Map properties = getProperties(reference, props); - Collection osgiProps = implementationFactory.createOSGiProperties(reference); - Long sid = (Long)reference.getProperty(SERVICE_ID); - - String[] requiredIntents = getStringArray(properties.get(RemoteConstants.SERVICE_EXPORTED_INTENTS)); - List intents = getIntents(requiredIntents); - String[] requiredIntentsExtra = getStringArray(properties.get(RemoteConstants.SERVICE_EXPORTED_INTENTS_EXTRA)); - List extraIntents = getIntents(requiredIntentsExtra); - Set allIntents = new HashSet(intents); - allIntents.addAll(extraIntents); - - String[] bindingNames = getStringArray(properties.get(SCA_BINDINGS)); - Collection bindings = loadBindings(bindingNames); - - String[] remoteInterfaces = getStringArray(reference.getProperty(RemoteConstants.SERVICE_EXPORTED_INTERFACES)); - if (remoteInterfaces == null || remoteInterfaces.length > 0 && "*".equals(remoteInterfaces[0])) { - remoteInterfaces = getStringArray(reference.getProperty(OBJECTCLASS)); - } else { - remoteInterfaces = parse(remoteInterfaces); - String[] objectClasses = getStringArray(reference.getProperty(OBJECTCLASS)); - Set objectClassSet = new HashSet(Arrays.asList(objectClasses)); - if (!objectClassSet.containsAll(Arrays.asList(remoteInterfaces))) { - throw new IllegalArgumentException( - "The exported interfaces are not a subset of the types" + " listed in the objectClass service property from the Service Reference"); - } - } - - Contribution contribution = generateContribution(bundle, sid, remoteInterfaces, bindings, allIntents, osgiProps); - return contribution; - } - - public String instrospectSCAConfig(ServiceReference reference, Map props, ComponentService service){ - - ServiceDescriptionsFactory serviceDescriptionFactory = registry.getExtensionPoint(ServiceDescriptionsFactory.class); - SCAConfig scaConfig = serviceDescriptionFactory.createSCAConfig(); - - // add the binding configurations - List bindings = scaConfig.getBindings(); - bindings.addAll(service.getBindings()); - - // add the intent configurations - List intents = scaConfig.getIntents(); - intents.addAll(service.getRequiredIntents()); - - // add the policy set configurations - List policySets = scaConfig.getPolicySets(); - policySets.addAll(service.getPolicySets()); - - // set up the target namespace - // TODO - there is a bug in the spec which only allow bindings from one - // namsepace to be included in sca-config element. Here we just - // the first bindings namespace - Map properties = getProperties(reference, props); - String[] bindingNames = getStringArray(properties.get(SCA_BINDINGS)); - if (bindingNames.length > 0){ - QName firstBindingQName = getQName(bindingNames[0]); - scaConfig.setTargetNamespace(firstBindingQName.getNamespaceURI()); - } - - // write the sca config out to XML - String scaConfigXMLString = ""; - - try { - Writer writer = new StringWriter(); - deployer.saveXMLDocument(scaConfig, writer, deployer.createMonitor()); - scaConfigXMLString = writer.toString(); - } catch (Exception ex){ - throw new ServiceRuntimeException(ex); - } - - return scaConfigXMLString; - } - - /* - public Contribution loadContribution(Bundle bundle, Composite composite) { - try { - URL root = bundle.getEntry("/"); - Contribution contribution = deployer.loadContribution(root.toURI(), root, deployer.createMonitor()); - deployer.attachDeploymentComposite(contribution, composite, false); - return contribution; - } catch (Exception e) { - throw new ServiceRuntimeException(e); - } - } - */ - - /** - * Generate a contribution that contains the composite for the exported service - * @param bundle The OSGi bundle - * @param sid The service id - * @param remoteInterfaces - * @param bindings - * @param allIntents - * @return - * @throws ClassNotFoundException - * @throws InvalidInterfaceException - */ - private Contribution generateContribution(Bundle bundle, - Long sid, - String[] remoteInterfaces, - Collection bindings, - Set allIntents, - Collection osgiProps) throws ClassNotFoundException, - InvalidInterfaceException { - String id = "osgi.service." + UUID.randomUUID(); - Composite composite = assemblyFactory.createComposite(); - composite.setName(new QName(SCA11_TUSCANY_NS, id)); - - Component component = assemblyFactory.createComponent(); - component.setName(id); - - composite.getComponents().add(component); - - OSGiImplementation implementation = implementationFactory.createOSGiImplementation(); - - implementation.setBundle(bundle); - component.setImplementation(implementation); - implementation.setUnresolved(false); - - OSGiProperty serviceID = implementationFactory.createOSGiProperty(); - serviceID.setName(SERVICE_ID); - // The service.id is Long - serviceID.setValue(String.valueOf(sid)); - - for (String intf : remoteInterfaces) { - Service service = assemblyFactory.createService(); - JavaInterfaceContract interfaceContract = createJavaInterfaceContract(bundle, intf); - String name = intf.substring(intf.lastIndexOf('.') + 1); - service.setName(name); - service.setInterfaceContract(interfaceContract); - - implementation.getServices().add(service); - - ComponentService componentService = assemblyFactory.createComponentService(); - componentService.setName(service.getName()); - componentService.getExtensions().add(serviceID); - componentService.getExtensions().addAll(osgiProps); - - component.getServices().add(componentService); - componentService.setService(service); - } - - for (ComponentService componentService : component.getServices()) { - componentService.getRequiredIntents().addAll(allIntents); - componentService.getBindings().addAll(bindings); - } - - // FIXME: Should we scan the owning bundle to create the SCA contribution? - Contribution contribution = loadContribution(bundle, id, composite); - return contribution; - } - - private Contribution loadContribution(Bundle bundle, String id, Composite composite) { - Contribution contribution = contributionFactory.createContribution(); - contribution.setClassLoader(OSGiHelper.createBundleClassLoader(bundle)); - contribution.setURI(id); - contribution.setLocation(bundle.getEntry("/").toString()); - deployer.attachDeploymentComposite(contribution, composite, false); - ModelResolver modelResolver = new ExtensibleModelResolver(contribution, modelResolvers, factories); - contribution.setModelResolver(modelResolver); - // compositeProcessor.resolve(composite, modelResolver, new ProcessorContext(registry)); - contribution.setUnresolved(true); - return contribution; - } - - /** - * @param bundle - * @param endpoint - * @return - * @throws Exception - */ - public Contribution introspect(Bundle bundle, EndpointDescription endpoint) throws Exception { - Collection bindings = Collections.emptyList(); - Collection interfaces = Collections.emptyList(); - Collection intents = Collections.emptyList(); - Endpoint ep = (Endpoint)endpoint.getProperties().get(Endpoint.class.getName()); - Collection osgiProps = implementationFactory.createOSGiProperties(endpoint.getProperties()); - if (ep != null) { - bindings = Collections.singletonList(ep.getBinding()); - interfaces = Collections.singletonList(((JavaInterface)ep.getComponentServiceInterfaceContract().getInterface()).getName()); - // FIXME: [rfeng] We need to build the in-memory composite so that intents are calculated at the ep level - intents = ep.getService().getRequiredIntents(); - } else { - Map properties = endpoint.getProperties(); - interfaces = endpoint.getInterfaces(); - String[] requiredIntents = getStringArray(properties.get(RemoteConstants.SERVICE_INTENTS)); - intents = getIntents(requiredIntents); - - String[] bindingNames = getStringArray(properties.get(SCA_BINDINGS)); - bindings = loadBindings(bindingNames); - } - - Contribution contribution = generateContribution(bundle, interfaces, bindings, intents, osgiProps); - return contribution; - } - - private Contribution generateContribution(Bundle bundle, - Collection remoteInterfaces, - Collection bindings, - Collection intents, - Collection osgiProps) throws ClassNotFoundException, - InvalidInterfaceException, ContributionResolveException { - String id = "osgi.reference." + UUID.randomUUID(); - Composite composite = assemblyFactory.createComposite(); - composite.setName(new QName(Base.SCA11_TUSCANY_NS, id)); - - Component component = assemblyFactory.createComponent(); - component.setName(id); - // component.setAutowire(Boolean.TRUE); - - composite.getComponents().add(component); - - OSGiImplementation implementation = implementationFactory.createOSGiImplementation(); - - implementation.setBundle(bundle); - component.setImplementation(implementation); - implementation.setUnresolved(false); - - int count = 0; - for (String intf : remoteInterfaces) { - Reference reference = assemblyFactory.createReference(); - JavaInterfaceContract interfaceContract = createJavaInterfaceContract(bundle, intf); - - reference.setName("ref" + (count++)); - reference.setInterfaceContract(interfaceContract); - - implementation.getReferences().add(reference); - - ComponentReference componentReference = assemblyFactory.createComponentReference(); - componentReference.setName(reference.getName()); - componentReference.getExtensions().addAll(osgiProps); - component.getReferences().add(componentReference); - componentReference.setReference(reference); - componentReference.setWiredByImpl(true); - } - - for (ComponentReference componentReference : component.getReferences()) { - componentReference.getRequiredIntents().addAll(intents); - componentReference.getBindings().addAll(bindings); - } - - Contribution contribution = loadContribution(bundle, id, composite); - return contribution; - } - - private JavaInterfaceContract createJavaInterfaceContract(Bundle bundle, String intf) - throws ClassNotFoundException, InvalidInterfaceException { - JavaInterfaceContract interfaceContract = javaInterfaceFactory.createJavaInterfaceContract(); - Class interfaceClass = bundle.loadClass(intf); - JavaInterface javaInterface = javaInterfaceFactory.createJavaInterface(); - // [rfeng] For OSGi, the interfaces should be marked as remotable - javaInterface.setRemotable(true); - // [rfeng] We need to mark the interface to be remotable before the createJavaInterface() is called - javaInterfaceFactory.createJavaInterface(javaInterface, interfaceClass); - interfaceContract.setInterface(javaInterface); - if (javaInterface.getCallbackClass() != null) { - JavaInterface callbackInterface = javaInterfaceFactory.createJavaInterface(javaInterface.getCallbackClass()); - callbackInterface.setRemotable(true); - interfaceContract.setCallbackInterface(callbackInterface); - } - return interfaceContract; - } - - private Collection loadBindings(String[] qnames) throws IOException, ContributionReadException, - XMLStreamException { - if (qnames == null || qnames.length == 0) { - return Collections.emptyList(); - } - QName[] bindingNames = new QName[qnames.length]; - int index = 0; - for (String name : qnames) { - bindingNames[index++] = getQName(name); - } - - LocalDiscoveryService discoveryService = (LocalDiscoveryService)discoveryTracker.getService(); - - Map bindingMap = new HashMap(); - if (discoveryService != null) { - for (ExtenderConfiguration config : discoveryService.getConfigurations()) { - for (SCAConfig sc : config.getSCAConfigs()) { - for (QName bindingName : bindingNames) { - if ("".equals(bindingName.getNamespaceURI()) || - sc.getTargetNamespace().equals(bindingName.getNamespaceURI())) { - for (Binding binding : sc.getBindings()) { - if (bindingName.getLocalPart().equals(binding.getName())) { - // We need to check duplications - if (bindingMap.put(bindingName, binding) != null) { - throw new ServiceRuntimeException("Duplicate binding found: " + bindingName); - } - } - } - } - } - } - } - } - for (QName bindingName : bindingNames) { - if (!bindingMap.containsKey(bindingName)) { - throw new ServiceRuntimeException("Binding cannot be resolved: " + bindingName); - } - } - return bindingMap.values(); - } - -} diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/EndpointMatcher.java b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/EndpointMatcher.java deleted file mode 100644 index f978ba658d..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/EndpointMatcher.java +++ /dev/null @@ -1,273 +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.tuscany.sca.osgi.remoteserviceadmin.impl; - -import java.util.Collection; -import java.util.Collections; -import java.util.HashSet; -import java.util.Hashtable; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.ArrayBlockingQueue; -import java.util.concurrent.BlockingQueue; -import java.util.logging.Level; -import java.util.logging.Logger; - -import org.apache.tuscany.sca.common.java.collection.CollectionMap; -import org.osgi.framework.BundleContext; -import org.osgi.framework.Filter; -import org.osgi.framework.FrameworkUtil; -import org.osgi.framework.InvalidSyntaxException; -import org.osgi.framework.hooks.service.ListenerHook.ListenerInfo; -import org.osgi.service.remoteserviceadmin.EndpointDescription; - -/** - * Matching endpoint descriptions against the sevice listeners using OSGi filiters - */ -public class EndpointMatcher { - private static final Logger logger = Logger.getLogger(EndpointMatcher.class.getName()); - private final EndpointMap endpointDescriptions = new EndpointMap(); - private final ListenerMap listeners = new ListenerMap(); - private final BundleContext context; - private final BlockingQueue importQueue = new ArrayBlockingQueue(256, true); - - public EndpointMatcher(BundleContext context) { - super(); - this.context = context; - } - - public static boolean matches(String filter, EndpointDescription endpointDescription) { - Filter f = null; - try { - f = FrameworkUtil.createFilter(filter); - } catch (InvalidSyntaxException e) { - throw new IllegalArgumentException(e); - } - Hashtable props = new Hashtable(endpointDescription.getProperties()); - return f.match(props); - } - - private void importEndpoint(ListenerInfo listener, EndpointDescription ep) { - ImportAction request = new ImportAction(ImportAction.Type.Add, listener, ep); - try { - importQueue.put(request); - } catch (InterruptedException e) { - throw new IllegalArgumentException(e); - } - } - - private void unimportEndpoint(ListenerInfo listener, EndpointDescription ep) { - ImportAction request = new ImportAction(ImportAction.Type.Remove, listener, ep); - try { - importQueue.put(request); - } catch (InterruptedException e) { - throw new IllegalArgumentException(e); - } - } - - public synchronized void added(ListenerInfo listener) { - String filter = listener.getFilter(); - listeners.putValue(filter, listener); - for (EndpointDescription ep : getEndpoints(filter)) { - importEndpoint(listener, ep); - } - } - - public synchronized Collection added(Collection listeners) { - for (ListenerInfo listener : listeners) { - if (accepts(listener)) { - if (!listener.isRemoved() && listener.getBundleContext().getBundle().getBundleId() != 0L) { - added(listener); - } - } - } - return getFilters(); - } - - private boolean accepts(ListenerInfo listener) { - BundleContext context = listener.getBundleContext(); - return context != null && listener.getFilter() != null && context != this.context; - } - - public synchronized void removed(ListenerInfo listener) { - String filter = listener.getFilter(); - if (accepts(listener)) - if (listeners.removeValue(filter, listener, true)) { - // Find the corresponding ImportRegistration with the listener - for (EndpointDescription ep : getEndpoints(filter)) { - unimportEndpoint(listener, ep); - } - if (getListeners(filter).isEmpty()) { - // No more listeners on the this filter, clean up the endpoint descriptionss - endpointDescriptions.remove(filter); - } - - } - } - - public synchronized Collection removed(Collection listeners) { - for (ListenerInfo listener : listeners) { - removed(listener); - } - return getFilters(); - } - - public synchronized void added(EndpointDescription endpointDescription) { - for (Map.Entry> entry : listeners.entrySet()) { - if (matches(entry.getKey(), endpointDescription)) { - endpointDescriptions.putValue(entry.getKey(), endpointDescription); - for (ListenerInfo listener : entry.getValue()) { - importEndpoint(listener, endpointDescription); - } - } - } - } - - public synchronized void added(EndpointDescription endpointDescription, String matchedFilter) { - if (endpointDescriptions.putValue(matchedFilter, endpointDescription)) { - Collection listenerInfos = listeners.get(matchedFilter); - if (listenerInfos != null) { - for (ListenerInfo listener : listenerInfos) { - importEndpoint(listener, endpointDescription); - } - } - } - } - - public synchronized void removed(EndpointDescription endpointDescription, String matchedFilter) { - if (endpointDescriptions.removeValue(matchedFilter, endpointDescription, true)) { - for (ListenerInfo listener : getListeners(matchedFilter)) { - unimportEndpoint(listener, endpointDescription); - } - } - } - - public synchronized Set getFilters() { - return new HashSet(listeners.keySet()); - } - - public synchronized void clear() { - endpointDescriptions.clear(); - listeners.clear(); - importQueue.clear(); - } - - public synchronized Collection getListeners(String filter) { - Collection collection = listeners.get(filter); - if (collection == null) { - return Collections.emptySet(); - } else { - return collection; - } - } - - public synchronized Collection getEndpoints(String filter) { - Collection collection = endpointDescriptions.get(filter); - if (collection == null) { - return Collections.emptySet(); - } else { - return collection; - } - } - - public CollectionMap, ListenerInfo> groupListeners(EndpointDescription endpointDescription, - String matchedFilter) { - Collection snapshot = new HashSet(getListeners(matchedFilter)); - - // Try to partition the listeners by the interface classes - List interfaceNames = endpointDescription.getInterfaces(); - CollectionMap, ListenerInfo> interfaceToListeners = new CollectionMap, ListenerInfo>(); - for (String i : interfaceNames) { - for (Iterator it = snapshot.iterator(); it.hasNext();) { - try { - ListenerInfo listener = it.next(); - if (listener.isRemoved()) { - it.remove(); - continue; - } - if (!matchedFilter.equals(listener.getFilter())) { - continue; - } - try { - // The classloading can be synchronzed against the serviceListeners - Class interfaceClass = listener.getBundleContext().getBundle().loadClass(i); - interfaceToListeners.putValue(interfaceClass, listener); - } catch (IllegalStateException e) { - logger.log(Level.WARNING, e.getMessage(), e); - // Ignore the exception - } - } catch (ClassNotFoundException e) { - // Ignore the listener as it cannot load the interface class - } - } - } - return interfaceToListeners; - } - - public BlockingQueue getImportQueue() { - return importQueue; - } - - private static class ListenerMap extends CollectionMap { - private static final long serialVersionUID = -8612202123531331219L; - - @Override - protected Collection createCollection() { - return new HashSet(); - } - } - - private static class EndpointMap extends CollectionMap { - private static final long serialVersionUID = -6261405398109798549L; - - @Override - protected Collection createCollection() { - return new HashSet(); - } - } - - /** - * Representation of an import/unimport request - */ - public static class ImportAction { - enum Type { - Add, Remove - }; - - public final Type type; - public final ListenerInfo listenerInfo; - public final EndpointDescription endpointDescription; - - /** - * @param type - * @param listenerInfo - * @param endpointDescription - */ - public ImportAction(Type type, ListenerInfo listenerInfo, EndpointDescription endpointDescription) { - super(); - this.type = type; - this.listenerInfo = listenerInfo; - this.endpointDescription = endpointDescription; - } - } - -} diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/ExportReferenceImpl.java b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/ExportReferenceImpl.java deleted file mode 100644 index 13c7dd3cf3..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/ExportReferenceImpl.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.tuscany.sca.osgi.remoteserviceadmin.impl; - -import org.apache.tuscany.sca.node.Node; -import org.osgi.framework.ServiceReference; -import org.osgi.service.remoteserviceadmin.EndpointDescription; -import org.osgi.service.remoteserviceadmin.ExportReference; -import org.osgi.service.remoteserviceadmin.ExportRegistration; - -/** - * - */ -public class ExportReferenceImpl implements ExportReference { - private Node node; - private final ServiceReference exportedService; - private final EndpointDescription endpointDescription; - private int count; - - /** - * @param exportedService - * @param endpointDescription - */ - public ExportReferenceImpl(Node node, ServiceReference exportedService, EndpointDescription endpointDescription) { - super(); - this.node = node; - this.exportedService = exportedService; - this.endpointDescription = endpointDescription; - } - - public ServiceReference getExportedService() { - return exportedService; - } - - public EndpointDescription getExportedEndpoint() { - return endpointDescription; - } - - public synchronized ExportRegistration register() { - count++; - return new ExportRegistrationImpl(this); - } - - public synchronized void unregister() { - if (count > 0) { - count--; - } - if (count == 0) { - if (node != null) { - node.stop(); - node = null; - } - } - } - -} diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/ExportRegistrationImpl.java b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/ExportRegistrationImpl.java deleted file mode 100644 index 39cbd7b9e6..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/ExportRegistrationImpl.java +++ /dev/null @@ -1,80 +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.tuscany.sca.osgi.remoteserviceadmin.impl; - -import org.osgi.framework.ServiceReference; -import org.osgi.service.remoteserviceadmin.EndpointDescription; -import org.osgi.service.remoteserviceadmin.ExportReference; -import org.osgi.service.remoteserviceadmin.ExportRegistration; - -/** - * Implementation of {@link ExportRegistration} - */ -public class ExportRegistrationImpl implements ExportRegistration { - private ExportReferenceImpl exportReference; - private Throwable exception; - - /** - * @param exportedService - * @param endpointDescription - * @param exception - */ - public ExportRegistrationImpl(ExportReferenceImpl exportReference, Throwable exception) { - super(); - this.exportReference = exportReference; - this.exception = exception; - } - - /** - * @param exportedService - * @param endpointDescription - */ - public ExportRegistrationImpl(ExportReferenceImpl exportReference) { - this(exportReference, null); - } - - /** - * @see org.osgi.remoteserviceadmin.ExportRegistration#close() - */ - public void close() { - if (exportReference != null) { - exportReference.unregister(); - } - exception = null; - exportReference = null; - } - - public ServiceReference getExportedService() { - return exportReference.getExportedService(); - } - - public EndpointDescription getEndpointDescription() { - return exportReference.getExportedEndpoint(); - } - - public Throwable getException() { - return exception; - } - - public ExportReference getExportReference() throws IllegalStateException { - return exportReference; - } - -} diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/ImportReferenceImpl.java b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/ImportReferenceImpl.java deleted file mode 100644 index 9c5b1818c8..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/ImportReferenceImpl.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.tuscany.sca.osgi.remoteserviceadmin.impl; - -import org.apache.tuscany.sca.node.Node; -import org.osgi.framework.ServiceReference; -import org.osgi.service.remoteserviceadmin.EndpointDescription; -import org.osgi.service.remoteserviceadmin.ImportReference; -import org.osgi.service.remoteserviceadmin.ImportRegistration; - -/** - * Implementation of ImportReference. It keeps a reference count of ImportRegistrations - */ -public class ImportReferenceImpl implements ImportReference { - private Node node; - private final ServiceReference importedService; - private final EndpointDescription endpointDescription; - private int count = 0; - - /** - * @param exportedService - * @param endpointDescription - */ - public ImportReferenceImpl(Node node, ServiceReference importedService, EndpointDescription endpointDescription) { - super(); - this.node = node; - this.importedService = importedService; - this.endpointDescription = endpointDescription; - } - - public ServiceReference getImportedService() { - return importedService; - } - - public EndpointDescription getImportedEndpoint() { - return endpointDescription; - } - - public synchronized ImportRegistration register() { - count++; - return new ImportRegistrationImpl(this); - } - - public synchronized void unregister() { - if (count > 0) { - count--; - } - if (count == 0) { - if (node != null) { - node.stop(); - node = null; - } - } - } -} diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/ImportRegistrationImpl.java b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/ImportRegistrationImpl.java deleted file mode 100644 index 9506128286..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/ImportRegistrationImpl.java +++ /dev/null @@ -1,70 +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.tuscany.sca.osgi.remoteserviceadmin.impl; - -import org.osgi.service.remoteserviceadmin.ImportReference; -import org.osgi.service.remoteserviceadmin.ImportRegistration; - -/** - * - */ -public class ImportRegistrationImpl implements ImportRegistration { - private ImportReferenceImpl importReference; - private Throwable exception; - - /** - * @param importReference - */ - public ImportRegistrationImpl(ImportReferenceImpl importReference) { - super(); - this.importReference = importReference; - } - - /** - * @param exportedService - * @param endpointDescription - * @param exception - */ - public ImportRegistrationImpl(ImportReferenceImpl importReference, Throwable exception) { - super(); - this.importReference = importReference; - this.exception = exception; - } - - /** - * @see org.osgi.remoteserviceadmin.ImportRegistration#close() - */ - public void close() { - if (importReference != null) { - importReference.unregister(); - } - exception = null; - importReference = null; - } - - public Throwable getException() { - return exception; - } - - public ImportReference getImportReference() { - return importReference; - } - -} diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/OSGiHelper.java b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/OSGiHelper.java deleted file mode 100644 index 460d291f53..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/OSGiHelper.java +++ /dev/null @@ -1,234 +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.tuscany.sca.osgi.remoteserviceadmin.impl; - -import java.io.IOException; -import java.net.URL; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.Enumeration; -import java.util.HashSet; -import java.util.List; -import java.util.UUID; - -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.core.FactoryExtensionPoint; -import org.apache.tuscany.sca.implementation.osgi.OSGiImplementationFactory; -import org.apache.tuscany.sca.implementation.osgi.OSGiProperty; -import org.osgi.framework.Bundle; -import org.osgi.framework.BundleContext; -import org.osgi.framework.Filter; -import org.osgi.framework.InvalidSyntaxException; -import org.osgi.framework.ServiceReference; - -/** - * - */ -public class OSGiHelper { - public final static String FRAMEWORK_UUID = "org.osgi.framework.uuid"; - - private OSGiHelper() { - } - - /** - * In OSGi, the value of String+ can be a single String, String[] or Collection - * @param value - * @return - */ - public static String[] getStringArray(Object value) { - if (value == null) { - return null; - } - if (value instanceof String) { - return new String[] {(String)value}; - } else if (value instanceof Collection) { - Collection collection = (Collection)value; - return collection.toArray(new String[collection.size()]); - } - return (String[])value; - - } - - public static Collection getStringCollection(Object value) { - String[] values = getStringArray(value); - if (values == null) { - return null; - } else { - return Arrays.asList(values); - } - } - - public static String[] getStringArray(ServiceReference serviceReference, String propertyName) { - Object propertyValue = serviceReference.getProperty(propertyName); - return getStringArray(propertyValue); - } - - public static Collection getStringCollection(ServiceReference serviceReference, String propertyName) { - Object propertyValue = serviceReference.getProperty(propertyName); - return getStringCollection(propertyValue); - } - - public static Filter createFilter(BundleContext context, String filterValue) { - if (filterValue == null) { - return null; - } - try { - return context.createFilter(filterValue); - } catch (InvalidSyntaxException ex) { - throw new IllegalArgumentException("Invalid Filter: " + filterValue, ex); - } - } - - /** - * Get a collection of resources that are configured by the given header - * @param bundle The bundle - * @param header - * @param defaultValue - * @return - */ - public static Collection getConfiguration(Bundle bundle, String header, String defaultValue) { - String value = (String)bundle.getHeaders().get(header); - if (value == null) { - return Collections.emptyList(); - } - value = value.trim(); - String paths[] = value.split("( |\t|\n|\r|\f|,)+"); - if ("".equals(value) || paths.length == 0) { - if (defaultValue != null) { - paths = new String[] {defaultValue}; - } else { - paths = new String[0]; - } - } - Collection files = new HashSet(); - for (String path : paths) { - if ("".equals(path)) { - // Skip empty ones - continue; - } - if (path.endsWith("/")) { - path = path + "*.xml"; - } - if (!path.startsWith("/")) { - path = "/" + path; - } - int lastIndex = path.lastIndexOf('/'); - String root = path.substring(0, lastIndex); - if ("".equals(root)) { - root = "/"; - } - String pattern = path.substring(lastIndex + 1); - Enumeration entries = bundle.findEntries(root, pattern, false); - if (entries != null) { - while (entries.hasMoreElements()) { - files.add(entries.nextElement()); - } - } - } - return files; - } - - public static Collection getOSGiProperties(ExtensionPointRegistry registry, ServiceReference reference) { - FactoryExtensionPoint factoryExtensionPoint = registry.getExtensionPoint(FactoryExtensionPoint.class); - OSGiImplementationFactory implementationFactory = - factoryExtensionPoint.getFactory(OSGiImplementationFactory.class); - return implementationFactory.createOSGiProperties(reference); - } - - public static OSGiProperty createOSGiProperty(ExtensionPointRegistry registry, String name, Object value) { - FactoryExtensionPoint factoryExtensionPoint = registry.getExtensionPoint(FactoryExtensionPoint.class); - OSGiImplementationFactory implementationFactory = - factoryExtensionPoint.getFactory(OSGiImplementationFactory.class); - return implementationFactory.createOSGiProperty(name, value); - } - - public synchronized static String getFrameworkUUID(BundleContext bundleContext) { - String uuid = null; - if (bundleContext != null) { - uuid = bundleContext.getProperty(FRAMEWORK_UUID); - } else { - uuid = System.getProperty(FRAMEWORK_UUID); - } - if (uuid == null) { - uuid = UUID.randomUUID().toString(); - } - System.setProperty(FRAMEWORK_UUID, uuid); - return uuid; - } - - public static ClassLoader createBundleClassLoader(Bundle bundle) { - return new BundleClassLoader(bundle); - } - - private static class BundleClassLoader extends ClassLoader { - private Bundle bundle; - - public BundleClassLoader(Bundle bundle) { - super(null); - this.bundle = bundle; - } - - @Override - protected Class findClass(String name) throws ClassNotFoundException { - return bundle.loadClass(name); - } - - @Override - protected URL findResource(String name) { - return bundle.getResource(name); - } - - @Override - protected Enumeration findResources(String name) throws IOException { - Enumeration urls = bundle.getResources(name); - if (urls == null) { - List list = Collections.emptyList(); - return Collections.enumeration(list); - } else { - return urls; - } - } - } - - /** - * Find out what elements are added between the oldValues and newValues - * @param oldValues - * @param newValues - * @return - */ - public static Collection getAddedItems(Collection oldValues, Collection newValues) { - if (newValues == null) { - newValues = Collections.emptySet(); - } - - Collection deltaInterest = new HashSet(newValues); - if (oldValues == null) { - oldValues = Collections.emptySet(); - } - deltaInterest.removeAll(oldValues); - return deltaInterest; - } - - public static Collection getRemovedItems(Collection oldValues, Collection newValues) { - return getAddedItems(newValues, oldValues); - } - -} diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/OSGiServiceExporter.java b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/OSGiServiceExporter.java deleted file mode 100644 index 081a3a60c0..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/OSGiServiceExporter.java +++ /dev/null @@ -1,163 +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.tuscany.sca.osgi.remoteserviceadmin.impl; - -import static org.apache.tuscany.sca.osgi.remoteserviceadmin.impl.EndpointHelper.createEndpointDescription; -import static org.apache.tuscany.sca.osgi.remoteserviceadmin.impl.OSGiHelper.createOSGiProperty; -import static org.apache.tuscany.sca.osgi.remoteserviceadmin.impl.OSGiHelper.getFrameworkUUID; -import static org.apache.tuscany.sca.osgi.remoteserviceadmin.impl.OSGiHelper.getOSGiProperties; -import static org.osgi.framework.Constants.SERVICE_ID; -import static org.osgi.service.remoteserviceadmin.RemoteConstants.ENDPOINT_FRAMEWORK_UUID; -import static org.osgi.service.remoteserviceadmin.RemoteConstants.ENDPOINT_SERVICE_ID; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; -import java.util.logging.Level; -import java.util.logging.Logger; - -import org.apache.tuscany.sca.assembly.Binding; -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.implementation.osgi.OSGiProperty; -import org.apache.tuscany.sca.implementation.osgi.SCAConfig; -import org.apache.tuscany.sca.implementation.osgi.ServiceDescriptionsFactory; -import org.apache.tuscany.sca.node.configuration.NodeConfiguration; -import org.apache.tuscany.sca.node.impl.NodeImpl; -import org.osgi.framework.BundleContext; -import org.osgi.framework.ServiceReference; -import org.osgi.service.remoteserviceadmin.EndpointDescription; -import org.osgi.service.remoteserviceadmin.ExportRegistration; -import org.osgi.util.tracker.ServiceTrackerCustomizer; - -/** - * Watching and exporting OSGi services - */ -public class OSGiServiceExporter extends AbstractOSGiServiceHandler implements ServiceTrackerCustomizer { - private final static Logger logger = Logger.getLogger(OSGiServiceExporter.class.getName()); - - private Map exportReferences = - new ConcurrentHashMap(); - - /** - * @param context - * @param clazz - * @param customizer - */ - public OSGiServiceExporter(BundleContext context) { - super(context); - } - - public void start() { - init(); - } - - public void stop() { - exportReferences.clear(); - super.stop(); - } - - public Object addingService(ServiceReference reference) { - return exportService(reference, null); - } - - public List exportService(ServiceReference reference, Map properties) { - // FIXME: [rfeng] We need to check if a corresponding endpoint has been exported - try { - Contribution contribution = introspector.introspect(reference, properties); - if (contribution != null) { - - NodeConfiguration configuration = nodeFactory.createNodeConfiguration(); - if (domainRegistry != null) { - configuration.setDomainRegistryURI(domainRegistry); - } - if (domainURI != null) { - configuration.setDomainURI(domainURI); - } - configuration.setURI(contribution.getURI()); - // configuration.getExtensions().add(reference.getBundle()); - Component component = contribution.getDeployables().get(0).getComponents().get(0); - ComponentService service = component.getServices().get(0); - service.getExtensions().addAll(getOSGiProperties(registry, reference)); - service.getExtensions().add(createOSGiProperty(registry, - ENDPOINT_FRAMEWORK_UUID, - getFrameworkUUID(reference.getBundle() - .getBundleContext()))); - service.getExtensions().add(createOSGiProperty(registry, ENDPOINT_SERVICE_ID, reference - .getProperty(SERVICE_ID))); - - // create the org.osgi.sca.config.xml property - service.getExtensions().add(createSCAConfigXMLProperty(reference, properties, service)); - - // FIXME: Configure the domain and node URI - NodeImpl node = new NodeImpl(nodeFactory, configuration, Collections.singletonList(contribution)); - node.start(); - List exportedServices = new ArrayList(); - for (Endpoint endpoint : service.getEndpoints()) { - EndpointDescription endpointDescription = createEndpointDescription(context, endpoint); - synchronized (this) { - ExportReferenceImpl exportReference = exportReferences.get(endpointDescription); - if (exportReference == null) { - exportReference = new ExportReferenceImpl(node, reference, endpointDescription); - } - ExportRegistration exportRegistration = exportReference.register(); - exportedServices.add(exportRegistration); - } - } - return exportedServices; - } else { - return null; - } - } catch (Exception e) { - logger.log(Level.SEVERE, e.getMessage(), e); - ExportRegistration exportRegistration = new ExportRegistrationImpl(null, e); - return Collections.singletonList(exportRegistration); - } - } - - public void modifiedService(ServiceReference reference, Object service) { - removedService(reference, service); - exportService(reference, null); - } - - public void removedService(ServiceReference reference, Object service) { - List exportedServices = (List)service; - for (ExportRegistration exportRegistration : exportedServices) { - exportRegistration.close(); - } - } - - private OSGiProperty createSCAConfigXMLProperty(ServiceReference reference, Map props, ComponentService service){ - - // create the element - String scaConfigXMLString = introspector.instrospectSCAConfig(reference, props, service); - - // wrap the element in an element - String scaConfigXMLStringWithoutXMLHeader = scaConfigXMLString.substring(scaConfigXMLString.indexOf("><") + 1); - scaConfigXMLString = "" + scaConfigXMLStringWithoutXMLHeader + ""; - - // create and return the OSGI property - return createOSGiProperty(registry, "org.osgi.sca.config.xml", scaConfigXMLString); - } -} diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/OSGiServiceImporter.java b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/OSGiServiceImporter.java deleted file mode 100644 index f24e9af7c1..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/OSGiServiceImporter.java +++ /dev/null @@ -1,114 +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.tuscany.sca.osgi.remoteserviceadmin.impl; - -import java.util.Collections; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; -import java.util.logging.Level; -import java.util.logging.Logger; - -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.node.configuration.NodeConfiguration; -import org.apache.tuscany.sca.node.impl.NodeImpl; -import org.osgi.framework.Bundle; -import org.osgi.framework.BundleContext; -import org.osgi.framework.ServiceReference; -import org.osgi.service.remoteserviceadmin.EndpointDescription; -import org.osgi.service.remoteserviceadmin.ImportRegistration; - -/** - * Watching and exporting OSGi services - */ -public class OSGiServiceImporter extends AbstractOSGiServiceHandler { - private final static Logger logger = Logger.getLogger(OSGiServiceImporter.class.getName()); - private Map importReferences = - new ConcurrentHashMap(); - - /** - * @param context - * @param clazz - * @param customizer - */ - public OSGiServiceImporter(BundleContext context) { - super(context); - } - - public void start() { - // Defer init() to importService() - } - - public void stop() { - importReferences.clear(); - super.stop(); - } - - public ImportRegistration importService(Bundle bundle, EndpointDescription endpointDescription) { - init(); - try { - Contribution contribution = introspector.introspect(bundle, endpointDescription); - if (contribution != null) { - - NodeConfiguration configuration = nodeFactory.createNodeConfiguration(); - if (domainRegistry != null) { - configuration.setDomainRegistryURI(domainRegistry); - } - if (domainURI != null) { - configuration.setDomainURI(domainURI); - } - configuration.setURI(contribution.getURI()); - // configuration.getExtensions().add(bundle); - // FIXME: Configure the domain and node URI - NodeImpl node = new NodeImpl(nodeFactory, configuration, Collections.singletonList(contribution)); - node.start(); - - Component component = contribution.getDeployables().get(0).getComponents().get(0); - ComponentReference componentReference = component.getReferences().get(0); - ServiceReference serviceReference = - context.getServiceReference("(sca.reference=" + component.getURI() - + "#reference(" - + componentReference.getName() - + ")"); - synchronized (this) { - ImportReferenceImpl importReference = importReferences.get(endpointDescription); - if (importReference == null) { - importReference = new ImportReferenceImpl(node, serviceReference, endpointDescription); - importReferences.put(endpointDescription, importReference); - } - return importReference.register(); - } - } else { - return null; - } - } catch (Exception e) { - logger.log(Level.SEVERE, e.getMessage(), e); - return new ImportRegistrationImpl(null, e); - } - } - - public void unimportService(ImportRegistration importRegistration) { - if (importRegistration != null) { - importRegistration.close(); - } - } - -} diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/RemoteServiceAdminImpl.java b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/RemoteServiceAdminImpl.java deleted file mode 100644 index 94955ada38..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/RemoteServiceAdminImpl.java +++ /dev/null @@ -1,346 +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.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; - -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.core.UtilityExtensionPoint; -import org.apache.tuscany.sca.definitions.Definitions; -import org.apache.tuscany.sca.deployment.Deployer; -import org.apache.tuscany.sca.policy.BindingType; -import org.apache.tuscany.sca.policy.Intent; -import org.osgi.framework.Bundle; -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.service.remoteserviceadmin.EndpointDescription; -import org.osgi.service.remoteserviceadmin.ExportReference; -import org.osgi.service.remoteserviceadmin.ExportRegistration; -import org.osgi.service.remoteserviceadmin.ImportReference; -import org.osgi.service.remoteserviceadmin.ImportRegistration; -import org.osgi.service.remoteserviceadmin.RemoteConstants; -import org.osgi.service.remoteserviceadmin.RemoteServiceAdmin; -import org.osgi.service.remoteserviceadmin.RemoteServiceAdminEvent; -import org.osgi.service.remoteserviceadmin.RemoteServiceAdminListener; -import org.osgi.util.tracker.ServiceTracker; - -/** - * SCA Implementation of {@link RemoteServiceAdmin} - */ -public class RemoteServiceAdminImpl implements RemoteServiceAdmin, ManagedService { - private BundleContext context; - private ServiceRegistration registration; - private ServiceRegistration managedService; - private ServiceTracker listeners; - - private OSGiServiceExporter exporter; - private OSGiServiceImporter importer; - - private Collection importRegistrations = new ArrayList(); - private Collection exportedRegistrations = new ArrayList(); - - public RemoteServiceAdminImpl(BundleContext context) { - this.context = context; - } - - public void start() { - this.exporter = new OSGiServiceExporter(context); - this.importer = new OSGiServiceImporter(context); - exporter.start(); - importer.start(); - Hashtable props = new Hashtable(); - props.put(RemoteConstants.REMOTE_CONFIGS_SUPPORTED, new String[] {"org.osgi.sca"}); - - ExtensionPointRegistry registry = exporter.getExtensionPointRegistry(); - UtilityExtensionPoint utilities = registry.getExtensionPoint(UtilityExtensionPoint.class); - Deployer deployer = utilities.getUtility(Deployer.class); - Definitions definitions = deployer.getSystemDefinitions(); - - String[] intents = new String[definitions.getIntents().size()]; - int i = 0; - for (Intent intent : definitions.getIntents()) { - intents[i++] = intent.toString(); - } - - String[] bindingTypes = new String[definitions.getBindingTypes().size()]; - i = 0; - for (BindingType bindingType : definitions.getBindingTypes()) { - bindingTypes[i++] = bindingType.getType().toString(); - } - - // FIXME: We should ask SCA domain for the supported intents - props.put(RemoteConstants.REMOTE_INTENTS_SUPPORTED, intents); - // FIXME: We should ask SCA domain for the supported binding types - props.put("org.osgi.sca.binding.types", bindingTypes); - registration = context.registerService(RemoteServiceAdmin.class.getName(), this, props); - - props = new Hashtable(); - 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(); - } - - public void stop() { - if (registration != null) { - try { - registration.unregister(); - } catch (IllegalStateException e) { - // The service has been unregistered, ignore it - } - registration = null; - } - if (managedService != null) { - try { - managedService.unregister(); - } catch (IllegalStateException e) { - // The service has been unregistered, ignore it - } - managedService = null; - } - if (listeners != null) { - listeners.close(); - listeners = null; - } - for (ExportRegistration exportRegistration : exportedRegistrations) { - exportRegistration.close(); - } - exportedRegistrations.clear(); - for (ImportRegistration importRegistration : importRegistrations) { - importRegistration.close(); - } - importRegistrations.clear(); - if (importer != null) { - importer.stop(); - importer = null; - } - if (exporter != null) { - exporter.stop(); - exporter = null; - } - } - - /** - * @see org.osgi.remoteserviceadmin.RemoteServiceAdmin#exportService(org.osgi.framework.ServiceReference, - * java.util.Map) - */ - public List exportService(ServiceReference ref, Map properties) { - List exportRegistrations = exporter.exportService(ref, properties); - if (exportRegistrations != null) { - exportRegistrations.addAll(exportedRegistrations); - fireExportEvents(ref.getBundle(), exportRegistrations); - } - return exportRegistrations; - } - - private void fireExportEvents(Bundle source, List exportRegistrations) { - for (ExportRegistration registration : exportRegistrations) { - RemoteServiceAdminEvent rsaEvent = - new RemoteServiceAdminEvent(RemoteServiceAdminEvent.EXPORT_REGISTRATION, source, registration - .getExportReference(), registration.getException()); - EventAdmin eventAdmin = getEventAdmin(); - if (eventAdmin != null) { - eventAdmin.postEvent(wrap(rsaEvent)); - } - for (Object listener : listeners.getServices()) { - RemoteServiceAdminListener rsaListener = (RemoteServiceAdminListener)listener; - rsaListener.remoteAdminEvent(rsaEvent); - } - } - } - - private EventAdmin getEventAdmin() { - ServiceReference reference = context.getServiceReference(EventAdmin.class.getName()); - if (reference == null) { - return null; - } else { - return (EventAdmin)context.getService(reference); - } - } - - private Event wrap(RemoteServiceAdminEvent rsaEvent) { - int type = rsaEvent.getType(); - String eventType = null; - switch (type) { - case RemoteServiceAdminEvent.EXPORT_ERROR: - eventType = "EXPORT_ERROR"; - break; - case RemoteServiceAdminEvent.EXPORT_REGISTRATION: - eventType = "EXPORT_REGISTRATION"; - break; - case RemoteServiceAdminEvent.EXPORT_UNREGISTRATION: - eventType = "EXPORT_UNREGISTRATION"; - break; - case RemoteServiceAdminEvent.EXPORT_WARNING: - eventType = "EXPORT_WARNING"; - break; - case RemoteServiceAdminEvent.IMPORT_ERROR: - eventType = "IMPORT_ERROR"; - break; - case RemoteServiceAdminEvent.IMPORT_REGISTRATION: - eventType = "IMPORT_REGISTRATION"; - break; - case RemoteServiceAdminEvent.IMPORT_UNREGISTRATION: - eventType = "EXPORT_ERROR"; - break; - case RemoteServiceAdminEvent.IMPORT_WARNING: - eventType = "IMPORT_UNREGISTRATION"; - break; - } - String topic = "org/osgi/service/remoteserviceadmin/" + eventType; - Map props = new HashMap(); - /* - *

    -
  • bundle (Bundle) The Remote Service Admin bundle -
  • bundle-id (Long) The id of the Blueprint bundle. -
  • bundle-symbolicname (String) The Bundle Symbolic Name of the - Remote Service Admin bundle. -
  • bundle-version - (Version) The version of the Blueprint bundle. -
  • cause The exception, if present. -
  • import.registration An imported endpoint, if present -
  • export.registration An exported endpoint, if present -
  • service.remote.id Remote service UUID, if present -
  • service.remote.uuid Remote service UUID, if present -
  • service.remote.uri (String) The URI of the endpoint, if present -
  • objectClass (String[]) The interface names, if present -
  • service.imported.configs (String+) The configuration types of the - imported services, if present -
  • timestamp (Long) The time when the event occurred -
  • event (RemoteServiceAdminEvent) The RemoteServiceAdminEvent - object that caused this event. -
- */ - Bundle rsaBundle = context.getBundle(); - props.put("bundle", rsaBundle); - props.put("bundle-id", rsaBundle.getBundleId()); - props.put("bundle-symbolicname", rsaBundle.getSymbolicName()); - props.put("bundle-version", rsaBundle.getHeaders().get(Constants.BUNDLE_VERSION)); - props.put("cause", rsaEvent.getException()); - props.put("import.registration", rsaEvent.getImportReference()); - props.put("export.registration", rsaEvent.getExportReference()); - EndpointDescription ep = null; - if (rsaEvent.getImportReference() != null) { - ep = rsaEvent.getImportReference().getImportedEndpoint(); - } - if (rsaEvent.getExportReference() != null) { - ep = rsaEvent.getExportReference().getExportedEndpoint(); - } - - if (ep != null) { - props.put("endpoint.service.id", ep.getServiceId()); - props.put("endpoint.framework.uuid", ep.getFrameworkUUID()); - props.put("endpoint.id", ep.getId()); - props.put("objectClass", ep.getInterfaces()); - props.put("service.imported.configs", ep.getConfigurationTypes()); - Object bindings = ep.getProperties().get("org.osgi.sca.bindings"); - if (bindings != null) { - props.put("org.osgi.sca.bindings", bindings); - } - Object config = ep.getProperties().get("org.osgi.sca.config.url"); - if (config != null) { - props.put("org.osgi.sca.config.url", config); - } - config = ep.getProperties().get("org.osgi.sca.config.xml"); - if (config != null) { - props.put("org.osgi.sca.config.xml", config); - } } - props.put("timestamp", Long.valueOf(System.currentTimeMillis())); - props.put("event", rsaEvent); - return new Event(topic, props); - } - - private void fireImportEvents(Bundle source, ImportRegistration registration) { - RemoteServiceAdminEvent rsaEvent = - new RemoteServiceAdminEvent(RemoteServiceAdminEvent.IMPORT_REGISTRATION, source, registration - .getImportReference(), registration.getException()); - EventAdmin eventAdmin = getEventAdmin(); - if (eventAdmin != null) { - eventAdmin.postEvent(wrap(rsaEvent)); - } - for (Object listener : listeners.getServices()) { - RemoteServiceAdminListener rsaListener = (RemoteServiceAdminListener)listener; - rsaListener.remoteAdminEvent(rsaEvent); - } - } - - /** - * @see org.osgi.remoteserviceadmin.RemoteServiceAdmin#getExportedServices() - */ - public Collection getExportedServices() { - Collection exportedServices = new ArrayList(); - for (ExportRegistration registration : exportedRegistrations) { - exportedServices.add(registration.getExportReference()); - } - return exportedServices; - } - - /** - * @see org.osgi.remoteserviceadmin.RemoteServiceAdmin#getImportedEndpoints() - */ - public Collection getImportedEndpoints() { - Collection importedEndpoints = new ArrayList(); - for (ImportRegistration registration : importRegistrations) { - importedEndpoints.add(registration.getImportReference()); - } - return importedEndpoints; - } - - /** - * @see org.osgi.remoteserviceadmin.RemoteServiceAdmin#importService(org.apache.tuscany.sca.dosgi.discovery.EndpointDescription) - */ - public ImportRegistration importService(EndpointDescription endpoint) { - Bundle bundle = (Bundle)endpoint.getProperties().get(Bundle.class.getName()); - ImportRegistration importReg = importer.importService(bundle, endpoint); - if (importReg != null) { - fireImportEvents(bundle, importReg); - importRegistrations.add(importReg); - } - return importReg; - } - - public synchronized void updated(Dictionary props) throws ConfigurationException { - if (props == null) { - // It can be null in Apache Felix - return; - } - String domainRegistry = (String)props.get("org.osgi.sca.domain.registry"); - String domainURI = (String)props.get("org.osgi.sca.domain.uri"); - if (domainRegistry != null) { - exporter.setDomainRegistry(domainRegistry); - importer.setDomainRegistry(domainRegistry); - } - if (domainURI != null) { - exporter.setDomainURI(domainURI); - importer.setDomainURI(domainURI); - } - } -} diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/TopologyManagerImpl.java b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/TopologyManagerImpl.java deleted file mode 100644 index a3f3636cce..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/remoteserviceadmin/impl/TopologyManagerImpl.java +++ /dev/null @@ -1,400 +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.tuscany.sca.osgi.remoteserviceadmin.impl; - -import static org.apache.tuscany.sca.implementation.osgi.OSGiProperty.SERVICE_EXPORTED_INTERFACES; -import static org.osgi.service.remoteserviceadmin.RemoteConstants.SERVICE_EXPORTED_CONFIGS; -import static org.osgi.service.remoteserviceadmin.RemoteConstants.SERVICE_IMPORTED; - -import java.util.Collection; -import java.util.Dictionary; -import java.util.HashMap; -import java.util.Hashtable; -import java.util.Iterator; -import java.util.Map; -import java.util.concurrent.BlockingQueue; -import java.util.concurrent.TimeUnit; -import java.util.logging.Level; -import java.util.logging.Logger; - -import org.apache.tuscany.sca.common.java.collection.CollectionMap; -import org.apache.tuscany.sca.core.LifeCycleListener; -import org.apache.tuscany.sca.osgi.remoteserviceadmin.impl.EndpointMatcher.ImportAction; -import org.osgi.framework.Bundle; -import org.osgi.framework.BundleContext; -import org.osgi.framework.Constants; -import org.osgi.framework.Filter; -import org.osgi.framework.InvalidSyntaxException; -import org.osgi.framework.ServiceReference; -import org.osgi.framework.ServiceRegistration; -import org.osgi.framework.hooks.service.ListenerHook; -import org.osgi.service.remoteserviceadmin.EndpointDescription; -import org.osgi.service.remoteserviceadmin.EndpointListener; -import org.osgi.service.remoteserviceadmin.ExportRegistration; -import org.osgi.service.remoteserviceadmin.ImportRegistration; -import org.osgi.service.remoteserviceadmin.RemoteServiceAdmin; -import org.osgi.service.remoteserviceadmin.RemoteServiceAdminEvent; -import org.osgi.service.remoteserviceadmin.RemoteServiceAdminListener; -import org.osgi.util.tracker.ServiceTracker; -import org.osgi.util.tracker.ServiceTrackerCustomizer; - -/** - * Implementation of Remote Controller - */ -public class TopologyManagerImpl implements ListenerHook, RemoteServiceAdminListener, EndpointListener, - ServiceTrackerCustomizer, LifeCycleListener /*, EventHook */{ - private final static Logger logger = Logger.getLogger(TopologyManagerImpl.class.getName()); - public final static String ENDPOINT_LOCAL = "service.local"; - - private BundleContext context; - private ServiceTracker remoteAdmins; - - private volatile ServiceRegistration registration; - private ServiceRegistration endpointListener; - - private ServiceTracker remotableServices; - - private EndpointMatcher endpointMatcher; - - private CollectionMap exportedServices = - new CollectionMap(); - private CollectionMap importedServices = - new CollectionMap(); - - private Filter remotableServiceFilter; - - public TopologyManagerImpl(BundleContext context) { - this.context = context; - this.endpointMatcher = new EndpointMatcher(context); - } - - public void start() { - String filter = - "(& (!(" + SERVICE_IMPORTED - + "=*)) (" - + SERVICE_EXPORTED_INTERFACES - + "=*) (" - + SERVICE_EXPORTED_CONFIGS - + "=org.osgi.sca) )"; - try { - remotableServiceFilter = context.createFilter(filter); - } catch (InvalidSyntaxException e) { - // Ignore - } - - endpointListener = context.registerService(EndpointListener.class.getName(), this, null); - remoteAdmins = new ServiceTracker(this.context, RemoteServiceAdmin.class.getName(), null); - remoteAdmins.open(); - - // DO NOT register EventHook.class.getName() as it cannot report existing services - String interfaceNames[] = - new String[] {ListenerHook.class.getName(), RemoteServiceAdminListener.class.getName()}; - // The registration will trigger the added() method before registration is assigned - registration = context.registerService(interfaceNames, this, null); - - remotableServices = new ServiceTracker(context, remotableServiceFilter, this); - remotableServices.open(true); - - Thread thread = new Thread(new ImportTask()); - thread.start(); - } - - public Object addingService(ServiceReference reference) { - exportService(reference); - return reference.getBundle().getBundleContext().getService(reference); - } - - public void modifiedService(ServiceReference reference, Object service) { - unexportService(reference); - exportService(reference); - } - - public void removedService(ServiceReference reference, Object service) { - unexportService(reference); - } - - private void unexportService(ServiceReference reference) { - // Call remote admin to unexport the service - Collection exportRegistrations = exportedServices.get(reference); - if (exportRegistrations != null) { - for (Iterator i = exportRegistrations.iterator(); i.hasNext();) { - ExportRegistration exported = i.next(); - exported.close(); - i.remove(); - } - } - } - - private void exportService(ServiceReference reference) { - // Call remote admin to export the service - Object[] admins = remoteAdmins.getServices(); - if (admins == null) { - // Ignore - logger.warning("No RemoteAdmin services are available."); - } else { - for (Object ra : admins) { - RemoteServiceAdmin remoteAdmin = (RemoteServiceAdmin)ra; - Collection exportRegistrations = remoteAdmin.exportService(reference, null); - if (exportRegistrations != null && !exportRegistrations.isEmpty()) { - exportedServices.putValues(reference, exportRegistrations); - } - } - } - } - - /** - * @see org.osgi.framework.hooks.service.ListenerHook#added(java.util.Collection) - */ - public void added(Collection listeners) { - try { - synchronized (endpointMatcher) { - Collection oldFilters = endpointMatcher.getFilters(); - Collection newFilters = endpointMatcher.added(listeners); - if (!OSGiHelper.getAddedItems(oldFilters, newFilters).isEmpty()) { - updateEndpointListenerScope(newFilters); - } - } - } catch (Throwable e) { - logger.log(Level.SEVERE, e.getMessage(), e); - if (e instanceof Error) { - throw (Error)e; - } else if (e instanceof RuntimeException) { - throw (RuntimeException)e; - } else { - // Should not happen - throw new RuntimeException(e); - } - } - } - - private void updateEndpointListenerScope(Collection filters) { - Dictionary props = new Hashtable(); - props.put(ENDPOINT_LISTENER_SCOPE, filters); - endpointListener.setProperties(props); - } - - /** - * @see org.osgi.framework.hooks.service.ListenerHook#removed(java.util.Collection) - */ - public void removed(Collection listeners) { - try { - synchronized (endpointMatcher) { - Collection oldFilters = endpointMatcher.getFilters(); - Collection newFilters = endpointMatcher.removed(listeners); - if (!OSGiHelper.getRemovedItems(oldFilters, newFilters).isEmpty()) { - updateEndpointListenerScope(newFilters); - } - } - } catch (Throwable e) { - logger.log(Level.SEVERE, e.getMessage(), e); - if (e instanceof Error) { - throw (Error)e; - } else if (e instanceof RuntimeException) { - throw (RuntimeException)e; - } else { - // Should not happen - throw new RuntimeException(e); - } - } - } - - /** - * @see org.apache.tuscany.sca.osgi.service.remoteadmin.RemoteAdminListener#remoteAdminEvent(org.apache.tuscany.sca.osgi.service.remoteadmin.RemoteAdminEvent) - */ - public void remoteAdminEvent(RemoteServiceAdminEvent event) { - switch (event.getType()) { - case RemoteServiceAdminEvent.EXPORT_ERROR: - case RemoteServiceAdminEvent.EXPORT_REGISTRATION: - case RemoteServiceAdminEvent.EXPORT_UNREGISTRATION: - case RemoteServiceAdminEvent.EXPORT_WARNING: - break; - case RemoteServiceAdminEvent.IMPORT_ERROR: - case RemoteServiceAdminEvent.IMPORT_REGISTRATION: - case RemoteServiceAdminEvent.IMPORT_UNREGISTRATION: - case RemoteServiceAdminEvent.IMPORT_WARNING: - break; - } - } - - /** - * @see org.osgi.remoteserviceadmin.EndpointListener#addEndpoint(org.osgi.service.remoteserviceadmin.EndpointDescription, - * java.lang.String) - */ - public void endpointAdded(EndpointDescription endpoint, String matchedFilter) { - endpointMatcher.added(endpoint, matchedFilter); - // importService(endpoint, matchedFilter); - } - - /** - * @see org.osgi.remoteserviceadmin.EndpointListener#removeEndpoint(org.osgi.service.remoteserviceadmin.EndpointDescription) - */ - public void endpointRemoved(EndpointDescription endpoint, String matchedFilter) { - endpointMatcher.removed(endpoint, matchedFilter); - // unimportService(endpoint); - } - - private void importService(EndpointDescription endpoint, String matchedFilter) { - Object[] admins = remoteAdmins.getServices(); - if (admins == null) { - logger.warning("No Remote Service Admin services are available."); - return; - } - - CollectionMap, ListenerInfo> interfaceToListeners = - endpointMatcher.groupListeners(endpoint, matchedFilter); - for (Map.Entry, Collection> e : interfaceToListeners.entrySet()) { - Class interfaceClass = e.getKey(); - Collection listeners = e.getValue(); - // Get a listener - ListenerInfo listener = listeners.iterator().next(); - Bundle bundle = listener.getBundleContext().getBundle(); - if (bundle.getBundleId() == 0L) { - // Skip system bundles - continue; - } - try { - Filter filter = listener.getBundleContext().createFilter(matchedFilter); - if (!filter.match(new Hashtable(endpoint.getProperties()))) { - continue; - } - } catch (InvalidSyntaxException ex) { - logger.log(Level.SEVERE, ex.getMessage(), ex); - continue; - } - - Map props = new HashMap(endpoint.getProperties()); - props.put(Bundle.class.getName(), bundle); - props.put(Constants.OBJECTCLASS, new String[] {interfaceClass.getName()}); - EndpointDescription description = new EndpointDescription(props); - - if (admins != null) { - for (Object ra : admins) { - RemoteServiceAdmin remoteAdmin = (RemoteServiceAdmin)ra; - ImportRegistration importRegistration = remoteAdmin.importService(description); - if (importRegistration != null) { - importedServices.putValue(new ImportKey(description, listener), importRegistration); - } - } - } - } - } - - private void unimportService(EndpointDescription endpoint, ListenerInfo listenerInfo) { - // Call remote admin to unimport the service - Collection importRegistrations = - importedServices.get(new ImportKey(endpoint, listenerInfo)); - if (importRegistrations != null) { - for (Iterator i = importRegistrations.iterator(); i.hasNext();) { - ImportRegistration imported = i.next(); - imported.close(); - i.remove(); - } - } - } - - public void stop() { - remotableServices.close(); - - if (registration != null) { - try { - registration.unregister(); - } catch (IllegalStateException e) { - // The service has been unregistered, ignore it - } - registration = null; - } - if (remoteAdmins != null) { - remoteAdmins.close(); - remoteAdmins = null; - } - if (endpointMatcher != null) { - endpointMatcher.clear(); - } - } - - private class ImportTask implements Runnable { - public void run() { - while (registration != null) { - BlockingQueue queue = endpointMatcher.getImportQueue(); - ImportAction action = null; - try { - action = queue.poll(1, TimeUnit.SECONDS); - } catch (InterruptedException e) { - // Ignore - } - if (action != null) { - if (action.type == ImportAction.Type.Add) { - importService(action.endpointDescription, action.listenerInfo.getFilter()); - } else if (action.type == ImportAction.Type.Remove) { - unimportService(action.endpointDescription, action.listenerInfo); - } - } - } - } - } - - private static class ImportKey { - private EndpointDescription endpointDescription; - - /** - * @param endpointDescription - * @param listenerInfo - */ - private ImportKey(EndpointDescription endpointDescription, ListenerInfo listenerInfo) { - super(); - this.endpointDescription = endpointDescription; - this.listenerInfo = listenerInfo; - } - - private ListenerInfo listenerInfo; - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((endpointDescription == null) ? 0 : endpointDescription.hashCode()); - result = prime * result + ((listenerInfo == null) ? 0 : listenerInfo.hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - ImportKey other = (ImportKey)obj; - if (endpointDescription == null) { - if (other.endpointDescription != null) - return false; - } else if (!endpointDescription.equals(other.endpointDescription)) - return false; - if (listenerInfo == null) { - if (other.listenerInfo != null) - return false; - } else if (!listenerInfo.equals(other.listenerInfo)) - return false; - return true; - } - } - -} diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/service/discovery/impl/AbstractDiscoveryService.java b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/service/discovery/impl/AbstractDiscoveryService.java deleted file mode 100644 index fd57dbded8..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/service/discovery/impl/AbstractDiscoveryService.java +++ /dev/null @@ -1,265 +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.tuscany.sca.osgi.service.discovery.impl; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.Dictionary; -import java.util.Hashtable; -import java.util.Iterator; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; -import java.util.logging.Level; -import java.util.logging.Logger; - -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.impl.NodeFactoryImpl; -import org.apache.tuscany.sca.osgi.remoteserviceadmin.impl.OSGiHelper; -import org.osgi.framework.Bundle; -import org.osgi.framework.BundleContext; -import org.osgi.framework.Constants; -import org.osgi.framework.Filter; -import org.osgi.framework.ServiceReference; -import org.osgi.service.remoteserviceadmin.EndpointDescription; -import org.osgi.service.remoteserviceadmin.EndpointListener; -import org.osgi.service.remoteserviceadmin.RemoteConstants; -import org.osgi.util.tracker.ServiceTracker; - -/** - * - */ -public abstract class AbstractDiscoveryService implements Discovery, LifeCycleListener { - protected final static int ADDED = 0x1; - protected final static int REMOVED = 0x2; - protected final static int MODIFIED = 0x4; - - protected final static Logger logger = Logger.getLogger(AbstractDiscoveryService.class.getName()); - - protected BundleContext context; - protected ExtensionPointRegistry registry; - // private WorkScheduler workScheduler; - - private Map> listenersToFilters = - new ConcurrentHashMap>(); - - protected Map endpointDescriptions = - new ConcurrentHashMap(); - private ServiceTracker trackerTracker; - - public AbstractDiscoveryService(BundleContext context) { - super(); - this.context = context; - } - - public void start() { - getExtensionPointRegistry(); - // UtilityExtensionPoint utilityExtensionPoint = registry.getExtensionPoint(UtilityExtensionPoint.class); - // this.workScheduler = utilityExtensionPoint.getUtility(WorkScheduler.class); - - // track the registration of EndpointListener - trackerTracker = new ServiceTracker(this.context, EndpointListener.class.getName(), null) { - public Object addingService(ServiceReference reference) { - Object result = super.addingService(reference); - cacheTracker(reference, result); - return result; - } - - public void modifiedService(ServiceReference reference, Object service) { - super.modifiedService(reference, service); - updateTracker(reference, service); - } - - public void removedService(ServiceReference reference, Object service) { - super.removedService(reference, service); - clearTracker(service); - } - }; - - trackerTracker.open(); - } - - public void stop() { - trackerTracker.close(); - } - - protected ExtensionPointRegistry getExtensionPointRegistry() { - NodeFactoryImpl factory = (NodeFactoryImpl)NodeFactory.getInstance(); - factory.init(); - ServiceTracker tracker = new ServiceTracker(context, ExtensionPointRegistry.class.getName(), null); - tracker.open(); - // tracker.waitForService(1000); - registry = (ExtensionPointRegistry)tracker.getService(); - tracker.close(); - return registry; - } - - protected Dictionary getProperties() { - Dictionary headers = context.getBundle().getHeaders(); - Hashtable props = new Hashtable(); - props.put(PRODUCT_NAME, "Apache Tuscany SCA"); - props.put(PRODUCT_VERSION, headers.get(Constants.BUNDLE_VERSION)); - props.put(VENDOR_NAME, headers.get(Constants.BUNDLE_VENDOR)); - // props.put(SUPPORTED_PROTOCOLS, new String[] {"local", "org.osgi.sca"}); - return props; - } - - private void cacheTracker(ServiceReference reference, Object service) { - if (service instanceof EndpointListener) { - EndpointListener listener = (EndpointListener)service; - Collection filters = null; - synchronized (this) { - filters = addTracker(reference, listener, EndpointListener.ENDPOINT_LISTENER_SCOPE); - // Take a snapshot of the endpoints - triggerCallbacks(null, filters, listener); - } - } - } - - private void clearTracker(Object service) { - if (service instanceof EndpointListener) { - synchronized (this) { - removeTracker((EndpointListener)service); - } - } - } - - private void updateTracker(ServiceReference reference, Object service) { - if (service instanceof EndpointListener) { - EndpointListener listener = (EndpointListener)service; - Collection oldFilters = null; - Collection newFilters = null; - synchronized (this) { - if (logger.isLoggable(Level.FINE)) { - logger.fine("updating listener: " + listener); - } - oldFilters = removeTracker(listener); - newFilters = addTracker(reference, listener, EndpointListener.ENDPOINT_LISTENER_SCOPE); - triggerCallbacks(oldFilters, newFilters, listener); - } - } - } - - private void triggerCallbacks(Collection oldInterest, - Collection newInterest, - EndpointListener listener) { - // compute delta between old & new interfaces/filters and - // trigger callbacks for any entries in servicesInfo that - // match any *additional* interface/filters - Collection deltaInterest = getDelta(oldInterest, newInterest); - - Iterator i = deltaInterest.iterator(); - while (i.hasNext()) { - String next = i.next(); - for (EndpointDescription sd : endpointDescriptions.keySet()) { - triggerCallbacks(listener, next, sd, ADDED); - } - } - // Find removed filters - deltaInterest = getDelta(newInterest, oldInterest); - - i = deltaInterest.iterator(); - while (i.hasNext()) { - String next = i.next(); - for (EndpointDescription sd : endpointDescriptions.keySet()) { - triggerCallbacks(listener, next, sd, REMOVED); - } - } - } - - private Collection getDelta(Collection oldInterest, Collection newInterest) { - if (newInterest == null) { - newInterest = Collections.emptySet(); - } - - Collection deltaInterest = new ArrayList(newInterest); - if (oldInterest == null) { - oldInterest = Collections.emptySet(); - } - deltaInterest.removeAll(oldInterest); - return deltaInterest; - } - - /** - * Notify the endpoint listener - * @param listener - * @param matchedFilter - * @param endpoint - * @param type - */ - private static void notify(EndpointListener listener, String matchedFilter, EndpointDescription endpoint, int type) { - switch (type) { - case ADDED: - listener.endpointAdded(endpoint, matchedFilter); - break; - case REMOVED: - listener.endpointRemoved(endpoint, matchedFilter); - break; - case MODIFIED: - listener.endpointRemoved(endpoint, matchedFilter); - listener.endpointAdded(endpoint, matchedFilter); - break; - } - } - - private void triggerCallbacks(EndpointListener listener, - String matchedFilter, - EndpointDescription endpoint, - int type) { - // workScheduler.scheduleWork(new Notifier(listener, matchedFilter, endpoint, type)); - notify(listener, matchedFilter, endpoint, type); - } - - private boolean filterMatches(String filterValue, EndpointDescription sd) { - Filter filter = OSGiHelper.createFilter(context, filterValue); - Hashtable props = new Hashtable(sd.getProperties()); - // Add two faked properties to make the filter match - props.put(Constants.OBJECTCLASS, sd.getInterfaces()); - props.put(RemoteConstants.SERVICE_IMPORTED, "true"); - return filter != null ? filter.match(props) : false; - } - - private Collection removeTracker(EndpointListener listener) { - return listenersToFilters.remove(listener); - } - - private Collection addTracker(ServiceReference reference, EndpointListener listener, String property) { - Collection collection = OSGiHelper.getStringCollection(reference, property); - if (collection != null && !collection.isEmpty()) { - listenersToFilters.put(listener, new ArrayList(collection)); - } - return collection; - } - - protected void endpointChanged(EndpointDescription sd, int type) { - synchronized (this) { - for (Map.Entry> entry : listenersToFilters.entrySet()) { - for (String filter : entry.getValue()) { - if (filterMatches(filter, sd)) { - triggerCallbacks(entry.getKey(), filter, sd, type); - } - } - } - } - } - -} diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/service/discovery/impl/Discovery.java b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/service/discovery/impl/Discovery.java deleted file mode 100644 index 3ad1e53fee..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/service/discovery/impl/Discovery.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.tuscany.sca.osgi.service.discovery.impl; - -/** - * Every Discovery Provider registers a service implementing this interface. - * This service is registered with extra properties identified at the beginning - * of this interface to denote the name of the product providing Discovery - * functionality, its version, vendor, used protocols etc.. - *

- * Discovery allows to publish services exposed for remote access as well as to - * search for remote services. - *

- * Discovery service implementations usually rely on some discovery protocols or - * other information distribution means. - * - * @ThreadSafe - */ -public interface Discovery { - - /** - * ServiceRegistration property for the name of the Discovery product. - *

- * Value of this property is of type String. - */ - String PRODUCT_NAME = "osgi.remote.discovery.product"; - - /** - * ServiceRegistration property for the version of the Discovery product. - *

- * Value of this property is of type String. - */ - String PRODUCT_VERSION = "osgi.remote.discovery.product.version"; - - /** - * ServiceRegistration property for the Discovery product vendor name. - *

- * Value of this property is of type String. - */ - String VENDOR_NAME = "osgi.remote.discovery.vendor"; - - /** - * ServiceRegistration property that lists the discovery protocols used by - * this Discovery service. - *

- * Value of this property is of type - * Collection (<? extends String>). - */ - String SUPPORTED_PROTOCOLS = "osgi.remote.discovery.supported_protocols"; -} diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/service/discovery/impl/DiscoveryActivator.java b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/service/discovery/impl/DiscoveryActivator.java deleted file mode 100644 index 32bd10b77b..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/service/discovery/impl/DiscoveryActivator.java +++ /dev/null @@ -1,57 +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.tuscany.sca.osgi.service.discovery.impl; - -import java.util.ArrayList; -import java.util.List; - -import org.osgi.framework.BundleActivator; -import org.osgi.framework.BundleContext; -import org.osgi.framework.ServiceRegistration; - -public class DiscoveryActivator implements BundleActivator { - private List discoveryServices = new ArrayList(); - private List discoveryServiceRegistrations = new ArrayList(); - - public void start(BundleContext context) { - discoveryServices.add(new LocalDiscoveryService(context)); - - discoveryServices.add(new DomainDiscoveryService(context)); - - for (AbstractDiscoveryService service : discoveryServices) { - service.start(); - ServiceRegistration registration = - context.registerService(Discovery.class.getName(), service, service.getProperties()); - discoveryServiceRegistrations.add(registration); - } - } - - public void stop(BundleContext context) { - for (ServiceRegistration registration : discoveryServiceRegistrations) { - try { - registration.unregister(); - } catch (IllegalStateException e) { - // The service has been unregistered, ignore it - } - } - for (AbstractDiscoveryService service : discoveryServices) { - service.stop(); - } - } -} diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/service/discovery/impl/DomainDiscoveryService.java b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/service/discovery/impl/DomainDiscoveryService.java deleted file mode 100644 index f8b4c3be8c..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/service/discovery/impl/DomainDiscoveryService.java +++ /dev/null @@ -1,140 +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.tuscany.sca.osgi.service.discovery.impl; - -import static org.apache.tuscany.sca.osgi.remoteserviceadmin.impl.EndpointHelper.createEndpointDescription; - -import java.util.Dictionary; - -import org.apache.tuscany.sca.assembly.Endpoint; -import org.apache.tuscany.sca.assembly.Implementation; -import org.apache.tuscany.sca.core.LifeCycleListener; -import org.apache.tuscany.sca.implementation.osgi.OSGiImplementation; -import org.apache.tuscany.sca.node.configuration.NodeConfiguration; -import org.apache.tuscany.sca.runtime.DomainRegistryFactory; -import org.apache.tuscany.sca.runtime.EndpointListener; -import org.apache.tuscany.sca.runtime.DomainRegistry; -import org.apache.tuscany.sca.runtime.ExtensibleDomainRegistryFactory; -import org.osgi.framework.Bundle; -import org.osgi.framework.BundleContext; -import org.osgi.service.remoteserviceadmin.EndpointDescription; - -/** - * Discovery service based on the distributed SCA domain - */ -public class DomainDiscoveryService extends AbstractDiscoveryService implements EndpointListener { - private DomainRegistryFactory domainRegistryFactory; - private DomainRegistry domainRegistry; - - public DomainDiscoveryService(BundleContext context) { - super(context); - } - - public void start() { - super.start(); - this.domainRegistryFactory = ExtensibleDomainRegistryFactory.getInstance(registry); - domainRegistryFactory.addListener(this); - - // [rfeng] Starting of the endpoint registry takes a long time and it leaves the bundle - // state to be starting. When the registry is started, remote endpoints come in and that - // triggers the classloading from this bundle. - Thread thread = new Thread() { - public void run() { - startEndpointRegistry(); - } - }; - thread.start(); - } - - private synchronized void startEndpointRegistry() { - // The following code forced the start() of the domain registry in absense of services - String domainRegistryURI = context.getProperty("org.osgi.sca.domain.registry"); - if (domainRegistryURI == null) { - domainRegistryURI = NodeConfiguration.DEFAULT_DOMAIN_REGISTRY_URI; - } - String domainURI = context.getProperty("org.osgi.sca.domain.uri"); - if (domainURI == null) { - domainURI = NodeConfiguration.DEFAULT_DOMAIN_URI; - } - if (domainRegistry != null) { - domainRegistry = domainRegistryFactory.getEndpointRegistry(domainRegistryURI, domainURI); - } - } - - public void endpointAdded(Endpoint endpoint) { - Implementation impl = endpoint.getComponent().getImplementation(); - - /* - if (!(impl instanceof OSGiImplementation)) { - return; - } - */ - - BundleContext bundleContext = null; - // Remote endpoint doesn't have a bundle - if (!endpoint.isRemote()) { - OSGiImplementation osgiImpl = (OSGiImplementation)impl; - Bundle bundle = osgiImpl.getBundle(); - bundleContext = bundle != null ? bundle.getBundleContext() : null; - } - - // Notify the endpoint listeners - EndpointDescription description = createEndpointDescription(bundleContext, endpoint); - // Set the owning bundle to runtime bundle to avoid NPE - synchronized (this) { - endpointDescriptions.put(description, context.getBundle()); - endpointChanged(description, ADDED); - } - } - - public void endpointRemoved(Endpoint endpoint) { - EndpointDescription description = createEndpointDescription(context, endpoint); - synchronized (this) { - endpointDescriptions.remove(description); - endpointChanged(description, REMOVED); - } - } - - public void endpointUpdated(Endpoint oldEndpoint, Endpoint newEndpoint) { - // FIXME: This is a quick and dirty way for the update - endpointRemoved(oldEndpoint); - endpointAdded(newEndpoint); - } - - public void stop() { - if (domainRegistryFactory != null) { - domainRegistryFactory.removeListener(this); - if (domainRegistry instanceof LifeCycleListener) { - ((LifeCycleListener)domainRegistry).stop(); - } - domainRegistryFactory = null; - domainRegistry = null; - super.stop(); - } - } - - @Override - protected Dictionary getProperties() { - Dictionary props = super.getProperties(); - props.put(SUPPORTED_PROTOCOLS, new String[] {"org.osgi.sca"}); - return props; - } - -} diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/service/discovery/impl/LocalDiscoveryService.java b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/service/discovery/impl/LocalDiscoveryService.java deleted file mode 100644 index dc9ae096dd..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/osgi/service/discovery/impl/LocalDiscoveryService.java +++ /dev/null @@ -1,262 +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.tuscany.sca.osgi.service.discovery.impl; - -import static org.apache.tuscany.sca.osgi.remoteserviceadmin.impl.OSGiHelper.getConfiguration; -import static org.osgi.service.remoteserviceadmin.RemoteConstants.ENDPOINT_FRAMEWORK_UUID; -import static org.osgi.service.remoteserviceadmin.RemoteConstants.ENDPOINT_ID; -import static org.osgi.service.remoteserviceadmin.RemoteConstants.ENDPOINT_SERVICE_ID; - -import java.net.URL; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Dictionary; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; -import java.util.UUID; -import java.util.Map.Entry; -import java.util.logging.Level; - -import javax.xml.namespace.QName; - -import org.apache.tuscany.sca.assembly.Binding; -import org.apache.tuscany.sca.core.UtilityExtensionPoint; -import org.apache.tuscany.sca.deployment.Deployer; -import org.apache.tuscany.sca.implementation.osgi.SCAConfig; -import org.apache.tuscany.sca.implementation.osgi.ServiceDescription; -import org.apache.tuscany.sca.implementation.osgi.ServiceDescriptions; -import org.apache.tuscany.sca.osgi.remoteserviceadmin.impl.OSGiHelper; -import org.apache.tuscany.sca.policy.Intent; -import org.apache.tuscany.sca.policy.PolicySet; -import org.oasisopen.sca.ServiceRuntimeException; -import org.osgi.framework.Bundle; -import org.osgi.framework.BundleContext; -import org.osgi.framework.BundleEvent; -import org.osgi.framework.Constants; -import org.osgi.framework.Filter; -import org.osgi.framework.InvalidSyntaxException; -import org.osgi.service.remoteserviceadmin.EndpointDescription; -import org.osgi.util.tracker.BundleTracker; -import org.osgi.util.tracker.BundleTrackerCustomizer; -import org.osgi.util.tracker.ServiceTracker; - -public class LocalDiscoveryService extends AbstractDiscoveryService implements BundleTrackerCustomizer { - private Deployer deployer; - private BundleTracker bundleTracker; - private Collection extenders = new ArrayList(); - - public LocalDiscoveryService(BundleContext context) { - super(context); - } - - public void start() { - super.start(); - - UtilityExtensionPoint utilities = this.registry.getExtensionPoint(UtilityExtensionPoint.class); - this.deployer = utilities.getUtility(Deployer.class); - bundleTracker = new BundleTracker(context, Bundle.ACTIVE | Bundle.STARTING, this); - bundleTracker.open(); - } - - public static ServiceTracker getTracker(BundleContext context) { - Filter filter = null; - try { - filter = - context.createFilter("(& (" + Discovery.SUPPORTED_PROTOCOLS - + "=local) (" - + Constants.OBJECTCLASS - + "=" - + Discovery.class.getName() - + "))"); - } catch (InvalidSyntaxException e) { - throw new IllegalArgumentException(e); - } - return new ServiceTracker(context, filter, null); - } - - private EndpointDescription createEndpointDescription(ServiceDescription sd) { - Map props = new HashMap(sd.getProperties()); - props.put(Constants.OBJECTCLASS, sd.getInterfaces().toArray(new String[sd.getInterfaces().size()])); - if (!props.containsKey(ENDPOINT_SERVICE_ID)) { - props.put(ENDPOINT_SERVICE_ID, Long.valueOf(System.currentTimeMillis())); - } - if (!props.containsKey(ENDPOINT_FRAMEWORK_UUID)) { - props.put(ENDPOINT_FRAMEWORK_UUID, OSGiHelper.getFrameworkUUID(context)); - } - if (!props.containsKey(ENDPOINT_ID)) { - props.put(ENDPOINT_ID, UUID.randomUUID().toString()); - } - - EndpointDescription sed = new EndpointDescription(props); - return sed; - } - - private void removeServicesDeclaredInBundle(Bundle bundle) { - for (Iterator> i = endpointDescriptions.entrySet().iterator(); i.hasNext();) { - Entry entry = i.next(); - if (entry.getValue().equals(bundle)) { - serviceDescriptionRemoved(entry.getKey()); - i.remove(); - } - } - } - - private void serviceDescriptionAdded(EndpointDescription endpointDescription) { - endpointChanged(endpointDescription, ADDED); - } - - private void serviceDescriptionRemoved(EndpointDescription endpointDescription) { - endpointChanged(endpointDescription, REMOVED); - } - - public void stop() { - if (bundleTracker != null) { - bundleTracker.close(); - } - super.stop(); - } - - public Object addingBundle(Bundle bundle, BundleEvent event) { - if (bundle.getHeaders().get(Constants.FRAGMENT_HOST) != null || bundle.getBundleId() == 0) { - // Ignore fragments - return null; - } - Collection scaConfigs = getConfiguration(bundle, "SCA-Configuration", "OSGI-INF/sca-config/*.xml"); - Collection descriptions = getConfiguration(bundle, "Remote-Service", null); - if (scaConfigs.isEmpty() && descriptions.isEmpty()) { - return null; - } - ExtenderConfiguration extender = new ExtenderConfiguration(); - for (URL url : scaConfigs) { - try { - SCAConfig scaConfig = deployer.loadXMLDocument(url, deployer.createMonitor()); - extender.scaConfigs.add(scaConfig); - } catch (Exception e) { - logger.log(Level.SEVERE, e.getMessage(), e); - throw new ServiceRuntimeException(e); - } - } - for (URL url : descriptions) { - try { - ServiceDescriptions sds = deployer.loadXMLDocument(url, deployer.createMonitor()); - extender.remoteServiceDescriptions.add(sds); - } catch (Exception e) { - logger.log(Level.SEVERE, e.getMessage(), e); - // throw new ServiceRuntimeException(e); - } - } - - // Add to the extenders before notifying the listeners (the endpoints may references to the config) - ExtenderConfiguration.validate(extenders, extender); - this.extenders.add(extender); - - // Notify - for (ServiceDescriptions sds : extender.getRemoteServiceDescriptions()) { - for (ServiceDescription sd : sds) { - EndpointDescription sed = createEndpointDescription(sd); - endpointDescriptions.put(sed, bundle); - serviceDescriptionAdded(sed); - } - } - - return extender; - } - - public void modifiedBundle(Bundle bundle, BundleEvent event, Object object) { - // STARTING --> ACTIVE - } - - public void removedBundle(Bundle bundle, BundleEvent event, Object object) { - if (object instanceof ExtenderConfiguration) { - extenders.remove((ExtenderConfiguration)object); - removeServicesDeclaredInBundle(bundle); - } - } - - public Collection getConfigurations() { - return extenders; - } - - public static class ExtenderConfiguration { - private Collection scaConfigs = new ArrayList(); - private Collection remoteServiceDescriptions = new ArrayList(); - - public Collection getRemoteServiceDescriptions() { - return remoteServiceDescriptions; - } - - public Collection getSCAConfigs() { - return scaConfigs; - } - - public static void validate(Collection configs, ExtenderConfiguration newConfig) { - Map bindings = new HashMap(); - Map intents = new HashMap(); - Map policySets = new HashMap(); - - for (ExtenderConfiguration config : configs) { - for (SCAConfig c : config.getSCAConfigs()) { - addBindings(bindings, c); - addIntents(intents, c); - addPolicySets(policySets, c); - } - } - for (SCAConfig c : newConfig.getSCAConfigs()) { - addBindings(bindings, c); - addIntents(intents, c); - addPolicySets(policySets, c); - } - } - - private static void addIntents(Map intents, SCAConfig c) { - for (Intent i: c.getIntents()) { - if (intents.put(i.getName(), i) != null) { - throw new ServiceRuntimeException("Duplicate intent: " + i.getName()); - } - } - } - - private static void addPolicySets(Map policySets, SCAConfig c) { - for (PolicySet ps: c.getPolicySets()) { - if (policySets.put(ps.getName(), ps) != null) { - throw new ServiceRuntimeException("Duplicate policySet: " + ps.getName()); - } - } - } - - private static void addBindings(Map bindings, SCAConfig c) { - for (Binding b : c.getBindings()) { - QName name = new QName(c.getTargetNamespace(), b.getName()); - if (bindings.put(name, b) != null) { - throw new ServiceRuntimeException("Duplicate binding: " + name); - } - } - } - - } - - @Override - protected Dictionary getProperties() { - Dictionary props = super.getProperties(); - props.put(SUPPORTED_PROTOCOLS, new String[] {"local"}); - return props; - } - -} diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/osgi/service/remoteserviceadmin/EndpointDescription.java b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/osgi/service/remoteserviceadmin/EndpointDescription.java deleted file mode 100644 index ee7e5ba1bd..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/osgi/service/remoteserviceadmin/EndpointDescription.java +++ /dev/null @@ -1,682 +0,0 @@ -/* - * Copyright (c) OSGi Alliance (2008, 2010). All Rights Reserved. - * - * Licensed 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.osgi.service.remoteserviceadmin; - -import static org.osgi.service.remoteserviceadmin.RemoteConstants.*; - -import java.security.AccessController; -import java.security.PrivilegedAction; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.Dictionary; -import java.util.Enumeration; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.TreeMap; - -import org.osgi.framework.Constants; -import org.osgi.framework.Filter; -import org.osgi.framework.FrameworkUtil; -import org.osgi.framework.InvalidSyntaxException; -import org.osgi.framework.ServiceReference; -import org.osgi.framework.Version; - -/** - * A description of an endpoint that provides sufficient information for a - * compatible distribution provider to create a connection to this endpoint - * - * An Endpoint Description is easy to transfer between different systems because - * it is property based where the property keys are strings and the values are - * simple types. This allows it to be used as a communications device to convey - * available endpoint information to nodes in a network. - * - * An Endpoint Description reflects the perspective of an importer. That - * is, the property keys have been chosen to match filters that are created by - * client bundles that need a service. Therefore the map must not contain any - * service.exported.* property and must contain the corresponding - * service.imported.* ones. - * - * The service.intents property must contain the intents provided - * by the service itself combined with the intents added by the exporting - * distribution provider. Qualified intents appear fully expanded on this - * property. - * - * @Immutable - * @version $Revision$ - */ - -public class EndpointDescription { - private final Map properties; - private final List interfaces; - private final long serviceId; - private final String frameworkUUID; - private final String id; - - /** - * Create an Endpoint Description from a Map. - * - *

- * The {@link RemoteConstants#ENDPOINT_ID endpoint.id}, - * {@link RemoteConstants#SERVICE_IMPORTED_CONFIGS service.imported.configs} - * and objectClass properties must be set. - * - * @param properties The map from which to create the Endpoint Description. - * The keys in the map must be type String and, since - * the keys are case insensitive, there must be no duplicates with - * case variation. - * @throws IllegalArgumentException When the properties are not proper for - * an Endpoint Description. - */ - - public EndpointDescription(Map properties) { - Map props = new TreeMap( - String.CASE_INSENSITIVE_ORDER); - try { - props.putAll(properties); - } - catch (ClassCastException e) { - IllegalArgumentException iae = new IllegalArgumentException( - "non-String key in properties"); - iae.initCause(e); - throw iae; - } - if (props.size() < properties.size()) { - throw new IllegalArgumentException( - "duplicate keys with different cases in properties: " - + new ArrayList(props.keySet()) - .removeAll(properties.keySet())); - } - - if (!props.containsKey(SERVICE_IMPORTED)) { - props.put(SERVICE_IMPORTED, Boolean.toString(true)); - } - this.properties = Collections.unmodifiableMap(props); - /* properties must be initialized before calling the following methods */ - interfaces = verifyObjectClassProperty(); - serviceId = verifyLongProperty(ENDPOINT_SERVICE_ID); - frameworkUUID = verifyStringProperty(ENDPOINT_FRAMEWORK_UUID); - id = verifyStringProperty(ENDPOINT_ID); - if (id == null) { - throw new IllegalArgumentException(ENDPOINT_ID - + " property must be set"); - } - if (getConfigurationTypes().isEmpty()) { - throw new IllegalArgumentException(SERVICE_IMPORTED_CONFIGS - + " property must be set and non-empty"); - } - } - - /** - * Create an Endpoint Description based on a Service Reference and a Map of - * properties. The properties in the map take precedence over the properties - * in the Service Reference. - * - *

- * This method will automatically set the - * {@link RemoteConstants#ENDPOINT_FRAMEWORK_UUID endpoint.framework.uuid} - * and {@link RemoteConstants#ENDPOINT_SERVICE_ID endpoint.service.id} - * properties based on the specified Service Reference as well as the - * {@link RemoteConstants#SERVICE_IMPORTED service.imported} property if - * they are not specified as properties. - *

- * The {@link RemoteConstants#ENDPOINT_ID endpoint.id}, - * {@link RemoteConstants#SERVICE_IMPORTED_CONFIGS service.imported.configs} - * and objectClass properties must be set. - * - * @param reference A service reference that can be exported. - * @param properties Map of properties. This argument can be - * null. The keys in the map must be type - * String and, since the keys are case insensitive, - * there must be no duplicates with case variation. - * @throws IllegalArgumentException When the properties are not proper for - * an Endpoint Description - */ - public EndpointDescription(final ServiceReference reference, - final Map properties) { - Map props = new TreeMap( - String.CASE_INSENSITIVE_ORDER); - - if (properties != null) { - try { - props.putAll(properties); - } - catch (ClassCastException e) { - IllegalArgumentException iae = new IllegalArgumentException( - "non-String key in properties"); - iae.initCause(e); - throw iae; - } - if (props.size() < properties.size()) { - throw new IllegalArgumentException( - "duplicate keys with different cases in properties: " - + new ArrayList(props.keySet()) - .removeAll(properties.keySet())); - } - } - - for (String key : reference.getPropertyKeys()) { - if (!props.containsKey(key)) { - props.put(key, reference.getProperty(key)); - } - } - - if (!props.containsKey(ENDPOINT_SERVICE_ID)) { - props.put(ENDPOINT_SERVICE_ID, reference.getProperty(Constants.SERVICE_ID)); - } - if (!props.containsKey(ENDPOINT_FRAMEWORK_UUID)) { - String uuid = null; - try { - uuid = AccessController - .doPrivileged(new PrivilegedAction() { - public String run() { - return reference.getBundle().getBundleContext() - .getProperty("org.osgi.framework.uuid"); - } - }); - } - catch (SecurityException e) { - // if we don't have permission, we can't get the property - } - if (uuid != null) { - props.put(ENDPOINT_FRAMEWORK_UUID, uuid); - } - } - if (!props.containsKey(SERVICE_IMPORTED)) { - props.put(SERVICE_IMPORTED, Boolean.toString(true)); - } - this.properties = Collections.unmodifiableMap(props); - /* properties must be initialized before calling the following methods */ - interfaces = verifyObjectClassProperty(); - serviceId = verifyLongProperty(ENDPOINT_SERVICE_ID); - frameworkUUID = verifyStringProperty(ENDPOINT_FRAMEWORK_UUID); - id = verifyStringProperty(ENDPOINT_ID); - if (id == null) { - throw new IllegalArgumentException(ENDPOINT_ID - + " property must be set"); - } - if (getConfigurationTypes().isEmpty()) { - throw new IllegalArgumentException(SERVICE_IMPORTED_CONFIGS - + " property must be set and non-empty"); - } - } - - /** - * Verify and obtain the interface list from the properties. - * - * @return A list with the interface names. - * @throws IllegalArgumentException If the objectClass property is not set - * or is empty or if the package version property values are - * malformed. - */ - private List verifyObjectClassProperty() { - Object o = properties.get(Constants.OBJECTCLASS); - if (!(o instanceof String[])) { - throw new IllegalArgumentException( - "objectClass value must be of type String[]"); - } - String[] objectClass = (String[]) o; - if (objectClass.length < 1) { - throw new IllegalArgumentException("objectClass is empty"); - } - for (String interf : objectClass) { - int index = interf.lastIndexOf('.'); - if (index == -1) { - continue; - } - String packageName = interf.substring(0, index); - try { - /* Make sure any package version properties are well formed */ - getPackageVersion(packageName); - } - catch (IllegalArgumentException e) { - IllegalArgumentException iae = new IllegalArgumentException( - "Improper version for package " + packageName); - iae.initCause(e); - throw iae; - } - } - return Collections.unmodifiableList(Arrays.asList(objectClass)); - } - - /** - * Verify and obtain a required String property. - * - * @param propName The name of the property - * @return The value of the property or null if the property is not set. - * @throws IllegalArgumentException when the property doesn't have the - * correct data type. - */ - private String verifyStringProperty(String propName) { - Object r = properties.get(propName); - try { - return (String) r; - } - catch (ClassCastException e) { - IllegalArgumentException iae = new IllegalArgumentException( - "property value is not a String: " + propName); - iae.initCause(e); - throw iae; - } - } - - /** - * Verify and obtain a required long property. - * - * @param propName The name of the property - * @return The value of the property or 0 if the property is not set. - * @throws IllegalArgumentException when the property doesn't have the - * correct data type. - */ - private long verifyLongProperty(String propName) { - Object r = properties.get(propName); - if (r == null) { - return 0l; - } - try { - return ((Long) r).longValue(); - } - catch (ClassCastException e) { - IllegalArgumentException iae = new IllegalArgumentException( - "property value is not a Long: " + propName); - iae.initCause(e); - throw iae; - } - } - - /** - * Returns the endpoint's id. - * - * The id is an opaque id for an endpoint. No two different endpoints must - * have the same id. Two Endpoint Descriptions with the same id must - * represent the same endpoint. - * - * The value of the id is stored in the - * {@link RemoteConstants#ENDPOINT_ID} property. - * - * @return The id of the endpoint, never null. - */ - public String getId() { - return id; - } - - /** - * Provide the list of interfaces implemented by the exported service. - * - * The value of the interfaces is derived from the objectClass - * property. - * - * @return An unmodifiable list of Java interface names implemented by this - * endpoint. - */ - public List getInterfaces() { - return interfaces; - } - - /** - * Provide the version of the given package name. - * - * The version is encoded by prefixing the given package name with - * {@link RemoteConstants#ENDPOINT_PACKAGE_VERSION_ - * endpoint.package.version.}, and then using this as an endpoint property - * key. For example: - * - *

-	 * endpoint.package.version.com.acme
-	 * 
- * - * The value of this property is in String format and will be converted to a - * Version object by this method. - * - * @param packageName The name of the package for which a version is - * requested. - * @return The version of the specified package or - * Version.emptyVersion if the package has no version - * in this Endpoint Description. - * @throws IllegalArgumentException If the version property value is not - * String. - */ - public Version getPackageVersion(String packageName) { - String key = ENDPOINT_PACKAGE_VERSION_ + packageName; - Object value = properties.get(key); - String version; - try { - version = (String) value; - } - catch (ClassCastException e) { - IllegalArgumentException iae = new IllegalArgumentException(key - + " property value is not a String"); - iae.initCause(e); - throw iae; - } - return Version.parseVersion(version); - } - - /** - * Returns the service id for the service exported through this endpoint. - * - * This is the service id under which the framework has registered the - * service. This field together with the Framework UUID is a globally unique - * id for a service. - * - * The value of the remote service id is stored in the - * {@link RemoteConstants#ENDPOINT_SERVICE_ID} endpoint property. - * - * @return Service id of a service or 0 if this Endpoint Description does - * not relate to an OSGi service. - * - */ - public long getServiceId() { - return serviceId; - } - - /** - * Returns the configuration types. - * - * A distribution provider exports a service with an endpoint. This endpoint - * uses some kind of communications protocol with a set of configuration - * parameters. There are many different types but each endpoint is - * configured by only one configuration type. However, a distribution - * provider can be aware of different configuration types and provide - * synonyms to increase the change a receiving distribution provider can - * create a connection to this endpoint. - * - * This value of the configuration types is stored in the - * {@link RemoteConstants#SERVICE_IMPORTED_CONFIGS} service property. - * - * @return An unmodifiable list of the configuration types used for the - * associated endpoint and optionally synonyms. - */ - public List getConfigurationTypes() { - return getStringPlusProperty(SERVICE_IMPORTED_CONFIGS); - } - - /** - * Return the list of intents implemented by this endpoint. - * - * The intents are based on the service.intents on an imported service, - * except for any intents that are additionally provided by the importing - * distribution provider. All qualified intents must have been expanded. - * - * This value of the intents is stored in the - * {@link RemoteConstants#SERVICE_INTENTS} service property. - * - * @return An unmodifiable list of expanded intents that are provided by - * this endpoint. - */ - public List getIntents() { - return getStringPlusProperty(SERVICE_INTENTS); - } - - /** - * Reads a 'String+' property from the properties map, which may be of type - * String, String[] or Collection and returns it as an unmodifiable - * List. - * - * @param key The property - * @return An unmodifiable list - */ - private List getStringPlusProperty(String key) { - Object value = properties.get(key); - if (value == null) { - return Collections.EMPTY_LIST; - } - - if (value instanceof String) { - return Collections.singletonList((String) value); - } - - if (value instanceof String[]) { - String[] values = (String[]) value; - List result = new ArrayList(values.length); - for (String v : values) { - if (v != null) { - result.add(v); - } - } - return Collections.unmodifiableList(result); - } - - if (value instanceof Collection< ? >) { - Collection< ? > values = (Collection< ? >) value; - List result = new ArrayList(values.size()); - for (Iterator< ? > iter = values.iterator(); iter.hasNext();) { - Object v = iter.next(); - if (v instanceof String) { - result.add((String) v); - } - } - return Collections.unmodifiableList(result); - } - - return Collections.EMPTY_LIST; - } - - /** - * Return the framework UUID for the remote service, if present. - * - * The value of the remote framework uuid is stored in the - * {@link RemoteConstants#ENDPOINT_FRAMEWORK_UUID} endpoint property. - * - * @return Remote Framework UUID, or null if this endpoint is not associated - * with an OSGi framework having a framework uuid. - */ - public String getFrameworkUUID() { - return frameworkUUID; - } - - /** - * Returns all endpoint properties. - * - * @return An unmodifiable map referring to the properties of this Endpoint - * Description. - */ - public Map getProperties() { - return properties; - } - - /** - * Answers if this Endpoint Description refers to the same service instance - * as the given Endpoint Description. - * - * Two Endpoint Descriptions point to the same service if they have the same - * id or their framework UUIDs and remote service ids are equal. - * - * @param other The Endpoint Description to look at - * @return True if this endpoint description points to the same service as - * the other - */ - public boolean isSameService(EndpointDescription other) { - if (this.equals(other)) { - return true; - } - - if (this.getFrameworkUUID() == null) { - return false; - } - - return (this.getServiceId() == other.getServiceId()) - && this.getFrameworkUUID().equals( - other.getFrameworkUUID()); - } - - /** - * Returns a hash code value for the object. - * - * @return An integer which is a hash code value for this object. - */ - public int hashCode() { - return getId().hashCode(); - } - - /** - * Compares this EndpointDescription object to another object. - * - *

- * An Endpoint Description is considered to be equal to another - * Endpoint Description if their ids are equal. - * - * @param other The EndpointDescription object to be compared. - * @return true if object is a - * EndpointDescription and is equal to this object; - * false otherwise. - */ - public boolean equals(Object other) { - if (this == other) { - return true; - } - if (!(other instanceof EndpointDescription)) { - return false; - } - return getId().equals( - ((EndpointDescription) other).getId()); - } - - /** - * Tests the properties of this EndpointDescription against - * the given filter using a case insensitive match. - * - * @param filter The filter to test. - * @return true If the properties of this - * EndpointDescription match the filter, - * false otherwise. - * @throws IllegalArgumentException If filter contains an - * invalid filter string that cannot be parsed. - */ - public boolean matches(String filter) { - Filter f; - try { - f = FrameworkUtil.createFilter(filter); - } - catch (InvalidSyntaxException e) { - IllegalArgumentException iae = new IllegalArgumentException(e - .getMessage()); - iae.initCause(e); - throw iae; - } - Dictionary d = new UnmodifiableDictionary( - properties); - /* - * we can use matchCase here since properties already supports case - * insensitive key lookup. - */ - return f.matchCase(d); - } - - /** - * Returns the string representation of this EndpointDescription. - * - * @return String form of this EndpointDescription. - */ - public String toString() { - StringBuffer sb = new StringBuffer(); - sb.append('{'); - Iterator> iter = properties.entrySet() - .iterator(); - boolean comma = false; - while (iter.hasNext()) { - Map.Entry entry = iter.next(); - if (comma) { - sb.append(", "); - } - else { - comma = true; - } - sb.append(entry.getKey()); - sb.append('='); - Object value = entry.getValue(); - if (value != null) { - Class< ? > valueType = value.getClass(); - if (Object[].class.isAssignableFrom(valueType)) { - append(sb, (Object[]) value); - continue; - } - } - sb.append(value); - } - sb.append('}'); - return sb.toString(); - } - - /** - * Append the specified Object array to the specified StringBuffer. - * - * @param sb Receiving StringBuffer. - * @param value Object array to append to the specified StringBuffer. - */ - private static void append(StringBuffer sb, Object[] value) { - sb.append('['); - boolean comma = false; - final int length = value.length; - for (int i = 0; i < length; i++) { - if (comma) { - sb.append(", "); - } - else { - comma = true; - } - sb.append(String.valueOf(value[i])); - } - sb.append(']'); - } - - /** - * Unmodifiable Dictionary wrapper for a Map. This class is also used by - * EndpointPermission. - */ - static class UnmodifiableDictionary extends Dictionary { - private final Map wrapped; - - UnmodifiableDictionary(Map wrapped) { - this.wrapped = wrapped; - } - - public Enumeration elements() { - return Collections.enumeration(wrapped.values()); - } - - public V get(Object key) { - return wrapped.get(key); - } - - public boolean isEmpty() { - return wrapped.isEmpty(); - } - - public Enumeration keys() { - return Collections.enumeration(wrapped.keySet()); - } - - public V put(K key, V value) { - throw new UnsupportedOperationException(); - } - - public V remove(Object key) { - throw new UnsupportedOperationException(); - } - - public int size() { - return wrapped.size(); - } - - public String toString() { - return wrapped.toString(); - } - } -} diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/osgi/service/remoteserviceadmin/EndpointListener.java b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/osgi/service/remoteserviceadmin/EndpointListener.java deleted file mode 100644 index 941b899fbb..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/osgi/service/remoteserviceadmin/EndpointListener.java +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Copyright (c) OSGi Alliance (2009). All Rights Reserved. - * - * Licensed 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.osgi.service.remoteserviceadmin; - -/** - * A white board service that represents a listener for endpoints. - * - * An Endpoint Listener represents a participant in the distributed model that - * is interested in Endpoint Descriptions. - * - * This white board service can be used in many different scenarios. However, - * the primary use case is to allow a remote manager to be informed of Endpoint - * Descriptions available in the network and inform the network about available - * Endpoint Descriptions. - * - * Both the network bundle and the manager bundle register an Endpoint Listener - * service. The manager informs the network bundle about Endpoints that it - * creates. The network bundles then uses a protocol like SLP to announce these - * local end-points to the network. - * - * If the network bundle discovers a new Endpoint through its discovery - * protocol, then it sends an Endpoint Description to all the Endpoint - * Listener services that are registered (except its own) that have specified an - * interest in that endpoint. - * - * Endpoint Listener services can express their scope with the service - * property {@link #ENDPOINT_LISTENER_SCOPE}. This service property is a list of - * filters. An Endpoint Description should only be given to a Endpoint Listener - * when there is at least one filter that matches the Endpoint Description - * properties. given to it. - * - * This filter model is quite flexible. For example, a discovery bundle is only - * interested in locally originating Endpoint Descriptions. The following filter - * ensure that it only sees local endpoints. - * - *

- *   (org.osgi.framework.uuid=72dc5fd9-5f8f-4f8f-9821-9ebb433a5b72)
- * 
- * - * In the same vein, a manager that is only interested in remote Endpoint - * Descriptions can use a filter like: - * - *
- *   (!(org.osgi.framework.uuid=72dc5fd9-5f8f-4f8f-9821-9ebb433a5b72))
- * 
- * - * Where in both cases, the given UUID is the UUID of the local framework that - * can be found in the Framework properties. - * - * The Endpoint Listener's scope maps very well to the service hooks. A manager - * can just register all filters found from the Listener Hook as its scope. This - * will automatically provide it with all known endpoints that match the given - * scope, without having to inspect the filter string. - * - * In general, when an Endpoint Description is discovered, it should be - * dispatched to all registered Endpoint Listener services. If a new Endpoint - * Listener is registered, it should be informed about all currently known - * Endpoints that match its scope. If a getter of the Endpoint Listener service - * is unregistered, then all its registered Endpoint Description objects must be - * removed. - * - * The Endpoint Listener models a best effort approach. Participating - * bundles should do their utmost to keep the listeners up to date, but - * implementers should realize that many endpoints come through unreliable - * discovery processes. - * - * - * @ThreadSafe - * @version $Revision$ - */ -public interface EndpointListener { - /** - * Specifies the interest of this listener with filters. This listener is - * only interested in Endpoint Descriptions where its properties match the - * given filter. The type of this property must be String+. - */ - String ENDPOINT_LISTENER_SCOPE = "endpoint.listener.scope"; - - /** - * Register an endpoint with this listener. - * - * If the endpoint matches one of the filters registered with the - * {@link #ENDPOINT_LISTENER_SCOPE} service property then this filter should - * be given as the matchedFilter parameter. - * - * When this service is first registered or it is modified, it should - * receive all known endpoints matching the filter. - * - * @param endpoint The Endpoint Description to be published - * @param matchedFilter The filter from the {@link #ENDPOINT_LISTENER_SCOPE} - * that matched the endpoint, must not be null. - */ - void endpointAdded(EndpointDescription endpoint, String matchedFilter); - - /** - * Remove the registration of an endpoint. - * - * If an endpoint that was registered with the - * {@link #endpointAdded(EndpointDescription, String)} method is no longer - * available then this method should be called. This will remove the - * endpoint from the listener. - * - * It is not necessary to remove endpoints when the service is unregistered - * or modified in such a way that not all endpoints match the interest - * filter anymore. - * - * @param endpoint The Endpoint Description that is no longer valid. - * @param matchedFilter The filter from the {@link #ENDPOINT_LISTENER_SCOPE} - * that matched the endpoint, must not be null. - */ - void endpointRemoved(EndpointDescription endpoint, String matchedFilter); -} diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/osgi/service/remoteserviceadmin/EndpointPermission.java b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/osgi/service/remoteserviceadmin/EndpointPermission.java deleted file mode 100644 index 433e22e543..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/osgi/service/remoteserviceadmin/EndpointPermission.java +++ /dev/null @@ -1,693 +0,0 @@ -/* - * Copyright (c) OSGi Alliance (2000, 2010). All Rights Reserved. - * - * Licensed 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.osgi.service.remoteserviceadmin; - -import static org.osgi.service.remoteserviceadmin.RemoteConstants.*; - -import java.io.IOException; -import java.io.NotSerializableException; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; -import java.io.ObjectStreamField; -import java.security.Permission; -import java.security.PermissionCollection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.Dictionary; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.TreeMap; - -import org.osgi.framework.Filter; -import org.osgi.framework.FrameworkUtil; -import org.osgi.framework.InvalidSyntaxException; - -/** - * A bundle's authority to export, import or read an Endpoint. - *
    - *
  • The export action allows a bundle to export a service as an - * Endpoint.
  • - *
  • The import action allows a bundle to import a service from - * an Endpoint.
  • - *
  • The read action allows a bundle to read references to an - * Endpoint.
  • - *
- * Permission to read an Endpoint is required in order to detect events - * regarding an Endpoint. Untrusted bundles should not be able to detect the - * presence of certain Endpoints unless they have the appropriate - * EndpointPermission to read the specific service. - * - * @ThreadSafe - * @version $Revision$ - */ - -public final class EndpointPermission extends Permission { - static final long serialVersionUID = -7662148639076511574L; - /** - * The action string read. - */ - public final static String READ = "read"; - /** - * The action string import. The import action - * implies the read action. - */ - public final static String IMPORT = "import"; - /** - * The action string export. The export action - * implies the read action. - */ - public final static String EXPORT = "export"; - - private final static int ACTION_READ = 0x00000001; - private final static int ACTION_IMPORT = 0x00000002; - private final static int ACTION_EXPORT = 0x00000004; - private final static int ACTION_ALL = ACTION_EXPORT - | ACTION_IMPORT - | ACTION_READ; - final static int ACTION_NONE = 0; - - /** - * The actions mask. - */ - transient int action_mask; - - /** - * The actions in canonical form. - * - * @serial - */ - private volatile String actions = null; - - /** - * The endpoint used by this EndpointPermission. Must be null if not - * constructed with a endpoint. - */ - transient final EndpointDescription endpoint; - - /** - * This dictionary holds the properties of the permission, used to match a - * filter in implies. - */ - private transient final Dictionary properties; - - /** - * If this EndpointPermission was not constructed with an - * EndpointDescription, this holds a Filter matching object used to evaluate - * the filter in implies or null for wildcard. - */ - transient Filter filter; - - /** - * Create a new EndpointPermission with the specified filter. - * - *

- * The filter will be evaluated against the endpoint properties of a - * requested EndpointPermission. - * - *

- * There are three possible actions: read, import - * and export. The read action allows the owner of - * this permission to see the presence of distributed services. The - * import action allows the owner of this permission to import - * an endpoint. The export action allows the owner of this - * permission to export a service. - * - * @param filterString The filter string or "*" to match all - * endpoints. - * @param actions The actions read, import, or - * export. - * @throws IllegalArgumentException If the filter has an invalid syntax or - * the actions are not valid. - */ - public EndpointPermission(String filterString, String actions) { - this(filterString, parseActions(actions)); - } - - /** - * Creates a new requested EndpointPermission object to be used - * by code that must perform checkPermission. - * EndpointPermission objects created with this constructor - * cannot be added to an EndpointPermission permission - * collection. - * - * @param endpoint The requested endpoint. - * @param localFrameworkUUID The UUID of the local framework. This is used - * to support matching the - * {@link RemoteConstants#ENDPOINT_FRAMEWORK_UUID - * endpoint.framework.uuid} endpoint property to the - * <<LOCAL>> value in the filter expression. - * @param actions The actions read, import, or - * export. - * @throws IllegalArgumentException If the endpoint is null or - * the actions are not valid. - */ - public EndpointPermission(EndpointDescription endpoint, - String localFrameworkUUID, String actions) { - super(createName(endpoint)); - setTransients(null, parseActions(actions)); - Map props; - if ((localFrameworkUUID != null) - && localFrameworkUUID.equals(endpoint.getFrameworkUUID())) { - props = new TreeMap(String.CASE_INSENSITIVE_ORDER); - props.putAll(endpoint.getProperties()); - props.put(ENDPOINT_FRAMEWORK_UUID, new String[] { - endpoint.getFrameworkUUID(), "<>"}); - } - else { - props = endpoint.getProperties(); - } - this.endpoint = endpoint; - this.properties = new EndpointDescription.UnmodifiableDictionary( - props); - } - - /** - * Create a permission name from a EndpointDescription. - * - * @param endpoint EndpointDescription to use to create permission name. - * @return permission name. - */ - private static String createName(EndpointDescription endpoint) { - if (endpoint == null) { - throw new IllegalArgumentException("invalid endpoint: null"); - } - StringBuffer sb = new StringBuffer("(" + ENDPOINT_ID + "="); - sb.append(endpoint.getId()); - sb.append(")"); - return sb.toString(); - } - - /** - * Package private constructor used by EndpointPermissionCollection. - * - * @param name class name - * @param mask action mask - */ - EndpointPermission(String name, int mask) { - super(name); - setTransients(parseFilter(name), mask); - this.endpoint = null; - this.properties = null; - } - - /** - * Called by constructors and when deserialized. - * - * @param mask action mask - */ - private void setTransients(Filter f, int mask) { - if ((mask == ACTION_NONE) || ((mask & ACTION_ALL) != mask)) { - throw new IllegalArgumentException("invalid action string"); - } - action_mask = mask; - filter = f; - } - - /** - * Parse action string into action mask. - * - * @param actions Action string. - * @return action mask. - */ - private static int parseActions(String actions) { - boolean seencomma = false; - - int mask = ACTION_NONE; - - if (actions == null) { - return mask; - } - - char[] a = actions.toCharArray(); - - int i = a.length - 1; - if (i < 0) - return mask; - - while (i != -1) { - char c; - - // skip whitespace - while ((i != -1) - && ((c = a[i]) == ' ' || c == '\r' || c == '\n' - || c == '\f' || c == '\t')) - i--; - - // check for the known strings - int matchlen; - - if (i >= 5 && (a[i - 5] == 'i' || a[i - 5] == 'I') - && (a[i - 4] == 'm' || a[i - 4] == 'M') - && (a[i - 3] == 'p' || a[i - 3] == 'P') - && (a[i - 2] == 'o' || a[i - 2] == 'O') - && (a[i - 1] == 'r' || a[i - 1] == 'R') - && (a[i] == 't' || a[i] == 'T')) { - matchlen = 6; - mask |= ACTION_IMPORT | ACTION_READ; - - } - else - if (i >= 5 && (a[i - 5] == 'e' || a[i - 5] == 'E') - && (a[i - 4] == 'x' || a[i - 4] == 'X') - && (a[i - 3] == 'p' || a[i - 3] == 'P') - && (a[i - 2] == 'o' || a[i - 2] == 'O') - && (a[i - 1] == 'r' || a[i - 1] == 'R') - && (a[i] == 't' || a[i] == 'T')) { - matchlen = 6; - mask |= ACTION_EXPORT | ACTION_READ; - - } - else { - if (i >= 3 && (a[i - 3] == 'r' || a[i - 3] == 'R') - && (a[i - 2] == 'e' || a[i - 2] == 'E') - && (a[i - 1] == 'a' || a[i - 1] == 'A') - && (a[i] == 'd' || a[i] == 'D')) { - matchlen = 4; - mask |= ACTION_READ; - - } - else { - // parse error - throw new IllegalArgumentException( - "invalid permission: " + actions); - } - } - - // make sure we didn't just match the tail of a word - // like "ackbarfread". Also, skip to the comma. - seencomma = false; - while (i >= matchlen && !seencomma) { - switch (a[i - matchlen]) { - case ',' : - seencomma = true; - /* FALLTHROUGH */ - case ' ' : - case '\r' : - case '\n' : - case '\f' : - case '\t' : - break; - default : - throw new IllegalArgumentException( - "invalid permission: " + actions); - } - i--; - } - - // point i at the location of the comma minus one (or -1). - i -= matchlen; - } - - if (seencomma) { - throw new IllegalArgumentException("invalid permission: " + actions); - } - - return mask; - } - - /** - * Parse filter string into a Filter object. - * - * @param filterString The filter string to parse. - * @return a Filter for this bundle. - * @throws IllegalArgumentException If the filter syntax is invalid. - */ - private static Filter parseFilter(String filterString) { - if (filterString == null) { - throw new IllegalArgumentException("invalid filter: null"); - } - filterString = filterString.trim(); - if (filterString.equals("*")) { - return null; // wildcard - } - try { - return FrameworkUtil.createFilter(filterString); - } - catch (InvalidSyntaxException e) { - IllegalArgumentException iae = new IllegalArgumentException( - "invalid filter"); - iae.initCause(e); - throw iae; - } - } - - /** - * Determines if a EndpointPermission object "implies" the - * specified permission. - * - * @param p The target permission to check. - * @return true if the specified permission is implied by this - * object; false otherwise. - */ - public boolean implies(Permission p) { - if (!(p instanceof EndpointPermission)) { - return false; - } - EndpointPermission requested = (EndpointPermission) p; - if (endpoint != null) { - return false; - } - // if requested permission has a filter, then it is an invalid argument - if (requested.filter != null) { - return false; - } - return implies0(requested, ACTION_NONE); - } - - /** - * Internal implies method. Used by the implies and the permission - * collection implies methods. - * - * @param requested The requested EndpointPermission which has already be - * validated as a proper argument. The requested EndpointPermission - * must not have a filter expression. - * @param effective The effective actions with which to start. - * @return true if the specified permission is implied by this - * object; false otherwise. - */ - boolean implies0(EndpointPermission requested, int effective) { - /* check actions first - much faster */ - effective |= action_mask; - final int desired = requested.action_mask; - if ((effective & desired) != desired) { - return false; - } - /* if we have no filter */ - Filter f = filter; - if (f == null) { - // it's "*" - return true; - } - return f.matchCase(requested.getProperties()); - } - - /** - * Returns the canonical string representation of the actions. Always - * returns present actions in the following canonical order: - * read, import, export. - * - * @return The canonical string representation of the actions. - */ - public String getActions() { - String result = actions; - if (result == null) { - StringBuffer sb = new StringBuffer(); - boolean comma = false; - - int mask = action_mask; - if ((mask & ACTION_READ) == ACTION_READ) { - sb.append(READ); - comma = true; - } - - if ((mask & ACTION_IMPORT) == ACTION_IMPORT) { - if (comma) - sb.append(','); - sb.append(IMPORT); - } - - if ((mask & ACTION_EXPORT) == ACTION_EXPORT) { - if (comma) - sb.append(','); - sb.append(EXPORT); - } - - actions = result = sb.toString(); - } - - return result; - } - - /** - * Returns a new PermissionCollection object for storing - * EndpointPermission objects. - * - * @return A new PermissionCollection object suitable for - * storing EndpointPermission objects. - */ - public PermissionCollection newPermissionCollection() { - return new EndpointPermissionCollection(); - } - - /** - * Determines the equality of two EndpointPermission objects. - * - * Checks that specified object has the same name, actions and endpoint as - * this EndpointPermission. - * - * @param obj The object to test for equality. - * @return true if obj is a EndpointPermission, and has the - * same name, actions and endpoint as this - * EndpointPermission object; false - * otherwise. - */ - public boolean equals(Object obj) { - if (obj == this) { - return true; - } - - if (!(obj instanceof EndpointPermission)) { - return false; - } - - EndpointPermission ep = (EndpointPermission) obj; - - return (action_mask == ep.action_mask) - && getName().equals(ep.getName()) - && ((endpoint == ep.endpoint) || ((endpoint != null) - && (ep.endpoint != null) && endpoint - .equals(ep.endpoint))); - } - - /** - * Returns the hash code value for this object. - * - * @return Hash code value for this object. - */ - public int hashCode() { - int h = 31 * 17 + getName().hashCode(); - h = 31 * h + getActions().hashCode(); - if (endpoint != null) { - h = 31 * h + endpoint.hashCode(); - } - return h; - } - - /** - * WriteObject is called to save the state of this permission to a stream. - * The actions are serialized, and the superclass takes care of the name. - */ - private synchronized void writeObject(java.io.ObjectOutputStream s) - throws IOException { - if (endpoint != null) { - throw new NotSerializableException("cannot serialize"); - } - // Write out the actions. The superclass takes care of the name - // call getActions to make sure actions field is initialized - if (actions == null) { - getActions(); - } - s.defaultWriteObject(); - } - - /** - * readObject is called to restore the state of this permission from a - * stream. - */ - private synchronized void readObject(java.io.ObjectInputStream s) - throws IOException, ClassNotFoundException { - // Read in the action, then initialize the rest - s.defaultReadObject(); - setTransients(parseFilter(getName()), parseActions(actions)); - } - - /** - * Called by <@link EndpointPermission#implies(Permission)>. - * - * @return a dictionary of properties for this permission. - */ - private Dictionary getProperties() { - return properties; - } -} - -/** - * Stores a set of EndpointPermission permissions. - * - * @see java.security.Permission - * @see java.security.Permissions - * @see java.security.PermissionCollection - */ -final class EndpointPermissionCollection extends PermissionCollection { - static final long serialVersionUID = 662615640374640621L; - /** - * Table of permissions. - * - * @serial - * @GuardedBy this - */ - private Map permissions; - - /** - * Boolean saying if "*" is in the collection. - * - * @serial - * @GuardedBy this - */ - private boolean all_allowed; - - /** - * Creates an empty EndpointPermissions object. - */ - public EndpointPermissionCollection() { - permissions = new HashMap(); - all_allowed = false; - } - - /** - * Adds a permission to this permission collection. - * - * @param permission The Permission object to add. - * @throws IllegalArgumentException If the specified permission is not a - * EndpointPermission object. - * @throws SecurityException If this - * EndpointPermissionCollection object has been marked - * read-only. - */ - public void add(final Permission permission) { - if (!(permission instanceof EndpointPermission)) { - throw new IllegalArgumentException("invalid permission: " - + permission); - } - if (isReadOnly()) { - throw new SecurityException("attempt to add a Permission to a " - + "readonly PermissionCollection"); - } - - final EndpointPermission ep = (EndpointPermission) permission; - if (ep.endpoint != null) { - throw new IllegalArgumentException("cannot add to collection: " - + ep); - } - - final String name = ep.getName(); - synchronized (this) { - /* select the bucket for the permission */ - Map pc = permissions; - final EndpointPermission existing = (EndpointPermission) pc - .get(name); - - if (existing != null) { - final int oldMask = existing.action_mask; - final int newMask = ep.action_mask; - if (oldMask != newMask) { - pc.put(name, - new EndpointPermission(name, oldMask | newMask)); - } - } - else { - pc.put(name, ep); - } - - if (!all_allowed) { - if (name.equals("*")) { - all_allowed = true; - } - } - } - } - - /** - * Determines if a set of permissions implies the permissions expressed in - * permission. - * - * @param permission The Permission object to compare. - * @return true if permission is a proper subset - * of a permission in the set; false otherwise. - */ - public boolean implies(final Permission permission) { - if (!(permission instanceof EndpointPermission)) { - return false; - } - final EndpointPermission requested = (EndpointPermission) permission; - /* if requested permission has a filter, then it is an invalid argument */ - if (requested.filter != null) { - return false; - } - int effective = EndpointPermission.ACTION_NONE; - Collection perms; - synchronized (this) { - final int desired = requested.action_mask; - /* short circuit if the "*" Permission was added */ - if (all_allowed) { - EndpointPermission ep = permissions.get("*"); - if (ep != null) { - effective |= ep.action_mask; - if ((effective & desired) == desired) { - return true; - } - } - } - perms = permissions.values(); - } - - /* iterate one by one over permissions */ - for (Iterator iter = perms.iterator(); iter - .hasNext();) { - if (iter.next().implies0(requested, effective)) { - return true; - } - } - return false; - } - - /** - * Returns an enumeration of all the EndpointPermission objects - * in the container. - * - * @return Enumeration of all the EndpointPermission objects. - */ - public synchronized Enumeration elements() { - List all = new ArrayList(permissions.values()); - return Collections.enumeration(all); - } - - /* serialization logic */ - private static final ObjectStreamField[] serialPersistentFields = { - new ObjectStreamField("permissions", HashMap.class), - new ObjectStreamField("all_allowed", Boolean.TYPE) }; - - private synchronized void writeObject(ObjectOutputStream out) - throws IOException { - ObjectOutputStream.PutField pfields = out.putFields(); - pfields.put("permissions", permissions); - pfields.put("all_allowed", all_allowed); - out.writeFields(); - } - - private synchronized void readObject(java.io.ObjectInputStream in) - throws IOException, ClassNotFoundException { - ObjectInputStream.GetField gfields = in.readFields(); - permissions = (HashMap) gfields.get( - "permissions", new HashMap()); - all_allowed = gfields.get("all_allowed", false); - } -} diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/osgi/service/remoteserviceadmin/ExportReference.java b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/osgi/service/remoteserviceadmin/ExportReference.java deleted file mode 100644 index 03b3235c59..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/osgi/service/remoteserviceadmin/ExportReference.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) OSGi Alliance (2009). All Rights Reserved. - * - * Licensed 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.osgi.service.remoteserviceadmin; - -import org.osgi.framework.ServiceReference; - -/** - * An Export Reference associates a service with a local endpoint. - * - * The Export Reference can be used to reference an exported service. When the - * service is no longer exported, all methods must return null; - * - * @ThreadSafe - * @version $Revision$ - */ -public interface ExportReference { - /** - * Return the service being exported. - * - * @return The service being exported, must be null when this - * registration is unregistered. - */ - ServiceReference getExportedService(); - - /** - * Return the Endpoint Description that is created for this registration. - * - * @return the local Endpoint Description - */ - EndpointDescription getExportedEndpoint(); -} diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/osgi/service/remoteserviceadmin/ExportRegistration.java b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/osgi/service/remoteserviceadmin/ExportRegistration.java deleted file mode 100644 index e8c6c66cbf..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/osgi/service/remoteserviceadmin/ExportRegistration.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (c) OSGi Alliance (2009). All Rights Reserved. - * - * Licensed 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.osgi.service.remoteserviceadmin; - -import org.osgi.framework.ServiceReference; - -/** - * An Export Registration associates a service to a local endpoint. - * - * The Export Registration can be used to delete the endpoint associated with an - * this registration. It is created with the - * {@link RemoteServiceAdmin#exportService(ServiceReference,java.util.Map)} - * method. - * - * When this Export Registration has been unregistered, the methods must all - * return null. - * - * @ThreadSafe - * @version $Revision$ - */ -public interface ExportRegistration { - /** - * Return the Export Reference for the exported service. - * - * @return An Export Reference for this registration - * @throws IllegalStateException Thrown when this object was not properly - * initialized, see {@link #getException()} - */ - ExportReference getExportReference(); - - /** - * Delete the local endpoint and disconnect any remote distribution - * providers. After this method returns, all the methods must return - * null. - * - * This method has no effect when the endpoint is already destroyed or being - * destroyed. - */ - void close(); - - /** - * Exception for any error during the import process. - * - * If the Remote Admin for some reasons is unable to create a registration, - * then it must return a Throwable from this method. In this - * case, all other methods must return on this interface must throw an - * Illegal State Exception. If no error occurred, this method must return - * null. - * - * The error must be set before this Import Registration is returned. - * Asynchronously occurring errors must be reported to the log. - * - * @return The exception that occurred during the creation of the - * registration or null if no exception occurred. - */ - Throwable getException(); -} diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/osgi/service/remoteserviceadmin/ImportReference.java b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/osgi/service/remoteserviceadmin/ImportReference.java deleted file mode 100644 index 5fa5673341..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/osgi/service/remoteserviceadmin/ImportReference.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) OSGi Alliance (2009). All Rights Reserved. - * - * Licensed 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.osgi.service.remoteserviceadmin; - -import org.osgi.framework.ServiceReference; - -/** - * An Import Reference associates an active proxy service to a remote endpoint. - * - * The Import Reference can be used to reference an imported service. When the - * service is no longer imported, all methods must return null; - * - * @ThreadSafe - * @version $Revision$ - */ -public interface ImportReference { - /** - * Answer the associated Service Reference for the proxy to the endpoint. - * - * @return A Service Reference to the proxy for the endpoint. - */ - ServiceReference getImportedService(); - - /** - * Answer the associated remote Endpoint Description. - * - * @return A Endpoint Description for the remote endpoint. - */ - EndpointDescription getImportedEndpoint(); -} diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/osgi/service/remoteserviceadmin/ImportRegistration.java b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/osgi/service/remoteserviceadmin/ImportRegistration.java deleted file mode 100644 index 1fc1c6f6ba..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/osgi/service/remoteserviceadmin/ImportRegistration.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (c) OSGi Alliance (2009). All Rights Reserved. - * - * Licensed 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.osgi.service.remoteserviceadmin; - -/** - * An Import Registration associates an active proxy service to a remote - * endpoint. - * - * The Import Registration can be used to delete the proxy associated with an - * endpoint. It is created with the{@link RemoteServiceAdmin#importService} - * method. - * - * @ThreadSafe - * @version $Revision$ - */ -public interface ImportRegistration { - /** - * Answer the associated Export Reference. - * - * @return An Import Reference for this registration - * @throws IllegalStateException Thrown when this object was not properly - * initialized, see {@link #getException()} - */ - ImportReference getImportReference(); - - /** - * Unregister this Import Registration. This must close the connection to - * the end endpoint unregister the proxy. After this method returns, all - * other methods must return null. - * - * This method has no effect when the service is already unregistered or in - * the process off. - */ - void close(); - - /** - * Exception for any error during the import process. - * - * If the Remote Admin for some reasons is unable to create a registration, - * then it must return a Throwable from this method. In this - * case, all other methods must return on this interface must thrown an - * Illegal State Exception. If no error occurred, this method must return - * null. - * - * The error must be set before this Import Registration is returned. - * Asynchronously occurring errors must be reported to the log. - * - * @return The exception that occurred during the creation of the - * registration or null if no exception occurred. - */ - Throwable getException(); - -} diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/osgi/service/remoteserviceadmin/RemoteConstants.java b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/osgi/service/remoteserviceadmin/RemoteConstants.java deleted file mode 100644 index cf2194ec12..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/osgi/service/remoteserviceadmin/RemoteConstants.java +++ /dev/null @@ -1,216 +0,0 @@ -/* - * Copyright (c) OSGi Alliance (2009, 2010). All Rights Reserved. - * - * Licensed 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.osgi.service.remoteserviceadmin; - -/** - * Provide the definition of the constants used in the Remote Services API. - * - * @Immutable - * @version $Revision$ - */ -public class RemoteConstants { - private RemoteConstants() { - } - - /** - * Service property identifying the configuration types supported by a - * distribution provider. Registered by the distribution provider on one of - * its services to indicate the supported configuration types. - *

- * The value of this property must be of type String, - * String[], or Collection<String>. - */ - public static final String REMOTE_CONFIGS_SUPPORTED = "remote.configs.supported"; - - /** - * Service property identifying the intents supported by a distribution - * provider. Registered by the distribution provider on one of its services - * to indicate the vocabulary of implemented intents. - * - *

- * The value of this property must be of type String, - * String[], or Collection<String>. - */ - public static final String REMOTE_INTENTS_SUPPORTED = "remote.intents.supported"; - - /** - * Service property identifying the configuration types that should be used - * to export the service. Each configuration type represents the - * configuration parameters for an endpoint. A distribution provider should - * create an endpoint for each configuration type that it supports. - * - *

- * This property may be supplied in the properties - * Dictionary object passed to the - * BundleContext.registerService method. The value of this - * property must be of type String, String[], or - * Collection<String>. - */ - public static final String SERVICE_EXPORTED_CONFIGS = "service.exported.configs"; - - /** - * Service property identifying the intents that the distribution provider - * must implement to distribute the service. Intents listed in this property - * are reserved for intents that are critical for the code to function - * correctly, for example, ordering of messages. These intents should not be - * configurable. - * - *

- * This property may be supplied in the properties - * Dictionary object passed to the - * BundleContext.registerService method. The value of this - * property must be of type String, String[], or - * Collection<String>. - */ - public static final String SERVICE_EXPORTED_INTENTS = "service.exported.intents"; - - /** - * Service property identifying the extra intents that the distribution - * provider must implement to distribute the service. This property is - * merged with the service.exported.intents property before the - * distribution provider interprets the listed intents; it has therefore the - * same semantics but the property should be configurable so the - * administrator can choose the intents based on the topology. Bundles - * should therefore make this property configurable, for example through the - * Configuration Admin service. - * - *

- * This property may be supplied in the properties - * Dictionary object passed to the - * BundleContext.registerService method. The value of this - * property must be of type String, String[], or - * Collection<String>. - */ - public static final String SERVICE_EXPORTED_INTENTS_EXTRA = "service.exported.intents.extra"; - - /** - * Service property marking the service for export. It defines the - * interfaces under which this service can be exported. This list must be a - * subset of the types under which the service was registered. The single - * value of an asterisk ("*", \u002A) indicates all the - * interface types under which the service was registered excluding the - * non-interface types. It is strongly recommended to only export interface - * types and not concrete classes due to the complexity of creating proxies - * for some type of concrete classes. - * - *

- * This property may be supplied in the properties - * Dictionary object passed to the - * BundleContext.registerService method. The value of this - * property must be of type String, String[], or - * Collection<String>. - */ - public static final String SERVICE_EXPORTED_INTERFACES = "service.exported.interfaces"; - - /** - * Service property identifying the service as imported. This service - * property must be set by a distribution provider to any value when it - * registers the endpoint proxy as an imported service. A bundle can use - * this property to filter out imported services. - * - *

- * The value of this property may be of any type. - */ - public static final String SERVICE_IMPORTED = "service.imported"; - - /** - * Service property identifying the configuration types used to import the - * service. Any associated properties for this configuration types must be - * properly mapped to the importing system. For example, a URL in these - * properties must point to a valid resource when used in the importing - * framework. If multiple configuration types are listed in this property, - * then they must be synonyms for exactly the same remote endpoint that is - * used to export this service. - * - *

- * The value of this property must be of type String, - * String[], or Collection<String>. - * - * @see #SERVICE_EXPORTED_CONFIGS - */ - public static final String SERVICE_IMPORTED_CONFIGS = "service.imported.configs"; - - /** - * Service property identifying the intents that this service implement. - * This property has a dual purpose: - *

    - *
  • A bundle can use this service property to notify the distribution - * provider that these intents are already implemented by the exported - * service object.
  • - *
  • A distribution provider must use this property to convey the combined - * intents of: The exporting service, and, the intents that the exporting - * distribution provider adds, and the intents that the importing - * distribution provider adds.
  • - *
- * To export a service, a distribution provider must expand any qualified - * intents. Both the exporting and importing distribution providers must - * recognize all intents before a service can be distributed. - * - *

- * The value of this property must be of type String, - * String[], or Collection<String>. - */ - public static final String SERVICE_INTENTS = "service.intents"; - - /* above are from Ch 13 Remote Service spec. */ - - /** - * Endpoint property identifying the id for this endpoint. This service - * property must always be set. - * - *

- * The value of this property must be of type String. - */ - public final static String ENDPOINT_ID = "endpoint.id"; - - /** - * Endpoint property identifying the service id of the exported service. Can - * be absent or 0 if the corresponding endpoint is not for an OSGi service. - * - *

- * The value of this property must be of type Long. - */ - public final static String ENDPOINT_SERVICE_ID = "endpoint.service.id"; - - /** - * Endpoint property identifying the universally unique id of the exporting - * framework. Can be absent if the corresponding endpoint is not for an OSGi - * service. - * - *

- * The value of this property must be of type String. - */ - public final static String ENDPOINT_FRAMEWORK_UUID = "endpoint.framework.uuid"; - - /** - * Prefix for an endpoint property identifying the interface Java package - * version for an interface. For example, the property - * endpoint.package.version.com.acme=1.3 describes the version of the - * package for the com.acme.Foo interface. This endpoint property for an - * interface package does not have to be set. If not set, the value must be - * assumed to be 0. - * - *

- * Since endpoint properties are stored in a case insensitive map, case - * variants of a package name are folded together. - * - *

- * The value of this property must be of type String. - */ - public final static String ENDPOINT_PACKAGE_VERSION_ = "endpoint.package.version."; - -} diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/osgi/service/remoteserviceadmin/RemoteServiceAdmin.java b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/osgi/service/remoteserviceadmin/RemoteServiceAdmin.java deleted file mode 100644 index 98f56a07ae..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/osgi/service/remoteserviceadmin/RemoteServiceAdmin.java +++ /dev/null @@ -1,124 +0,0 @@ -/* - * Copyright (c) OSGi Alliance (2009). All Rights Reserved. - * - * Licensed 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.osgi.service.remoteserviceadmin; - -import java.util.Collection; -import java.util.Map; - -import org.osgi.framework.ServiceReference; - -/** - * A Remote Service Admin manages the import and export of services. - * - * A Distribution Provider can expose a control interface. This interface allows - * the a remote manager to control the export and import of services. - * - * The API allows a remote manager to export a service, to import a service, and - * find out about the current imports and exports. - * - * @ThreadSafe - * @version $Revision$ - */ -public interface RemoteServiceAdmin { - - /** - * Export a service to a given Endpoint. The Remote Service Admin must - * create an Endpoint from the given description that can be used by other - * Distrbution Providers to connect to this Remote Service Admin and use the - * exported service. This method can return null if the service could not be - * exported because the Endpoint could not be implemented by this Remote - * Service Admin. - * - * The properties on a Service Reference are case insensitive while the - * properties on a properties are case sensitive. A value in - * the properties must therefore override any case variant in - * the properties of the Service Reference. - * - *

- * If the caller does not have the appropriate - * EndpointPermission[endpoint,EXPORT] for an Endpoint, and the - * Java Runtime Environment supports permissions, then the - * {@link ExportRegistration#getException() getException} method on the - * corresponding returned {@link ExportRegistration} will return a - * SecurityException. - * - * @param reference The Service Reference to export. - * @param properties The properties to create a local Endpoint that can be - * implemented by this Remote Service Admin. If this is null, the - * Endpoint will be determined by the properties on the service. The - * properties are the same as given for an exported service. They are - * overlaid over any properties the service defines (case - * insensitive). This parameter can be null, this should - * be treated as an empty map. - * - * @return An Export Registration that combines the Endpoint Description and - * the Service Reference. Is never null. - * @throws IllegalArgumentException If any of the properties has a value - * that is not syntactically correct or if the service properties - * and the overlaid properties do not contain a - * {@link RemoteConstants#SERVICE_EXPORTED_INTERFACES} entry. - * @throws UnsupportedOperationException If any of the intents expressed - * through the properties is not supported by the distribution - * provider. - */ - Collection exportService(ServiceReference reference, - Map properties); - - /** - * Import a service from an Endpoint. The Remote Service Admin must use the - * given Endpoint to create a proxy. This method can return null if the - * service could not be imported. - * - * @param endpoint The Endpoint Description to be used for import. - * @return An Import Registration that combines the Endpoint Description and - * the Service Reference or null if the Endpoint could - * not be imported. - * @throws SecurityException If the caller does not have the appropriate - * EndpointPermission[endpoint,IMPORT] for the - * Endpoint, and the Java Runtime Environment supports permissions. - */ - ImportRegistration importService(EndpointDescription endpoint); - - /** - * Return the currently active Export References. - * - *

- * If the caller does not have the appropriate - * EndpointPermission[endpoint,READ] for an Endpoint, and the - * Java Runtime Environment supports permissions, then returned collection - * will not contain a reference to the exported Endpoint. - * - * @return A Collection of {@link ExportReference}s that are - * currently active. - */ - Collection getExportedServices(); - - /** - * Return the currently active Import References. - * - *

- * If the caller does not have the appropriate - * EndpointPermission[endpoint,READ] for an Endpoint, and the - * Java Runtime Environment supports permissions, then returned collection - * will not contain a reference to the imported Endpoint. - * - * @return A Collection of {@link ImportReference}s that are - * currently active. - */ - Collection getImportedEndpoints(); - -} diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/osgi/service/remoteserviceadmin/RemoteServiceAdminEvent.java b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/osgi/service/remoteserviceadmin/RemoteServiceAdminEvent.java deleted file mode 100644 index 8f4ac717c8..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/osgi/service/remoteserviceadmin/RemoteServiceAdminEvent.java +++ /dev/null @@ -1,178 +0,0 @@ -/* - * Copyright (c) OSGi Alliance (2009). All Rights Reserved. - * - * Licensed 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.osgi.service.remoteserviceadmin; - -import org.osgi.framework.Bundle; - -/** - * Provides the event information for a Remote Admin event. - * - * @Immutable - * @version $Revision$ - */ -public class RemoteServiceAdminEvent { - /** - * Add an import registration. The Remote Services Admin will call this - * method when it imports a service. When this service is registered, the - * Remote Service Admin must notify the listener of all existing Import - * Registrations. - * - */ - public static final int IMPORT_REGISTRATION = 1; - - /** - * Add an export registration. The Remote Services Admin will call this - * method when it exports a service. When this service is registered, the - * Remote Service Admin must notify the listener of all existing Export - * Registrations. - */ - public static final int EXPORT_REGISTRATION = 2; - - /** - * Remove an export registration. The Remote Services Admin will call this - * method when it removes the export of a service. - * - */ - public static final int EXPORT_UNREGISTRATION = 3; - - /** - * Remove an import registration. The Remote Services Admin will call this - * method when it removes the import of a service. - * - */ - public static final int IMPORT_UNREGISTRATION = 4; - - /** - * A fatal importing error occurred. The Import Registration has been - * closed. - */ - public static final int IMPORT_ERROR = 5; - - /** - * A fatal exporting error occurred. The Export Registration has been - * closed. - */ - public static final int EXPORT_ERROR = 6; - - /** - * A problematic situation occurred, the export is still active. - */ - public static final int EXPORT_WARNING = 7; - /** - * A problematic situation occurred, the import is still active. - */ - public static final int IMPORT_WARNING = 8; - - private final ImportReference importReference; - private final ExportReference exportReference; - private final Throwable exception; - private final int type; - private final Bundle source; - - /** - * Private constructor. - * - * @param type The event type - * @param source The source bundle, must not be null. - * @param importReference The importReference, can be null. - * @param exportReference The exportReference, can be null. - * @param exception Any exceptions encountered, can be null - */ - private RemoteServiceAdminEvent(int type, Bundle source, - ImportReference importReference, ExportReference exportReference, - Throwable exception) { - if (source == null) { - throw new NullPointerException("source must not be null"); - } - this.type = type; - this.source = source; - this.importReference = importReference; - this.exportReference = exportReference; - this.exception = exception; - } - - /** - * Create a Remote Service Admin Event for an export notification. - * - * @param type The event type. - * @param source The source bundle, must not be null. - * @param exportReference The exportReference, can not be null. - * @param exception Any exceptions encountered, can be null. - */ - public RemoteServiceAdminEvent(int type, Bundle source, - ExportReference exportReference, Throwable exception) { - this(type, source, null, exportReference, exception); - } - - /** - * Create a Remote Service Admin Event for an import notification. - * - * @param type The event type. - * @param source The source bundle, must not be null. - * @param importReference The importReference, can not be null. - * @param exception Any exceptions encountered, can be null. - */ - public RemoteServiceAdminEvent(int type, Bundle source, - ImportReference importReference, Throwable exception) { - this(type, source, importReference, null, exception); - } - - /** - * Return the Import Reference for this event. - * - * @return The Import Reference or null. - */ - public ImportReference getImportReference() { - return importReference; - } - - /** - * Return the Export Reference for this event. - * - * @return The Export Reference or null. - */ - public ExportReference getExportReference() { - return exportReference; - } - - /** - * Return the exception for this event. - * - * @return The exception or null. - */ - public Throwable getException() { - return exception; - } - - /** - * Return the type of this event. - * - * @return The type of this event. - */ - public int getType() { - return type; - } - - /** - * Return the bundle source of this event. - * - * @return The bundle source of this event. - */ - public Bundle getSource() { - return source; - } -} diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/osgi/service/remoteserviceadmin/RemoteServiceAdminListener.java b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/osgi/service/remoteserviceadmin/RemoteServiceAdminListener.java deleted file mode 100644 index 2941f8b117..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/java/org/osgi/service/remoteserviceadmin/RemoteServiceAdminListener.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) OSGi Alliance (2009). All Rights Reserved. - * - * Licensed 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.osgi.service.remoteserviceadmin; - -/** - * A {@link RemoteServiceAdminEvent} listener is notified synchronously of any - * export or import registrations and unregistrations. - * - *

- * If the Java Runtime Environment supports permissions, then filtering is done. - * RemoteServiceAdminEvent objects are only delivered to the - * listener if the bundle which defines the listener object's class has the - * appropriate EndpointPermission[endpoint,READ] for the endpoint - * referenced by the event. - * - * - * @see RemoteServiceAdminEvent - * @ThreadSafe - * @version $Revision$ - */ - -public interface RemoteServiceAdminListener { - /** - * Receive notification of any export or import registrations and - * unregistrations as well as errors and warnings. - * - * @param event The {@link RemoteServiceAdminEvent} object. - */ - void remoteAdminEvent(RemoteServiceAdminEvent event); -} diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.ValidationSchema b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.ValidationSchema deleted file mode 100644 index 1991eba409..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.ValidationSchema +++ /dev/null @@ -1,18 +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. -# -org/osgi/service/remoteserviceadmin/osgi-remoteserviceadmin.xsd diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/resources/META-INF/services/org.apache.tuscany.sca.node.NodeFactory b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/resources/META-INF/services/org.apache.tuscany.sca.node.NodeFactory deleted file mode 100644 index e44fce66a5..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/resources/META-INF/services/org.apache.tuscany.sca.node.NodeFactory +++ /dev/null @@ -1,17 +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. -# org.apache.tuscany.sca.node.osgi.impl.OSGiNodeFactoryImpl;ranking=100 diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/resources/org/osgi/service/remoteserviceadmin/osgi-remoteserviceadmin.xsd b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/resources/org/osgi/service/remoteserviceadmin/osgi-remoteserviceadmin.xsd deleted file mode 100644 index dc88df965c..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/main/resources/org/osgi/service/remoteserviceadmin/osgi-remoteserviceadmin.xsd +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/CalculatorService.java b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/CalculatorService.java deleted file mode 100644 index cc562b7c2f..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/CalculatorService.java +++ /dev/null @@ -1,36 +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 calculator.dosgi; - -import org.oasisopen.sca.annotation.Remotable; - -/** - * The Calculator service interface. - */ -@Remotable -public interface CalculatorService { - - double add(double n1, double n2); - - double subtract(double n1, double n2); - - double multiply(double n1, double n2); - - double divide(double n1, double n2); -} diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/impl/CalculatorActivator.java b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/impl/CalculatorActivator.java deleted file mode 100644 index cf1b78931a..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/impl/CalculatorActivator.java +++ /dev/null @@ -1,75 +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 calculator.dosgi.impl; - -import java.util.Dictionary; -import java.util.Hashtable; -import java.util.logging.Logger; - -import org.osgi.framework.Bundle; -import org.osgi.framework.BundleActivator; -import org.osgi.framework.BundleContext; -import org.osgi.framework.ServiceReference; -import org.osgi.service.packageadmin.PackageAdmin; - -import calculator.dosgi.CalculatorService; -import calculator.dosgi.operations.AddService; - -/** - * - */ -public class CalculatorActivator implements BundleActivator { - private Logger logger = Logger.getLogger(CalculatorActivator.class.getName()); - - private Bundle getBundle(BundleContext bundleContext, Class cls) { - PackageAdmin packageAdmin = null; - // PackageAdmin is used to resolve bundles - ServiceReference ref = bundleContext.getServiceReference("org.osgi.service.packageadmin.PackageAdmin"); - if (ref != null) { - packageAdmin = (PackageAdmin)bundleContext.getService(ref); - Bundle bundle = packageAdmin.getBundle(cls); - if (bundle != null) { - logger.info(cls.getName() + " is loaded by bundle: " + bundle.getSymbolicName()); - } - bundleContext.ungetService(ref); - return bundle; - } - return null; - } - - public void start(BundleContext context) throws Exception { - logger.info("Starting " + context.getBundle()); - Dictionary props = new Hashtable(); - props.put("sca.service", "CalculatorComponent#service-name(Calculator)"); - props.put("calculator", "Calculator"); - logger.info("Registering " + CalculatorService.class.getName()); - CalculatorService calculator = new CalculatorServiceImpl(context); - context.registerService(CalculatorService.class.getName(), calculator, props); - - getBundle(context, AddService.class); - - } - - public void stop(BundleContext context) throws Exception { - logger.info("Stopping " + context.getBundle()); - // Registered services will be automatically unregistered - } - -} diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/impl/CalculatorServiceDSImpl.java b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/impl/CalculatorServiceDSImpl.java deleted file mode 100644 index 5f9db16ca9..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/impl/CalculatorServiceDSImpl.java +++ /dev/null @@ -1,114 +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 calculator.dosgi.impl; - -import org.osgi.service.component.ComponentContext; - -import calculator.dosgi.CalculatorService; -import calculator.dosgi.operations.AddService; -import calculator.dosgi.operations.DivideService; -import calculator.dosgi.operations.MultiplyService; -import calculator.dosgi.operations.SubtractService; - -/** - * An implementation of the Calculator service. - */ -public class CalculatorServiceDSImpl implements CalculatorService { - private AddService addService; - private SubtractService subtractService; - private MultiplyService multiplyService; - private DivideService divideService; - - public CalculatorServiceDSImpl() { - super(); - System.out.println("CalculatorServiceDSImpl()"); - } - - protected void activate(ComponentContext context) { - System.out.println("Activating " + context); - } - - protected void deactivate(ComponentContext context) { - System.out.println("Deactivating " + context); - } - - /* - * The following setters can be used for DS injection - */ - public void setAddService(AddService addService) { - System.out.println("setAddService()"); - this.addService = addService; - } - - public void setSubtractService(SubtractService subtractService) { - this.subtractService = subtractService; - } - - public void setDivideService(DivideService divideService) { - this.divideService = divideService; - } - - public void setMultiplyService(MultiplyService multiplyService) { - this.multiplyService = multiplyService; - } - - /* - * The following setters can be used for DS injection - */ - public void unsetAddService(AddService addService) { - System.out.println("unsetAddService()"); - this.addService = null; - } - - public void unsetSubtractService(SubtractService subtractService) { - this.subtractService = null; - } - - public void unsetDivideService(DivideService divideService) { - this.divideService = null; - } - - public void unsetMultiplyService(MultiplyService multiplyService) { - this.multiplyService = null; - } - private T getService(Class cls) { - for (Object s : new Object[] {addService, subtractService, multiplyService, divideService}) { - if (cls.isInstance(s)) { - return cls.cast(s); - } - } - throw new IllegalStateException(cls.getSimpleName() + " is not available"); - } - - public double add(double n1, double n2) { - return getService(AddService.class).add(n1, n2); - } - - public double subtract(double n1, double n2) { - return getService(SubtractService.class).subtract(n1, n2); - } - - public double multiply(double n1, double n2) { - return getService(MultiplyService.class).multiply(n1, n2); - } - - public double divide(double n1, double n2) { - return getService(DivideService.class).divide(n1, n2); - } -} diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/impl/CalculatorServiceImpl.java b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/impl/CalculatorServiceImpl.java deleted file mode 100644 index 0960938086..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/impl/CalculatorServiceImpl.java +++ /dev/null @@ -1,96 +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 calculator.dosgi.impl; - -import static org.osgi.framework.Constants.OBJECTCLASS; - -import org.osgi.framework.BundleContext; -import org.osgi.framework.Filter; -import org.osgi.framework.InvalidSyntaxException; -import org.osgi.util.tracker.ServiceTracker; - -import calculator.dosgi.CalculatorService; -import calculator.dosgi.operations.AddService; -import calculator.dosgi.operations.DivideService; -import calculator.dosgi.operations.MultiplyService; -import calculator.dosgi.operations.SubtractService; - -/** - * An implementation of the Calculator service. - */ -public class CalculatorServiceImpl implements CalculatorService { - private ServiceTracker remoteServices; - private ServiceTracker localServices; - - public CalculatorServiceImpl() { - super(); - } - - public CalculatorServiceImpl(BundleContext context) { - super(); - Filter remoteFilter = null, localFilter = null; - try { - remoteFilter = - context.createFilter("(&(" + OBJECTCLASS + "=calculator.dosgi.operations.*) (sca.reference=*))"); - localFilter = - context.createFilter("(&(" + OBJECTCLASS + "=calculator.dosgi.operations.*) (!(sca.reference=*)))"); - } catch (InvalidSyntaxException e) { - e.printStackTrace(); - } - this.remoteServices = new ServiceTracker(context, remoteFilter, null); - remoteServices.open(); - this.localServices = new ServiceTracker(context, localFilter, null); - localServices.open(); - } - - private T getService(Class cls) { - Object[] remoteObjects = remoteServices.getServices(); - if (remoteObjects != null) { - for (Object s : remoteObjects) { - if (cls.isInstance(s)) { - System.out.println("Remote service: " + s); - return cls.cast(s); - } - } - } - for (Object s : localServices.getServices()) { - if (cls.isInstance(s)) { - System.out.println("Local service: " + s); - return cls.cast(s); - } - } - throw new IllegalStateException(cls.getSimpleName() + " is not available"); - } - - public double add(double n1, double n2) { - return getService(AddService.class).add(n1, n2); - } - - public double subtract(double n1, double n2) { - return getService(SubtractService.class).subtract(n1, n2); - } - - public double multiply(double n1, double n2) { - return getService(MultiplyService.class).multiply(n1, n2); - } - - public double divide(double n1, double n2) { - return getService(DivideService.class).divide(n1, n2); - } -} diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/operations/AddService.java b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/operations/AddService.java deleted file mode 100644 index 971500782f..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/operations/AddService.java +++ /dev/null @@ -1,31 +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 calculator.dosgi.operations; - -import org.oasisopen.sca.annotation.Remotable; - -/** - * The interface for the add service - */ -@Remotable -public interface AddService { - - double add(double n1, double n2); - -} diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/operations/DivideService.java b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/operations/DivideService.java deleted file mode 100644 index 49b8a1c0bf..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/operations/DivideService.java +++ /dev/null @@ -1,31 +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 calculator.dosgi.operations; - -import org.oasisopen.sca.annotation.Remotable; - -/** - * The interface for the divide service - */ -@Remotable -public interface DivideService { - - double divide(double n1, double n2); - -} diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/operations/MultiplyService.java b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/operations/MultiplyService.java deleted file mode 100644 index f4e59d12ea..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/operations/MultiplyService.java +++ /dev/null @@ -1,31 +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 calculator.dosgi.operations; - -import org.oasisopen.sca.annotation.Remotable; - -/** - * The interface for the multiply service - */ -@Remotable -public interface MultiplyService { - - double multiply(double n1, double n2); - -} diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/operations/SubtractService.java b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/operations/SubtractService.java deleted file mode 100644 index bfb9b820f7..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/operations/SubtractService.java +++ /dev/null @@ -1,31 +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 calculator.dosgi.operations; - -import org.oasisopen.sca.annotation.Remotable; - -/** - * The interface for the subtract service - */ -@Remotable -public interface SubtractService { - - double subtract(double n1, double n2); - -} diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/operations/impl/AddServiceImpl.java b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/operations/impl/AddServiceImpl.java deleted file mode 100644 index 66b2977241..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/operations/impl/AddServiceImpl.java +++ /dev/null @@ -1,37 +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 calculator.dosgi.operations.impl; - -import java.util.logging.Level; -import java.util.logging.Logger; - -import calculator.dosgi.operations.AddService; - -/** - * An implementation of the Add service - */ -public class AddServiceImpl implements AddService { - - public double add(double n1, double n2) { - Logger logger = Logger.getLogger("calculator"); - logger.log(Level.INFO, "Adding " + n1 + " and " + n2); - return n1 + n2; - } - -} diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/operations/impl/DivideServiceImpl.java b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/operations/impl/DivideServiceImpl.java deleted file mode 100644 index a3c21b2b96..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/operations/impl/DivideServiceImpl.java +++ /dev/null @@ -1,37 +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 calculator.dosgi.operations.impl; - -import java.util.logging.Level; -import java.util.logging.Logger; - -import calculator.dosgi.operations.DivideService; - -/** - * An implementation of the Divide service. - */ -public class DivideServiceImpl implements DivideService { - - public double divide(double n1, double n2) { - Logger logger = Logger.getLogger("calculator"); - logger.log(Level.INFO, "Dividing " + n1 + " with " + n2); - return n1 / n2; - } - -} diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/operations/impl/MultiplyServiceImpl.java b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/operations/impl/MultiplyServiceImpl.java deleted file mode 100644 index 7922d2d392..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/operations/impl/MultiplyServiceImpl.java +++ /dev/null @@ -1,37 +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 calculator.dosgi.operations.impl; - -import java.util.logging.Level; -import java.util.logging.Logger; - -import calculator.dosgi.operations.MultiplyService; - -/** - * An implementation of the Multiply service. - */ -public class MultiplyServiceImpl implements MultiplyService { - - public double multiply(double n1, double n2) { - Logger logger = Logger.getLogger("calculator"); - logger.log(Level.INFO, "Multiplying " + n1 + " with " + n2); - return n1 * n2; - } - -} diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/operations/impl/OperationsActivator.java b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/operations/impl/OperationsActivator.java deleted file mode 100644 index 5348d19f34..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/operations/impl/OperationsActivator.java +++ /dev/null @@ -1,88 +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 calculator.dosgi.operations.impl; - -import java.util.Dictionary; -import java.util.Hashtable; -import java.util.logging.Logger; - -import org.osgi.framework.Bundle; -import org.osgi.framework.BundleActivator; -import org.osgi.framework.BundleContext; -import org.osgi.framework.ServiceReference; -import org.osgi.service.packageadmin.PackageAdmin; - -import calculator.dosgi.operations.AddService; -import calculator.dosgi.operations.DivideService; -import calculator.dosgi.operations.MultiplyService; -import calculator.dosgi.operations.SubtractService; - -/** - * - */ -public class OperationsActivator implements BundleActivator { - private Logger logger = Logger.getLogger(OperationsActivator.class.getName()); - - public void start(BundleContext context) throws Exception { - logger.info("Starting " + context.getBundle()); - - Dictionary props = new Hashtable(); - - logger.info("Registering " + AddService.class.getName()); - props.put("sca.service", "AddComponent#service-name(Add)"); - context.registerService(AddService.class.getName(), new AddServiceImpl(), props); - - logger.info("Registering " + SubtractService.class.getName()); - props.put("sca.service", "SubtractComponent#service-name(Subtract)"); - context.registerService(SubtractService.class.getName(), new SubtractServiceImpl(), props); - - logger.info("Registering " + MultiplyService.class.getName()); - props.put("sca.service", "MultiplyComponent#service-name(Multiply)"); - context.registerService(MultiplyService.class.getName(), new MultiplyServiceImpl(), props); - - logger.info("Registering " + DivideService.class.getName()); - props.put("sca.service", "DivideComponent#service-name(Divide)"); - context.registerService(DivideService.class.getName(), new DivideServiceImpl(), props); - - getBundle(context, AddService.class); - } - - public void stop(BundleContext context) throws Exception { - logger.info("Stopping " + context.getBundle()); - // Registered services will be automatically unregistered - } - - private Bundle getBundle(BundleContext bundleContext, Class cls) { - PackageAdmin packageAdmin = null; - // PackageAdmin is used to resolve bundles - ServiceReference ref = bundleContext.getServiceReference("org.osgi.service.packageadmin.PackageAdmin"); - if (ref != null) { - packageAdmin = (PackageAdmin)bundleContext.getService(ref); - Bundle bundle = packageAdmin.getBundle(cls); - if (bundle != null) { - logger.info(cls.getName() + " is loaded by bundle: " + bundle.getSymbolicName()); - } - bundleContext.ungetService(ref); - return bundle; - } - return null; - } - -} diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/operations/impl/SubtractServiceImpl.java b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/operations/impl/SubtractServiceImpl.java deleted file mode 100644 index 4bbe83b14f..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/operations/impl/SubtractServiceImpl.java +++ /dev/null @@ -1,37 +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 calculator.dosgi.operations.impl; - -import java.util.logging.Level; -import java.util.logging.Logger; - -import calculator.dosgi.operations.SubtractService; - -/** - * An implementation of the subtract service. - */ -public class SubtractServiceImpl implements SubtractService { - - public double subtract(double n1, double n2) { - Logger logger = Logger.getLogger("calculator"); - logger.log(Level.INFO, "Subtracting " + n1 + " from " + n2); - return n1 - n2; - } - -} diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/test/CalculatorOSGiNodeTestCase.java b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/test/CalculatorOSGiNodeTestCase.java deleted file mode 100644 index 268f16bc9f..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/test/CalculatorOSGiNodeTestCase.java +++ /dev/null @@ -1,156 +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 calculator.dosgi.test; - -import static calculator.dosgi.test.OSGiTestBundles.bundleStatus; -import static calculator.dosgi.test.OSGiTestBundles.generateCalculatorBundle; -import static calculator.dosgi.test.OSGiTestBundles.generateCalculatorSCABundle; -import static calculator.dosgi.test.OSGiTestBundles.generateOperationsBundle; - -import java.net.URL; -import java.security.AccessController; -import java.security.PrivilegedAction; - -import org.apache.tuscany.sca.node.equinox.launcher.EquinoxHost; -import org.junit.AfterClass; -import org.junit.Assert; -import org.junit.BeforeClass; -import org.junit.Test; -import org.osgi.framework.Bundle; -import org.osgi.framework.BundleContext; -import org.osgi.framework.Constants; -import org.osgi.framework.ServiceReference; - -import calculator.dosgi.CalculatorService; - -/** - * - */ -public class CalculatorOSGiNodeTestCase { - private static EquinoxHost host; - private static BundleContext context; - private static Bundle calculatorBundle; - private static Bundle operationsBundle; - private static Bundle scaBundle; - private static Boolean client; - - public static URL getCodeLocation(final Class anchorClass) { - return AccessController.doPrivileged(new PrivilegedAction() { - public URL run() { - return anchorClass.getProtectionDomain().getCodeSource().getLocation(); - } - }); - } - - /** - * @throws java.lang.Exception - */ - @BeforeClass - public static void setUpBeforeClass() throws Exception { - try { - host = new EquinoxHost(); - context = host.start(); - String prop = System.getProperty("client"); - if (prop != null) { - client = Boolean.valueOf(prop); - } - - if (client == null || client.booleanValue()) { - System.out.println("Generating calculator.dosgi bundle..."); - calculatorBundle = context.installBundle("reference:" + generateCalculatorBundle().toString()); - } - - if (client == null || !client.booleanValue()) { - System.out.println("Generating calculator.dosgi.operations bundle..."); - operationsBundle = context.installBundle("reference:" + generateOperationsBundle().toString()); - } - - scaBundle = context.installBundle("reference:" + generateCalculatorSCABundle().toString()); - - for (Bundle b : context.getBundles()) { - if (b.getSymbolicName().equals("org.eclipse.equinox.ds") || b.getSymbolicName() - .startsWith("org.apache.tuscany.sca.")) { - try { - if (b.getHeaders().get(Constants.FRAGMENT_HOST) == null) { - b.start(); - } - } catch (Exception e) { - System.out.println(bundleStatus(b, false)); - e.printStackTrace(); - } - System.out.println(bundleStatus(b, false)); - } - } - - if (scaBundle != null) { - scaBundle.start(); - } - - if (calculatorBundle != null) { - calculatorBundle.start(); - System.out.println(bundleStatus(calculatorBundle, false)); - } - - if (operationsBundle != null) { - operationsBundle.start(); - System.out.println(bundleStatus(operationsBundle, false)); - } - - } catch (Exception e) { - e.printStackTrace(); - throw e; - } - } - - @Test - public void testOSGi() { - if (client == null || client.booleanValue()) { - ServiceReference ref = - calculatorBundle.getBundleContext().getServiceReference(CalculatorService.class.getName()); - Assert.assertNotNull(ref); - Object service = context.getService(ref); - Assert.assertNotNull(service); - CalculatorService calculator = OSGiTestBundles.cast(service, CalculatorService.class); - System.out.println("2.0 + 1.0 = " + calculator.add(2.0, 1.0)); - System.out.println("2.0 - 1.0 = " + calculator.subtract(2.0, 1.0)); - System.out.println("2.0 * 1.0 = " + calculator.multiply(2.0, 1.0)); - System.out.println("2.0 / 1.0 = " + calculator.divide(2.0, 1.0)); - } - } - - /** - * @throws java.lang.Exception - */ - @AfterClass - public static void tearDownAfterClass() throws Exception { - if (host != null) { - if (scaBundle != null) { - scaBundle.stop(); - } - if (client != null && !client.booleanValue()) { - System.out.println("Press Enter to stop the node..."); - System.in.read(); - } - host.stop(); - context = null; - } - } - -} diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/test/CalculatorOSGiTestCase.java b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/test/CalculatorOSGiTestCase.java deleted file mode 100644 index 2af5552279..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/test/CalculatorOSGiTestCase.java +++ /dev/null @@ -1,99 +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 calculator.dosgi.test; - -import static calculator.dosgi.test.OSGiTestBundles.bundleStatus; -import static calculator.dosgi.test.OSGiTestBundles.generateCalculatorBundle; -import static calculator.dosgi.test.OSGiTestBundles.generateOperationsBundle; - -import org.apache.tuscany.sca.node.equinox.launcher.EquinoxHost; -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Test; -import org.osgi.framework.Bundle; -import org.osgi.framework.BundleContext; -import org.osgi.framework.ServiceReference; - -import calculator.dosgi.CalculatorService; - -/** - * - */ -public class CalculatorOSGiTestCase { - private static EquinoxHost host; - - /** - * @throws java.lang.Exception - */ - @BeforeClass - public static void setUpBeforeClass() throws Exception { - try { - host = new EquinoxHost(); - BundleContext context = host.start(); - Bundle calculatorBundle = context.installBundle("reference:" + generateCalculatorBundle().toString()); - Bundle operationsBundle = context.installBundle("reference:" + generateOperationsBundle().toString()); - - for (Bundle b : context.getBundles()) { - if (b.getSymbolicName().equals("org.eclipse.equinox.ds")) { - System.out.println(bundleStatus(b, false)); - b.start(); - System.out.println(bundleStatus(b, false)); - } - } - - calculatorBundle.start(); - System.out.println(bundleStatus(calculatorBundle, false)); - operationsBundle.start(); - System.out.println(bundleStatus(operationsBundle, false)); - - // Sleep for 1 sec so that the DS is available - Thread.sleep(1000); - // Use the DS version - String filter = "(component.name=CalculatorComponent)"; - System.out.println(filter); - ServiceReference ref = - calculatorBundle.getBundleContext().getServiceReferences(CalculatorService.class.getName(), filter)[0]; - CalculatorService calculator = OSGiTestBundles.cast(context.getService(ref), CalculatorService.class); - System.out.println("2.0 + 1.0 = " + calculator.add(2.0, 1.0)); - System.out.println("2.0 - 1.0 = " + calculator.subtract(2.0, 1.0)); - System.out.println("2.0 * 1.0 = " + calculator.multiply(2.0, 1.0)); - System.out.println("2.0 / 1.0 = " + calculator.divide(2.0, 1.0)); - } catch (Exception e) { - e.printStackTrace(); - throw e; - } - } - - @Test - public void testOSGi() { - - } - - /** - * @throws java.lang.Exception - */ - @AfterClass - public static void tearDownAfterClass() throws Exception { - if (host != null) { - host.stop(); - } - } - -} diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/test/OSGiTestBundles.java b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/test/OSGiTestBundles.java deleted file mode 100644 index bdb484e6bb..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/java/calculator/dosgi/test/OSGiTestBundles.java +++ /dev/null @@ -1,362 +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 calculator.dosgi.test; - -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.lang.reflect.InvocationHandler; -import java.lang.reflect.Method; -import java.lang.reflect.Proxy; -import java.net.URL; -import java.util.HashSet; -import java.util.Set; -import java.util.jar.JarOutputStream; -import java.util.jar.Manifest; -import java.util.zip.ZipEntry; - -import org.osgi.framework.Bundle; -import org.osgi.framework.BundleActivator; -import org.osgi.framework.Constants; - -import calculator.dosgi.CalculatorService; -import calculator.dosgi.impl.CalculatorActivator; -import calculator.dosgi.impl.CalculatorServiceDSImpl; -import calculator.dosgi.impl.CalculatorServiceImpl; -import calculator.dosgi.operations.AddService; -import calculator.dosgi.operations.DivideService; -import calculator.dosgi.operations.MultiplyService; -import calculator.dosgi.operations.SubtractService; -import calculator.dosgi.operations.impl.AddServiceImpl; -import calculator.dosgi.operations.impl.DivideServiceImpl; -import calculator.dosgi.operations.impl.MultiplyServiceImpl; -import calculator.dosgi.operations.impl.OperationsActivator; -import calculator.dosgi.operations.impl.SubtractServiceImpl; - -/** - * - * Utility class to create OSGi bundles - * - * @version $Rev$ $Date$ - */ -public class OSGiTestBundles { - private static class InvocationHandlerImpl implements InvocationHandler { - private Object instance; - - public InvocationHandlerImpl(Object instance) { - super(); - this.instance = instance; - } - - public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { - Method m = instance.getClass().getMethod(method.getName(), method.getParameterTypes()); - return m.invoke(instance, args); - } - - } - - private static String getPackageName(Class cls) { - String name = cls.getName(); - int index = name.lastIndexOf('.'); - return index == -1 ? "" : name.substring(0, index); - } - - public static URL createBundle(String jarName, String mfFile, String[][] resources, Class... classes) - throws IOException { - InputStream is = OSGiTestBundles.class.getClassLoader().getResourceAsStream(mfFile); - Manifest manifest = new Manifest(is); - is.close(); - - ByteArrayOutputStream out = new ByteArrayOutputStream(); - JarOutputStream jarOut = new JarOutputStream(out, manifest); - - for (Class cls : classes) { - addClass(jarOut, cls); - } - - if (resources != null) { - for (String resource[] : resources) { - if (resource.length >= 1) { - String r1 = resource[0]; - String r2 = resource.length > 1 ? resource[1] : r1; - addResource(jarOut, OSGiTestBundles.class.getClassLoader(), r1, r2); - } - } - } - - jarOut.close(); - out.close(); - - File jar = new File(jarName); - FileOutputStream fileOut = new FileOutputStream(jar); - fileOut.write(out.toByteArray()); - fileOut.close(); - - return jar.toURI().toURL(); - } - - public static URL createBundle(String jarName, - String bundleName, - String exports, - String imports, - String[] resources, - Class... classes) throws IOException { - - Class activator = null; - Set packages = new HashSet(); - StringBuffer exportPackages = new StringBuffer(); - if (exports != null) { - exportPackages.append(exports); - } - for (Class cls : classes) { - if (BundleActivator.class.isAssignableFrom(cls)) { - activator = cls; - } - if (exports == null && cls.isInterface()) { - String pkg = getPackageName(cls); - if (packages.add(pkg)) { - exportPackages.append(pkg).append(","); - } - } - } - int len = exportPackages.length(); - if (len > 0 && exportPackages.charAt(len - 1) == ',') { - exportPackages.deleteCharAt(len - 1); - } - - Manifest manifest = new Manifest(); - // This attribute Manifest-Version is required so that the MF will be added to the jar - manifest.getMainAttributes().putValue("Manifest-Version", "1.0"); - manifest.getMainAttributes().putValue(Constants.BUNDLE_MANIFESTVERSION, "2"); - manifest.getMainAttributes().putValue(Constants.BUNDLE_SYMBOLICNAME, bundleName); - manifest.getMainAttributes().putValue(Constants.BUNDLE_VERSION, "1.0.0"); - manifest.getMainAttributes().putValue(Constants.BUNDLE_NAME, bundleName); - manifest.getMainAttributes().putValue(Constants.EXPORT_PACKAGE, exportPackages.toString()); - StringBuffer importPackages = new StringBuffer(); - if (imports != null) { - importPackages.append(imports).append(",org.osgi.framework"); - } else { - importPackages.append("org.osgi.framework"); - } - manifest.getMainAttributes().putValue(Constants.IMPORT_PACKAGE, importPackages.toString()); - - if (activator != null) { - manifest.getMainAttributes().putValue(Constants.BUNDLE_ACTIVATOR, activator.getName()); - } - - ByteArrayOutputStream out = new ByteArrayOutputStream(); - JarOutputStream jarOut = new JarOutputStream(out, manifest); - - for (Class cls : classes) { - addClass(jarOut, cls); - } - - if (resources != null) { - for (String resource : resources) { - addResource(jarOut, OSGiTestBundles.class.getClassLoader(), resource, null); - } - } - - jarOut.close(); - out.close(); - - File jar = new File(jarName); - FileOutputStream fileOut = new FileOutputStream(jar); - fileOut.write(out.toByteArray()); - fileOut.close(); - - return jar.toURI().toURL(); - } - - private static void addClass(JarOutputStream jarOut, Class javaClass) throws IOException, FileNotFoundException { - String classFile = javaClass.getName().replace('.', '/') + ".class"; - URL url = javaClass.getResource(javaClass.getSimpleName() + ".class"); - addEntry(jarOut, url, classFile); - } - - private static void addResource(JarOutputStream jarOut, ClassLoader cl, String resourceName, String entryName) - throws IOException, FileNotFoundException { - URL url = cl.getResource(resourceName); - if (entryName == null) { - entryName = resourceName; - } - addEntry(jarOut, url, entryName); - } - - private static void addEntry(JarOutputStream jarOut, URL url, String resourceName) throws IOException, - FileNotFoundException { - String path = url.getPath(); - - ZipEntry ze = new ZipEntry(resourceName); - - jarOut.putNextEntry(ze); - FileInputStream file = new FileInputStream(path); - byte[] fileContents = new byte[file.available()]; - file.read(fileContents); - jarOut.write(fileContents); - jarOut.closeEntry(); - file.close(); - } - - static URL generateCalculatorBundle() throws IOException { - return createBundle("target/test-classes/calculator-bundle.jar", - "calculator/dosgi/META-INF/MANIFEST.MF", - new String[][] { - { - "calculator/dosgi/OSGI-INF/remote-service/calculator-service-descriptions.xml", - "OSGI-INF/remote-service/calculator-service-descriptions.xml"}, - {"calculator/dosgi/OSGI-INF/calculator-component.xml", - "OSGI-INF/calculator-component.xml"}, - /* - {"calculator/dosgi/bundle.componentType", - "OSGI-INF/sca/bundle.componentType"}, - {"calculator/dosgi/calculator.composite", "OSGI-INF/sca/bundle.composite"}, - {"calculator/dosgi/META-INF/sca-contribution.xml", - "META-INF/sca-contribution.xml"} - */ - }, - CalculatorService.class, - // Package the interfaces so that the operations bundle can be remote - AddService.class, - SubtractService.class, - MultiplyService.class, - DivideService.class, - CalculatorServiceImpl.class, - CalculatorServiceDSImpl.class, - CalculatorActivator.class); - } - - /** - * Create the OSGi bundle for calculator SCA - * @return - * @throws IOException - */ - static URL generateCalculatorSCABundle() throws IOException { - return createBundle("target/test-classes/calculator-sca-bundle.jar", - "calculator/dosgi/sca/META-INF/MANIFEST.MF", - new String[][] { - {"calculator/dosgi/sca/OSGI-INF/sca/calculator.composite", - "OSGI-INF/sca/bundle.composite"}, - {"calculator/dosgi/sca/META-INF/sca-contribution.xml", - "META-INF/sca-contribution.xml"}, - {"calculator/dosgi/bundle.componentType", - "OSGI-INF/sca/calculator.dosgi/bundle.componentType"}, - {"calculator/dosgi/operations/bundle.componentType", - "OSGI-INF/sca/calculator.dosgi.operations/bundle.componentType"}, - }); - } - - /** - * Create the OSGi bundle for calculator operations - * @return - * @throws IOException - */ - static URL generateOperationsBundle() throws IOException { - return createBundle("target/test-classes/operations-bundle.jar", - "calculator/dosgi/operations/META-INF/MANIFEST.MF", - new String[][] { - {"calculator/dosgi/operations/OSGI-INF/add-component.xml", - "OSGI-INF/add-component.xml"}, - {"calculator/dosgi/operations/OSGI-INF/subtract-component.xml", - "OSGI-INF/subtract-component.xml"}, - {"calculator/dosgi/operations/OSGI-INF/multiply-component.xml", - "OSGI-INF/multiply-component.xml"}, - {"calculator/dosgi/operations/OSGI-INF/divide-component.xml", - "OSGI-INF/divide-component.xml"}, - /* - {"calculator/dosgi/operations/bundle.componentType", - "OSGI-INF/sca/bundle.componentType"}, - {"calculator/dosgi/operations/operations.composite", - "OSGI-INF/sca/bundle.composite"}, - {"calculator/dosgi/operations/META-INF/sca-contribution.xml", - "META-INF/sca-contribution.xml"} - */ - }, - OperationsActivator.class, - AddService.class, - AddServiceImpl.class, - SubtractService.class, - SubtractServiceImpl.class, - MultiplyService.class, - MultiplyServiceImpl.class, - DivideService.class, - DivideServiceImpl.class); - } - - /** - * Returns a string representation of the given bundle. - * - * @param b - * @param verbose - * @return - */ - public static String bundleStatus(Bundle bundle, boolean verbose) { - StringBuffer sb = new StringBuffer(); - sb.append(bundle.getBundleId()).append(" ").append(bundle.getSymbolicName()); - int s = bundle.getState(); - if ((s & Bundle.UNINSTALLED) != 0) { - sb.append(" UNINSTALLED"); - } - if ((s & Bundle.INSTALLED) != 0) { - sb.append(" INSTALLED"); - } - if ((s & Bundle.RESOLVED) != 0) { - sb.append(" RESOLVED"); - } - if ((s & Bundle.STARTING) != 0) { - sb.append(" STARTING"); - } - if ((s & Bundle.STOPPING) != 0) { - sb.append(" STOPPING"); - } - if ((s & Bundle.ACTIVE) != 0) { - sb.append(" ACTIVE"); - } - - if (verbose) { - sb.append(" ").append(bundle.getLocation()); - sb.append(" ").append(bundle.getHeaders()); - } - return sb.toString(); - } - - /** - * A utility to cast the object to the given interface. If the class for the object - * is loaded by a different classloader, a proxy will be created. - * - * @param - * @param obj - * @param cls - * @return - */ - public static T cast(Object obj, Class cls) { - if (cls.isInstance(obj)) { - return cls.cast(obj); - } else { - return cls.cast(Proxy.newProxyInstance(cls.getClassLoader(), - new Class[] {cls}, - new InvocationHandlerImpl(obj))); - } - } -} diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/META-INF/MANIFEST.MF b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/META-INF/MANIFEST.MF deleted file mode 100644 index 4b7b7ec71b..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/META-INF/MANIFEST.MF +++ /dev/null @@ -1,20 +0,0 @@ -Manifest-Version: 1.0 -Export-Package: calculator.dosgi;version="1.0.0", - calculator.dosgi.operations;version="1.0.0" -Bundle-Version: 1.0.0 -Bundle-Name: calculator.dosgi -Bundle-Activator: calculator.dosgi.impl.CalculatorActivator -Bundle-ManifestVersion: 2 -Import-Package: org.oasisopen.sca.annotation;version="2.0.0", - org.osgi.framework, - org.osgi.service.component;resolution:=optional, - org.osgi.service.packageadmin, - org.osgi.util.tracker -Bundle-SymbolicName: calculator.dosgi -Bundle-Vendor: The Apache Software Foundation -Bundle-ActivationPolicy: lazy -Eclipse-LazyStart: true -Bundle-License: http://www.apache.org/licenses/LICENSE-2.0.txt -Bundle-DocURL: http://www.apache.org/ -Service-Component: OSGI-INF/calculator-component.xml -Bundle-RequiredExecutionEnvironment: J2SE-1.5,JavaSE-1.6 diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/META-INF/sca-contribution.xml b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/META-INF/sca-contribution.xml deleted file mode 100644 index b48c048000..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/META-INF/sca-contribution.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/OSGI-INF/blueprint/calculator-module.xml b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/OSGI-INF/blueprint/calculator-module.xml deleted file mode 100644 index fd834e12ef..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/OSGI-INF/blueprint/calculator-module.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/OSGI-INF/calculator-component.xml b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/OSGI-INF/calculator-component.xml deleted file mode 100644 index 5daaa59aae..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/OSGI-INF/calculator-component.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/OSGI-INF/remote-service/calculator-service-descriptions.xml b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/OSGI-INF/remote-service/calculator-service-descriptions.xml deleted file mode 100644 index 8306fa9834..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/OSGI-INF/remote-service/calculator-service-descriptions.xml +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/bundle.componentType b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/bundle.componentType deleted file mode 100644 index 401809c197..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/bundle.componentType +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - - - - 1 - ABC - - - - - - - - 1 - ABC - - - - - - 1 - ABC - - - - - - 1 - ABC - - - - - - 1 - ABC - - - diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/calculator.composite b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/calculator.composite deleted file mode 100644 index 830c6867ed..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/calculator.composite +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/operations/META-INF/MANIFEST.MF b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/operations/META-INF/MANIFEST.MF deleted file mode 100644 index 2345c785a7..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/operations/META-INF/MANIFEST.MF +++ /dev/null @@ -1,22 +0,0 @@ -Manifest-Version: 1.0 -Export-Package: calculator.dosgi.operations;version="1.0.0" -Bundle-Version: 1.0.0 -Bundle-Name: calculator.dosgi.operations -Bundle-Activator: calculator.dosgi.operations.impl.OperationsActivator -Bundle-ManifestVersion: 2 -Import-Package: calculator.dosgi.operations;version="1.0.0", - org.oasisopen.sca.annotation;version="2.0.0", - org.osgi.framework, - org.osgi.service.component;resolution:=optional, - org.osgi.service.packageadmin -Bundle-SymbolicName: calculator.dosgi.operations -Bundle-Vendor: The Apache Software Foundation -Bundle-ActivationPolicy: lazy -Eclipse-LazyStart: true -Bundle-License: http://www.apache.org/licenses/LICENSE-2.0.txt -Bundle-DocURL: http://www.apache.org/ -Service-Component: OSGI-INF/add-component.xml, - OSGI-INF/subtract-component.xml, - OSGI-INF/multiply-component.xml, - OSGI-INF/divide-component.xml -Bundle-RequiredExecutionEnvironment: J2SE-1.5,JavaSE-1.6 diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/operations/META-INF/sca-contribution.xml b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/operations/META-INF/sca-contribution.xml deleted file mode 100644 index d24999ab3e..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/operations/META-INF/sca-contribution.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/operations/OSGI-INF/add-component.xml b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/operations/OSGI-INF/add-component.xml deleted file mode 100644 index 99845257ff..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/operations/OSGI-INF/add-component.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/operations/OSGI-INF/blueprint/operations-module.xml b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/operations/OSGI-INF/blueprint/operations-module.xml deleted file mode 100644 index f6b5f4690e..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/operations/OSGI-INF/blueprint/operations-module.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/operations/OSGI-INF/divide-component.xml b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/operations/OSGI-INF/divide-component.xml deleted file mode 100644 index 322d4daf2f..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/operations/OSGI-INF/divide-component.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/operations/OSGI-INF/multiply-component.xml b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/operations/OSGI-INF/multiply-component.xml deleted file mode 100644 index b9ca777bd8..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/operations/OSGI-INF/multiply-component.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/operations/OSGI-INF/subtract-component.xml b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/operations/OSGI-INF/subtract-component.xml deleted file mode 100644 index 1472f5a976..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/operations/OSGI-INF/subtract-component.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/operations/bundle.componentType b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/operations/bundle.componentType deleted file mode 100644 index fced5b7840..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/operations/bundle.componentType +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - - - 1 - ABC - - - - - - 1 - ABC - - - - - - 1 - ABC - - - - - - 1 - ABC - - - diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/operations/operations.composite b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/operations/operations.composite deleted file mode 100644 index c7250912b0..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/operations/operations.composite +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/sca/META-INF/MANIFEST.MF b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/sca/META-INF/MANIFEST.MF deleted file mode 100644 index 60dc54014a..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/sca/META-INF/MANIFEST.MF +++ /dev/null @@ -1,12 +0,0 @@ -Manifest-Version: 1.0 -Bundle-Version: 1.0.0 -Bundle-Name: calculator.dosgi.sca -Bundle-ManifestVersion: 2 -Bundle-SymbolicName: calculator.dosgi.sca -Bundle-Vendor: The Apache Software Foundation -Eclipse-LazyStart: false -Bundle-License: http://www.apache.org/licenses/LICENSE-2.0.txt -Bundle-DocURL: http://www.apache.org/ -Bundle-RequiredExecutionEnvironment: J2SE-1.5,JavaSE-1.6 -Import-Package: calculator.dosgi;version="1.0.0", - calculator.dosgi.operations;version="1.0.0" diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/sca/META-INF/sca-contribution.xml b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/sca/META-INF/sca-contribution.xml deleted file mode 100644 index b48c048000..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/sca/META-INF/sca-contribution.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/sca/OSGI-INF/sca/calculator.composite b/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/sca/OSGI-INF/sca/calculator.composite deleted file mode 100644 index 1be863568c..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/node-impl-osgi/src/test/resources/calculator/dosgi/sca/OSGI-INF/sca/calculator.composite +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- cgit v1.2.3