You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by jb...@apache.org on 2012/11/05 18:54:24 UTC
svn commit: r1405895 - in /karaf/cellar/trunk: assembly/src/main/resources/
bundle/src/main/java/org/apache/karaf/cellar/bundle/
bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/
Author: jbonofre
Date: Mon Nov 5 17:54:23 2012
New Revision: 1405895
URL: http://svn.apache.org/viewvc?rev=1405895&view=rev
Log:
[KARAF-1999] Fix classloader issue around BundleState
Modified:
karaf/cellar/trunk/assembly/src/main/resources/groups.cfg
karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleSynchronizer.java
karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/LocalBundleListener.java
karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/InstallBundleCommand.java
karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/ListBundleCommand.java
karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/StartBundleCommand.java
karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/StopBundleCommand.java
karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/UninstallBundleCommand.java
Modified: karaf/cellar/trunk/assembly/src/main/resources/groups.cfg
URL: http://svn.apache.org/viewvc/karaf/cellar/trunk/assembly/src/main/resources/groups.cfg?rev=1405895&r1=1405894&r2=1405895&view=diff
==============================================================================
--- karaf/cellar/trunk/assembly/src/main/resources/groups.cfg (original)
+++ karaf/cellar/trunk/assembly/src/main/resources/groups.cfg Mon Nov 5 17:54:23 2012
@@ -23,8 +23,8 @@ default.features.repositories.sync=true
default.bundle.whitelist.inbound=*
default.bundle.whitelist.outbound=*
-default.bundle.blacklist.inbound=none
-default.bundle.blacklist.outbound=none
+default.bundle.blacklist.inbound=*
+default.bundle.blacklist.outbound=*
default.bundle.sync=false
default.obr.urls.sync=true
Modified: karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleSynchronizer.java
URL: http://svn.apache.org/viewvc/karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleSynchronizer.java?rev=1405895&r1=1405894&r2=1405895&view=diff
==============================================================================
--- karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleSynchronizer.java (original)
+++ karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleSynchronizer.java Mon Nov 5 17:54:23 2012
@@ -117,7 +117,7 @@ public class BundleSynchronizer extends
if (group != null) {
String groupName = group.getName();
- Map<String, BundleState> bundleTable = clusterManager.getMap(Constants.BUNDLE_MAP + Configurations.SEPARATOR + groupName);
+ Map<String, BundleState> distributedBundles = clusterManager.getMap(Constants.BUNDLE_MAP + Configurations.SEPARATOR + groupName);
ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader();
try {
@@ -138,19 +138,36 @@ public class BundleSynchronizer extends
BundleState bundleState = new BundleState();
bundleState.setLocation(bundleLocation);
+
+ if (status == Bundle.ACTIVE)
+ status = BundleEvent.STARTED;
+ if (status == Bundle.INSTALLED)
+ status = BundleEvent.INSTALLED;
+ if (status == Bundle.RESOLVED)
+ status = BundleEvent.RESOLVED;
+ if (status == Bundle.STARTING)
+ status = BundleEvent.STARTING;
+ if (status == Bundle.UNINSTALLED)
+ status = BundleEvent.UNINSTALLED;
+ if (status == Bundle.STOPPING)
+ status = BundleEvent.STARTED;
+
bundleState.setStatus(status);
- BundleState existingState = bundleTable.get(id);
- RemoteBundleEvent event = null;
+ BundleState existingState = distributedBundles.get(id);
- if (existingState == null) {
+ if (existingState == null ||
+ !existingState.getLocation().equals(bundleState.getLocation()) ||
+ existingState.getStatus() != bundleState.getStatus()) {
// update the distributed map
- event = new RemoteBundleEvent(symbolicName, version, bundleLocation, status);
- bundleTable.put(id, bundleState);
+ distributedBundles.put(id, bundleState);
+
+ // broadcast the event
+ RemoteBundleEvent event = new RemoteBundleEvent(symbolicName, version, bundleLocation, status);
+ event.setSourceGroup(group);
+ eventProducer.produce(event);
}
- // broadcast the event
- eventProducer.produce(event);
} else LOGGER.warn("CELLAR BUNDLE: bundle {} is marked as BLOCKED OUTBOUND", bundleLocation);
}
} finally {
Modified: karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/LocalBundleListener.java
URL: http://svn.apache.org/viewvc/karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/LocalBundleListener.java?rev=1405895&r1=1405894&r2=1405895&view=diff
==============================================================================
--- karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/LocalBundleListener.java (original)
+++ karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/LocalBundleListener.java Mon Nov 5 17:54:23 2012
@@ -64,26 +64,34 @@ public class LocalBundleListener extends
int type = event.getType();
if (isAllowed(group, Constants.CATEGORY, bundleLocation, EventType.OUTBOUND)) {
- RemoteBundleEvent remoteBundleEvent = new RemoteBundleEvent(symbolicName, version, bundleLocation, type);
- remoteBundleEvent.setSourceGroup(group);
- // update the cluster map
- Map<String, BundleState> bundles = clusterManager.getMap(Constants.BUNDLE_MAP + Configurations.SEPARATOR + group.getName());
- if (type == BundleEvent.UNINSTALLED) {
- bundles.remove(symbolicName + "/" + version);
- } else {
- BundleState state = bundles.get(symbolicName + "/" + version);
- if (state == null) {
- state = new BundleState();
+ ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader();
+ Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
+
+ try {
+ // update the cluster map
+ Map<String, BundleState> bundles = clusterManager.getMap(Constants.BUNDLE_MAP + Configurations.SEPARATOR + group.getName());
+ if (type == BundleEvent.UNINSTALLED) {
+ bundles.remove(symbolicName + "/" + version);
+ } else {
+ BundleState state = bundles.get(symbolicName + "/" + version);
+ if (state == null) {
+ state = new BundleState();
+ }
+ state.setStatus(type);
+ state.setLocation(bundleLocation);
+ bundles.put(symbolicName + "/" + version, state);
}
- state.setStatus(type);
- state.setLocation(bundleLocation);
- bundles.put(symbolicName + "/" + version, state);
+
+ // broadcast the cluster event
+ RemoteBundleEvent remoteBundleEvent = new RemoteBundleEvent(symbolicName, version, bundleLocation, type);
+ remoteBundleEvent.setSourceGroup(group);
+ eventProducer.produce(remoteBundleEvent);
+ } finally {
+ Thread.currentThread().setContextClassLoader(originalClassLoader);
}
- // broadcast the cluster event
- eventProducer.produce(remoteBundleEvent);
- } else LOGGER.debug("CELLAR BUNDLE: bundle {} is marked as BLOCKED OUTBOUND", symbolicName);
+ } else LOGGER.warn("CELLAR BUNDLE: bundle {} is marked as BLOCKED OUTBOUND", bundleLocation);
}
}
}
Modified: karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/InstallBundleCommand.java
URL: http://svn.apache.org/viewvc/karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/InstallBundleCommand.java?rev=1405895&r1=1405894&r2=1405895&view=diff
==============================================================================
--- karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/InstallBundleCommand.java (original)
+++ karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/InstallBundleCommand.java Mon Nov 5 17:54:23 2012
@@ -80,8 +80,9 @@ public class InstallBundleCommand extend
jarInputStream.close();
ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader();
+ Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
+
try {
- Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
// populate the cluster map
Map<String, BundleState> bundles = clusterManager.getMap(Constants.BUNDLE_MAP + Configurations.SEPARATOR + groupName);
BundleState state = new BundleState();
Modified: karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/ListBundleCommand.java
URL: http://svn.apache.org/viewvc/karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/ListBundleCommand.java?rev=1405895&r1=1405894&r2=1405895&view=diff
==============================================================================
--- karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/ListBundleCommand.java (original)
+++ karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/ListBundleCommand.java Mon Nov 5 17:54:23 2012
@@ -48,6 +48,7 @@ public class ListBundleCommand extends C
ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader();
Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
+
try {
Map<String, BundleState> bundles = clusterManager.getMap(Constants.BUNDLE_MAP + Configurations.SEPARATOR + groupName);
if (bundles != null && !bundles.isEmpty()) {
Modified: karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/StartBundleCommand.java
URL: http://svn.apache.org/viewvc/karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/StartBundleCommand.java?rev=1405895&r1=1405894&r2=1405895&view=diff
==============================================================================
--- karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/StartBundleCommand.java (original)
+++ karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/StartBundleCommand.java Mon Nov 5 17:54:23 2012
@@ -61,6 +61,7 @@ public class StartBundleCommand extends
// update the distributed map
ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader();
Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
+
String location;
try {
Map<String, BundleState> bundles = clusterManager.getMap(Constants.BUNDLE_MAP + Configurations.SEPARATOR + groupName);
Modified: karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/StopBundleCommand.java
URL: http://svn.apache.org/viewvc/karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/StopBundleCommand.java?rev=1405895&r1=1405894&r2=1405895&view=diff
==============================================================================
--- karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/StopBundleCommand.java (original)
+++ karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/StopBundleCommand.java Mon Nov 5 17:54:23 2012
@@ -61,6 +61,7 @@ public class StopBundleCommand extends C
// update the cluster map
ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader();
Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
+
String location;
try {
Map<String, BundleState> bundles = clusterManager.getMap(Constants.BUNDLE_MAP + Configurations.SEPARATOR + groupName);
Modified: karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/UninstallBundleCommand.java
URL: http://svn.apache.org/viewvc/karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/UninstallBundleCommand.java?rev=1405895&r1=1405894&r2=1405895&view=diff
==============================================================================
--- karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/UninstallBundleCommand.java (original)
+++ karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/UninstallBundleCommand.java Mon Nov 5 17:54:23 2012
@@ -61,6 +61,7 @@ public class UninstallBundleCommand exte
// update the cluster map
ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader();
Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
+
String location;
try {
Map<String, BundleState> bundles = clusterManager.getMap(Constants.BUNDLE_MAP + Configurations.SEPARATOR + groupName);