You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by sa...@apache.org on 2008/06/24 11:50:18 UTC

svn commit: r671106 - in /webservices/axis2/trunk/java/modules/osgi/src/org/apache/axis2/osgi/deployment: ModuleRegistry.java OSGiAxis2Constants.java OSGiConfigurationContextFactory.java ServiceRegistry.java

Author: saminda
Date: Tue Jun 24 02:50:17 2008
New Revision: 671106

URL: http://svn.apache.org/viewvc?rev=671106&view=rev
Log:
Handling dynamic module stop properly. If service is engaged with a module (bundle) and if that moudle is stoped, 
then the associated service bundles also stoped to simulate the proper behavior. 

Modified:
    webservices/axis2/trunk/java/modules/osgi/src/org/apache/axis2/osgi/deployment/ModuleRegistry.java
    webservices/axis2/trunk/java/modules/osgi/src/org/apache/axis2/osgi/deployment/OSGiAxis2Constants.java
    webservices/axis2/trunk/java/modules/osgi/src/org/apache/axis2/osgi/deployment/OSGiConfigurationContextFactory.java
    webservices/axis2/trunk/java/modules/osgi/src/org/apache/axis2/osgi/deployment/ServiceRegistry.java

Modified: webservices/axis2/trunk/java/modules/osgi/src/org/apache/axis2/osgi/deployment/ModuleRegistry.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/osgi/src/org/apache/axis2/osgi/deployment/ModuleRegistry.java?rev=671106&r1=671105&r2=671106&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/osgi/src/org/apache/axis2/osgi/deployment/ModuleRegistry.java (original)
+++ webservices/axis2/trunk/java/modules/osgi/src/org/apache/axis2/osgi/deployment/ModuleRegistry.java Tue Jun 24 02:50:17 2008
@@ -16,18 +16,24 @@
 package org.apache.axis2.osgi.deployment;
 
 import org.apache.axis2.AxisFault;
+import org.apache.axis2.engine.AxisConfiguration;
 import org.apache.axis2.modules.Module;
 import org.apache.axis2.context.ConfigurationContext;
 import org.apache.axis2.deployment.DeploymentEngine;
 import org.apache.axis2.deployment.ModuleBuilder;
 import org.apache.axis2.description.AxisModule;
+import org.apache.axis2.description.AxisServiceGroup;
+import org.apache.axis2.description.AxisService;
+import org.apache.axis2.description.AxisOperation;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
+import org.osgi.framework.BundleException;
 
 import java.io.IOException;
 import java.net.URL;
