You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by gn...@apache.org on 2008/10/03 14:45:04 UTC

svn commit: r701368 - in /servicemix/components/shared-libraries/trunk/servicemix-common: ./ src/main/java/org/apache/servicemix/common/osgi/ src/main/java/org/apache/servicemix/jbi/ src/main/java/org/apache/servicemix/jbi/deployer/

Author: gnodet
Date: Fri Oct  3 05:45:04 2008
New Revision: 701368

URL: http://svn.apache.org/viewvc?rev=701368&view=rev
Log:
SMX4NMR-24: JBI endpoints not using the JBI packaging should still abide by the JBI lifecycle to be able to cleanly shutdown a JBI application

Added:
    servicemix/components/shared-libraries/trunk/servicemix-common/src/main/java/org/apache/servicemix/jbi/
    servicemix/components/shared-libraries/trunk/servicemix-common/src/main/java/org/apache/servicemix/jbi/deployer/
    servicemix/components/shared-libraries/trunk/servicemix-common/src/main/java/org/apache/servicemix/jbi/deployer/DeployedAssembly.java
Modified:
    servicemix/components/shared-libraries/trunk/servicemix-common/pom.xml
    servicemix/components/shared-libraries/trunk/servicemix-common/src/main/java/org/apache/servicemix/common/osgi/EndpointExporter.java
    servicemix/components/shared-libraries/trunk/servicemix-common/src/main/java/org/apache/servicemix/common/osgi/EndpointTracker.java

Modified: servicemix/components/shared-libraries/trunk/servicemix-common/pom.xml
URL: http://svn.apache.org/viewvc/servicemix/components/shared-libraries/trunk/servicemix-common/pom.xml?rev=701368&r1=701367&r2=701368&view=diff
==============================================================================
--- servicemix/components/shared-libraries/trunk/servicemix-common/pom.xml (original)
+++ servicemix/components/shared-libraries/trunk/servicemix-common/pom.xml Fri Oct  3 05:45:04 2008
@@ -39,11 +39,15 @@
         org.apache.servicemix;resolution:=optional,
         org.apache.servicemix.jbi*;resolution:=optional,
         org.apache.servicemix.components*;resolution:=optional,
+        org.apache.servicemix.jbi.deployer;resolution:=optional,
         *
     </servicemix.osgi.import>
     <servicemix.osgi.export.pkg>
         org.apache.servicemix.common
     </servicemix.osgi.export.pkg>
+    <servicemix.osgi.private>
+        org.apache.servicemix.jbi.deployer
+    </servicemix.osgi.private>
   </properties>
 
   <dependencies>

Modified: servicemix/components/shared-libraries/trunk/servicemix-common/src/main/java/org/apache/servicemix/common/osgi/EndpointExporter.java
URL: http://svn.apache.org/viewvc/servicemix/components/shared-libraries/trunk/servicemix-common/src/main/java/org/apache/servicemix/common/osgi/EndpointExporter.java?rev=701368&r1=701367&r2=701368&view=diff
==============================================================================
--- servicemix/components/shared-libraries/trunk/servicemix-common/src/main/java/org/apache/servicemix/common/osgi/EndpointExporter.java (original)
+++ servicemix/components/shared-libraries/trunk/servicemix-common/src/main/java/org/apache/servicemix/common/osgi/EndpointExporter.java Fri Oct  3 05:45:04 2008
@@ -19,15 +19,19 @@
 import java.util.Dictionary;
 import java.util.Properties;
 import java.util.Collection;
+import java.util.Map;
+import java.util.HashMap;
 
 import org.apache.servicemix.common.Endpoint;
+import org.apache.servicemix.jbi.deployer.DeployedAssembly;
 import org.osgi.framework.BundleContext;
 import org.springframework.osgi.context.BundleContextAware;
 import org.springframework.beans.factory.InitializingBean;
+import org.springframework.beans.factory.DisposableBean;
 import org.springframework.context.ApplicationContextAware;
 import org.springframework.context.ApplicationContext;
 
