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/03/06 21:43:58 UTC

svn commit: r634410 - in /servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer: Component.java ServiceUnit.java impl/ComponentImpl.java impl/Deployer.java impl/ServiceAssemblyImpl.java impl/ServiceUnitImpl.java

Author: gnodet
Date: Thu Mar  6 12:43:55 2008
New Revision: 634410

URL: http://svn.apache.org/viewvc?rev=634410&view=rev
Log:
SMX4NMR-10: Stopping a component should stop SAs with SUs deployed onto it

Modified:
    servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/Component.java
    servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/ServiceUnit.java
    servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/ComponentImpl.java
    servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/Deployer.java
    servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/ServiceAssemblyImpl.java
    servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/ServiceUnitImpl.java

Modified: servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/Component.java
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/Component.java?rev=634410&r1=634409&r2=634410&view=diff
==============================================================================
--- servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/Component.java (original)
+++ servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/Component.java Thu Mar  6 12:43:55 2008
@@ -40,4 +40,9 @@
      * @return
      */
     javax.jbi.component.Component getComponent();
+
+    /**
+     * Retrieve the ServiceUnits deployed on this component 
+     */
+    ServiceUnit[] getServiceUnits();
 }

Modified: servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/ServiceUnit.java
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/ServiceUnit.java?rev=634410&r1=634409&r2=634410&view=diff
==============================================================================
--- servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/ServiceUnit.java (original)
+++ servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/ServiceUnit.java Thu Mar  6 12:43:55 2008
@@ -35,4 +35,16 @@
      */
     String getDescription();
 
+    /**
+     * Get the ServiceAssembly to which this ServiceUnit belongs
+     * @return
+     */
+    ServiceAssembly getServiceAssembly();
+
+    /**
+     * Retrieve the Component onto which this ServiceUnit is deployed
+     * @return
+     */
+    Component getComponent();
+
 }

Modified: servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/ComponentImpl.java
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/ComponentImpl.java?rev=634410&r1=634409&r2=634410&view=diff
==============================================================================
--- servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/ComponentImpl.java (original)
+++ servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/ComponentImpl.java Thu Mar  6 12:43:55 2008
@@ -16,6 +16,11 @@
  */
 package org.apache.servicemix.jbi.deployer.impl;
 
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
 import javax.jbi.JBIException;
 import javax.jbi.component.ComponentContext;
 import javax.jbi.component.ComponentLifeCycle;
@@ -28,19 +33,15 @@
 import org.w3c.dom.Document;
 import org.w3c.dom.DocumentFragment;
 