-import java.util.Enumeration;
-import java.util.Dictionary;
+import java.util.*;
+
+import static org.apache.axis2.osgi.deployment.OSGiAxis2Constants.*;
 
 /**
  * @see org.osgi.framework.BundleListener
@@ -56,15 +62,58 @@
     public void unRegister(Bundle bundle) throws AxisFault {
         lock.lock();
         try {
+            List<Long> stopBundleList = new ArrayList<Long>();
             AxisModule module = resolvedBundles.get(bundle);
+            AxisConfiguration axisConfig = configCtx.getAxisConfiguration();
+            for (Iterator iterator = axisConfig.getServiceGroups();iterator.hasNext();){
+                AxisServiceGroup axisServiceGroup = (AxisServiceGroup)iterator.next();
+                if (axisServiceGroup.isEngaged(module))  {
+                    Long value = (Long)axisServiceGroup.getParameterValue(OSGi_BUNDLE_ID);
+                    if (value != null) {
+                        stopBundleList.add(value);
+                     }
+                }
+            }
+            HashMap serviceMap = axisConfig.getServices();
+            Collection values = serviceMap.values();
+            for (Object value1 : values) {
+                AxisService axisService = (AxisService) value1;
+                if (axisService.isEngaged(module)) {
+                    Long value = (Long) axisService.getParameterValue(OSGi_BUNDLE_ID);
+                    if (value != null && !stopBundleList.contains(value)) {
+                        stopBundleList.add(value);
+                    }
+                }
+                for (Iterator iterator1 = axisService.getOperations(); iterator1.hasNext();) {
+                    AxisOperation axisOperation = (AxisOperation) iterator1.next();
+                    if (axisOperation.isEngaged(module)) {
+                        Long value = (Long) axisOperation.getParameterValue(OSGi_BUNDLE_ID);
+                        if (value != null && !stopBundleList.contains(value)) {
+                            stopBundleList.add(value);
+                        }
+                    }
+                }
+            }
             if (module != null) {
                 resolvedBundles.remove(bundle);
-                configCtx.getAxisConfiguration()
+                axisConfig
                         .removeModule(module.getName(), module.getVersion());
                 System.out.println("[Axis2/OSGi] Stopping" + module.getName() + ":" +
                                    module.getVersion() + " moduel in Bundle - " +
                                    bundle.getSymbolicName());
             }
+            for (Long bundleId : stopBundleList) {
+                Bundle stopBundle = context.getBundle(bundleId);
+                if (stopBundle != null) {
+                    try {
+                        serviceRegistry.unRegister(bundle);
+                        stopBundle.stop();
+                    } catch (BundleException e) {
+                        String msg = "Error while stoping the bundle";
+                        //TODO; TBD; error msg.
+                    }
+                }
+            }
         } finally {
             lock.unlock();
         }

Modified: webservices/axis2/trunk/java/modules/osgi/src/org/apache/axis2/osgi/deployment/OSGiAxis2Constants.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/osgi/src/org/apache/axis2/osgi/deployment/OSGiAxis2Constants.java?rev=671106&r1=671105&r2=671106&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/osgi/src/org/apache/axis2/osgi/deployment/OSGiAxis2Constants.java (original)
+++ webservices/axis2/trunk/java/modules/osgi/src/org/apache/axis2/osgi/deployment/OSGiAxis2Constants.java Tue Jun 24 02:50:17 2008
@@ -25,4 +25,6 @@
     public static String PROTOCOL = "protocol";
 
     public static String  AXIS2_OSGi_ROOT_CONTEXT = "org.axis2.osgi.service.context.root";
+
+    public static String OSGi_BUNDLE_ID = "_OSGi_BUNDLE_ID_";
 }

Modified: webservices/axis2/trunk/java/modules/osgi/src/org/apache/axis2/osgi/deployment/OSGiConfigurationContextFactory.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/osgi/src/org/apache/axis2/osgi/deployment/OSGiConfigurationContextFactory.java?rev=671106&r1=671105&r2=671106&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/osgi/src/org/apache/axis2/osgi/deployment/OSGiConfigurationContextFactory.java (original)
+++ webservices/axis2/trunk/java/modules/osgi/src/org/apache/axis2/osgi/deployment/OSGiConfigurationContextFactory.java Tue Jun 24 02:50:17 2008
@@ -16,12 +16,12 @@
 package org.apache.axis2.osgi.deployment;
 
 import org.apache.axis2.AxisFault;
-import org.apache.axis2.deployment.util.Utils;
 import org.apache.axis2.context.ConfigurationContext;
 import org.apache.axis2.context.ConfigurationContextFactory;
+import org.apache.axis2.deployment.util.Utils;
+import org.apache.axis2.description.AxisService;
 import org.apache.axis2.description.Parameter;
 import org.apache.axis2.description.TransportInDescription;
-import org.apache.axis2.description.AxisService;
 import org.apache.axis2.engine.AxisConfigurator;
 import org.apache.axis2.engine.ListenerManager;
 import static org.apache.axis2.osgi.deployment.OSGiAxis2Constants.PROTOCOL;
@@ -30,9 +30,8 @@
 import org.osgi.framework.*;
 
 import java.util.Dictionary;
-import java.util.Properties;
-import java.util.Set;
 import java.util.Iterator;
+import java.util.Properties;
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantLock;
 

Modified: webservices/axis2/trunk/java/modules/osgi/src/org/apache/axis2/osgi/deployment/ServiceRegistry.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/osgi/src/org/apache/axis2/osgi/deployment/ServiceRegistry.java?rev=671106&r1=671105&r2=671106&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/osgi/src/org/apache/axis2/osgi/deployment/ServiceRegistry.java (original)
+++ webservices/axis2/trunk/java/modules/osgi/src/org/apache/axis2/osgi/deployment/ServiceRegistry.java Tue Jun 24 02:50:17 2008
@@ -21,7 +21,7 @@
 import org.apache.axis2.deployment.*;
 import org.apache.axis2.description.AxisService;
 import org.apache.axis2.description.AxisServiceGroup;
-import static org.apache.axis2.osgi.deployment.OSGiAxis2Constants.MODULE_NOT_FOUND_ERROR;
+import static org.apache.axis2.osgi.deployment.OSGiAxis2Constants.*;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 
@@ -91,6 +91,8 @@
                                        serviceGroup.getServiceGroupName() + " in Bundle: " +
                                        bundle.getSymbolicName());
                 }
+                //bundle Id keeps the association between bundle and axisService group for later use
+                serviceGroup.addParameter(OSGi_BUNDLE_ID, bundle.getBundleId());
                 resolvedBundles.put(bundle, serviceGroup);
                 //marked as resolved.
                 if (unreslovedBundles.contains(bundle)) {
@@ -126,21 +128,24 @@
             if (axisServiceGroup != null) {
                 resolvedBundles.remove(bundle);
                 try {
+                    for (Iterator iterator = axisServiceGroup.getServices(); iterator.hasNext();) {
+                        AxisService service = (AxisService) iterator.next();
+                        System.out.println("[Axis2/OSGi]      Service - " + service.getName());
+                    }
                     configCtx.getAxisConfiguration()
                             .removeServiceGroup(axisServiceGroup.getServiceGroupName());
                     System.out.println("[Axis2/OSGi] Stopping" +
                                        axisServiceGroup.getServiceGroupName() +
                                        " service group in Bundle - " +
                                        bundle.getSymbolicName());
-                    for (Iterator iterator = axisServiceGroup.getServices(); iterator.hasNext();) {
-                        AxisService service = (AxisService) iterator.next();
-                        System.out.println("[Axis2/OSGi]      Service - " + service.getName());
-                    }
                 } catch (AxisFault e) {
                     String msg = "Error while removing the service group";
                     throw new AxisFault(msg, e);
                 }
             }
+            if (unreslovedBundles.contains(bundle)) {
+                unreslovedBundles.remove(bundle);
+            }
         } finally {
             lock.unlock();
         }