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