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();
}