-public class EndpointExporter implements BundleContextAware, ApplicationContextAware, InitializingBean {
+public class EndpointExporter implements BundleContextAware, ApplicationContextAware, InitializingBean, DisposableBean, DeployedAssembly {
 
     private BundleContext bundleContext;
     private ApplicationContext applicationContext;
@@ -45,16 +49,36 @@
         this.endpoints = endpoints;
     }
 
-    public void afterPropertiesSet() throws Exception {
+    public Collection<Endpoint> getEndpoints() {
         Collection<Endpoint> eps = this.endpoints;
         if (eps == null) {
             eps = this.applicationContext.getBeansOfType(Endpoint.class).values();
         }
+        return eps;
+    }
+
+    public String getName() {
+        return bundleContext.getBundle().getSymbolicName();
+    }
+
+    public Map<String, String> getServiceUnits() {
+        Map<String, String> sus = new HashMap<String, String>();
+        for (Endpoint ep : getEndpoints()) {
+            sus.put(ep.getServiceUnit().getName(), ep.getServiceUnit().getComponent().getComponentName());
+        }
+        return sus;
+    }
+
+    public void afterPropertiesSet() throws Exception {
+        Collection<Endpoint> eps = getEndpoints();
         for (Endpoint ep : eps) {
             EndpointWrapper wrapper = new EndpointWrapperImpl(ep, applicationContext.getClassLoader());
             Dictionary props = new Properties();
             bundleContext.registerService(EndpointWrapper.class.getName(), wrapper, props);
         }
+        bundleContext.registerService(DeployedAssembly.class.getName(), this, new Properties());
     }
 
+    public void destroy() throws Exception {
+    }
 }

Modified: servicemix/components/shared-libraries/trunk/servicemix-common/src/main/java/org/apache/servicemix/common/osgi/EndpointTracker.java
URL: http://svn.apache.org/viewvc/servicemix/components/shared-libraries/trunk/servicemix-common/src/main/java/org/apache/servicemix/common/osgi/EndpointTracker.java?rev=701368&r1=701367&r2=701368&view=diff
==============================================================================
--- servicemix/components/shared-libraries/trunk/servicemix-common/src/main/java/org/apache/servicemix/common/osgi/EndpointTracker.java (original)
+++ servicemix/components/shared-libraries/trunk/servicemix-common/src/main/java/org/apache/servicemix/common/osgi/EndpointTracker.java Fri Oct  3 05:45:04 2008
@@ -23,9 +23,7 @@
 
 import org.apache.servicemix.common.Endpoint;
 import org.apache.servicemix.common.DefaultComponent;
-import org.apache.servicemix.common.ServiceUnit;
 import org.apache.servicemix.common.DefaultServiceUnit;
-import org.apache.servicemix.id.IdGenerator;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
@@ -56,16 +54,6 @@
             OsgiServiceUnit su = new OsgiServiceUnit(component, endpoint, wrapper.getClassLoader());
             endpoints.put(wrapper, su);
             component.getRegistry().registerServiceUnit(su);
-            if (component.isStarted()) {
-                ClassLoader cl = Thread.currentThread().getContextClassLoader();
-                try {
-                    Thread.currentThread().setContextClassLoader(su.getConfigurationClassLoader());
-                    su.start();
-                } finally {
-                    Thread.currentThread().setContextClassLoader(cl);
-                }
-            }
-
         }
     }
 
@@ -79,31 +67,20 @@
             if (LOGGER.isDebugEnabled()) {
     	        LOGGER.debug("[" + component.getComponentName() + "] Endpoint recognized");
             }
-            try {
-                ClassLoader cl = Thread.currentThread().getContextClassLoader();
-                try {
-                    Thread.currentThread().setContextClassLoader(su.getConfigurationClassLoader());
-                    su.stop();
-                } finally {
-                    Thread.currentThread().setContextClassLoader(cl);
-                }
-            } finally {
-                component.getRegistry().unregisterServiceUnit(su);
-            }
+            component.getRegistry().unregisterServiceUnit(su);
         }
     }
 
     public static class OsgiServiceUnit extends DefaultServiceUnit {
-        private static final IdGenerator idGenerator = new IdGenerator();
         private final Endpoint endpoint;
         private final ClassLoader classLoader;
         public OsgiServiceUnit(DefaultComponent component, Endpoint endpoint, ClassLoader classLoader) throws DeploymentException {
             this.component = component;
-            this.name = idGenerator.generateSanitizedId();
             this.endpoint = endpoint;
             this.classLoader = classLoader;
             this.endpoint.setServiceUnit(this);
             this.endpoint.validate();
+            this.name = endpoint.getKey();
             addEndpoint(this.endpoint);
         }
         public Endpoint getEndpoint() {

Added: servicemix/components/shared-libraries/trunk/servicemix-common/src/main/java/org/apache/servicemix/jbi/deployer/DeployedAssembly.java
URL: http://svn.apache.org/viewvc/servicemix/components/shared-libraries/trunk/servicemix-common/src/main/java/org/apache/servicemix/jbi/deployer/DeployedAssembly.java?rev=701368&view=auto
==============================================================================
--- servicemix/components/shared-libraries/trunk/servicemix-common/src/main/java/org/apache/servicemix/jbi/deployer/DeployedAssembly.java (added)
+++ servicemix/components/shared-libraries/trunk/servicemix-common/src/main/java/org/apache/servicemix/jbi/deployer/DeployedAssembly.java Fri Oct  3 05:45:04 2008
@@ -0,0 +1,36 @@
+/*
+ * 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.servicemix.jbi.deployer;
+
+import java.util.Map;
+
+/**
+ * This interface should be used by service assemblies deployed using another packaging
+ * than the JBI packaging to be able to leverage the JBI life cycle.
+ *
+ * This file is a copy of the file from the ServiceMix 4 NMR project and can be removed
+ * once this project has been released.  The package is not exported from this OSGi bundle
+ * and it should be imported from the NMR project.
+ *
+ */
+public interface DeployedAssembly {
+
+    String getName();
+
+    Map<String, String> getServiceUnits();
+
+}