-import org.apache.servicemix.jbi.deployer.Component;
-import org.apache.servicemix.jbi.deployer.descriptor.ComponentDesc;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.servicemix.jbi.deployer.Component;
+import org.apache.servicemix.jbi.deployer.ServiceUnit;
+import org.apache.servicemix.jbi.deployer.descriptor.ComponentDesc;
 import org.osgi.service.prefs.BackingStoreException;
 import org.osgi.service.prefs.Preferences;
 
 /**
- * Created by IntelliJ IDEA.
- * User: gnodet
- * Date: Jan 3, 2008
- * Time: 5:15:57 PM
- * To change this template use File | Settings | File Templates.
  */
 public class ComponentImpl implements Component {
 
@@ -62,6 +63,7 @@
     private Preferences prefs;
     private State runningState;
     private Deployer deployer;
+    private List<ServiceUnitImpl> serviceUnits;
 
     public ComponentImpl(ComponentDesc componentDesc,
                          javax.jbi.component.Component component,
@@ -73,6 +75,19 @@
         this.prefs = prefs;
         this.runningState = State.valueOf(this.prefs.get(STATE, (autoStart ? State.Started : State.Initialized).name()));
         this.deployer = deployer;
+        this.serviceUnits = new ArrayList<ServiceUnitImpl>();
+    }
+
+    public void addServiceUnit(ServiceUnitImpl serviceUnit) {
+        serviceUnits.add(serviceUnit);
+    }
+
+    public void removeServiceUnit(ServiceUnitImpl serviceUnit) {
+        serviceUnits.remove(serviceUnit);
+    }
+
+    public ServiceUnit[] getServiceUnits() {
+        return serviceUnits.toArray(new ServiceUnit[serviceUnits.size()]);
     }
 
     public String getName() {
@@ -84,7 +99,7 @@
     }
 
     public ObjectName getExtensionMBeanName() throws JBIException {
-        return null;  //To change body of implemented methods use File | Settings | File Templates.
+        return component.getLifeCycle().getExtensionMBeanName();
     }
 
     public javax.jbi.component.Component getComponent() {
@@ -96,6 +111,7 @@
     }
 
     public void start(boolean saveState) throws JBIException {
+        LOGGER.info("Starting component " + getName());
         component.getLifeCycle().start();
         state = State.Started;
         if (saveState) {
@@ -105,12 +121,24 @@
 
     public void stop() throws JBIException {
         stop(true);
+    }
 
+    protected Set<ServiceAssemblyImpl> getServiceAssemblies() {
+        Set<ServiceAssemblyImpl> sas = new HashSet<ServiceAssemblyImpl>();
+        for (ServiceUnitImpl su : serviceUnits) {
+            sas.add(su.getServiceAssemblyImpl());
+        }
+        return sas;
     }
 
     public void stop(boolean saveState) throws JBIException {
-        // TODO: stop deployed SAs
+        LOGGER.info("Stopping component " + getName());
         if (state == State.Started) {
+            // Stop deployed SAs
+            for (ServiceAssemblyImpl sa : getServiceAssemblies()) {
+                sa.stop(false);
+            }
+            // Stop component
             component.getLifeCycle().stop();
             state = State.Stopped;
             if (saveState) {
@@ -124,11 +152,16 @@
     }
 
     public void shutDown(boolean saveState) throws JBIException {
-        // TODO: shutdown deployed SAs
+        LOGGER.info("Shutting down component " + getName());
         if (state == State.Started) {
             stop(saveState);
         }
         if (state == State.Stopped) {
+            // Shutdown deployed SAs
+            for (ServiceAssemblyImpl sa : getServiceAssemblies()) {
+                sa.shutDown(false);
+            }
+            // Shutdown component
             component.getLifeCycle().shutDown();
             state = State.Shutdown;
             if (saveState) {

Modified: servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/Deployer.java
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/Deployer.java?rev=634410&r1=634409&r2=634410&view=diff
==============================================================================
--- servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/Deployer.java (original)
+++ servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/Deployer.java Thu Mar  6 12:43:55 2008
@@ -49,12 +49,10 @@
 import org.apache.xbean.classloader.MultiParentClassLoader;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceReference;
 import org.osgi.framework.ServiceRegistration;
 import org.osgi.service.prefs.Preferences;
 import org.osgi.service.prefs.PreferencesService;
 import org.springframework.osgi.util.BundleDelegatingClassLoader;
-import org.springframework.osgi.util.OsgiServiceReferenceUtils;
 import org.springframework.osgi.util.OsgiStringUtils;
 
 /**
@@ -240,7 +238,7 @@
         // Check requirements
         for (ServiceUnitDesc sud : serviceAssembyDesc.getServiceUnits()) {
             String componentName = sud.getTarget().getComponentName();
-            Component component = getComponent(componentName);
+            ComponentImpl component = components.get(componentName);
             if (component == null) {
                 throw new PendingException(bundle, "Component not installed: " + componentName);
             }
@@ -265,7 +263,7 @@
             FileUtil.unpackArchive(zipUrl, suRootDir);
             // Find component
             String componentName = sud.getTarget().getComponentName();
-            Component component = getComponent(componentName);
+            ComponentImpl component = components.get(componentName);
             // Create service unit object
             ServiceUnitImpl su = new ServiceUnitImpl(sud, suRootDir, component);
             try {
@@ -370,16 +368,6 @@
             services.put(bundle, registrations);
         }
         registrations.add(reg);
-    }
-
-    protected Component getComponent(String name) {
-        String filter = "(" + NAME + "=" + name + ")";
-        BundleContext context = getBundleContext();
-        ServiceReference reference = OsgiServiceReferenceUtils.getServiceReference(context, Component.class.getName(), filter);
-        if (reference != null) {
-            return (Component) context.getService(reference);
-        }
-        return null;
     }
 
     protected ClassLoader createComponentClassLoader(ComponentDesc component, Bundle bundle) {

Modified: servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/ServiceAssemblyImpl.java
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/ServiceAssemblyImpl.java?rev=634410&r1=634409&r2=634410&view=diff
==============================================================================
--- servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/ServiceAssemblyImpl.java (original)
+++ servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/ServiceAssemblyImpl.java Thu Mar  6 12:43:55 2008
@@ -39,8 +39,6 @@
 
     private static final String STATE = "state";
 
-
-
     protected enum State {
         Unknown,
         Initialized,
@@ -67,7 +65,10 @@
         this.serviceUnits = serviceUnits;
         this.prefs = prefs;
         this.runningState = State.valueOf(this.prefs.get(STATE, (autoStart ? State.Started : State.Initialized).name()));
-	}
+        for (ServiceUnitImpl su : serviceUnits) {
+            su.setServiceAssemblyImpl(this);
+        }
+    }
 
 	public String getName() {
 		return serviceAssemblyDesc.getIdentification().getName();

Modified: servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/ServiceUnitImpl.java
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/ServiceUnitImpl.java?rev=634410&r1=634409&r2=634410&view=diff
==============================================================================
--- servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/ServiceUnitImpl.java (original)
+++ servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/ServiceUnitImpl.java Thu Mar  6 12:43:55 2008
@@ -25,7 +25,9 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.servicemix.jbi.deployer.Component;
+import org.apache.servicemix.jbi.deployer.ServiceAssembly;
 import org.apache.servicemix.jbi.deployer.ServiceUnit;
+import org.apache.servicemix.jbi.deployer.SharedLibrary;
 import org.apache.servicemix.jbi.deployer.descriptor.ServiceUnitDesc;
 
 
@@ -37,9 +39,11 @@
 	
 	private File rootDir;
 	
-	private Component component;
-	
-	public ServiceUnitImpl(ServiceUnitDesc serviceUnitDesc, File rootDir, Component component) {
+	private ComponentImpl component;
+
+    private ServiceAssemblyImpl serviceAssembly;
+
+    public ServiceUnitImpl(ServiceUnitDesc serviceUnitDesc, File rootDir, ComponentImpl component) {
 		this.serviceUnitDesc = serviceUnitDesc;
 		this.rootDir = rootDir;
         this.component = component;
@@ -61,12 +65,29 @@
 		return serviceUnitDesc.getTarget().getComponentName();
 	}
 
-	public File getRootDir() {
+    public ServiceAssembly getServiceAssembly() {
+        return serviceAssembly;
+    }
+
+    protected ServiceAssemblyImpl getServiceAssemblyImpl() {
+        return serviceAssembly;
+    }
+
+    protected void setServiceAssemblyImpl(ServiceAssemblyImpl serviceAssembly) {
+        this.serviceAssembly = serviceAssembly;
+    }
+
+    public Component getComponent() {
+        return component;
+    }
+
+    public File getRootDir() {
 		return rootDir;
 	}
 
     public void deploy() throws JBIException {
         component.getComponent().getServiceUnitManager().deploy(getName(), getRootDir().getAbsolutePath());
+        component.addServiceUnit(this);
     }
 
 	public void init() throws JBIException {
@@ -90,6 +111,7 @@
 
     public void undeploy() throws JBIException {
         component.getComponent().getServiceUnitManager().undeploy(getName(), getRootDir().getAbsolutePath());
+        component.removeServiceUnit(this);
     }
 
     protected void checkComponentStarted(String task) throws DeploymentException {