You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by xu...@apache.org on 2010/04/13 02:53:03 UTC

svn commit: r933452 - in /geronimo/server/trunk: framework/modules/geronimo-deployment/src/main/java/org/apache/geronimo/deployment/ framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/ framework/modules/geronimo-kernel/sr...

Author: xuhaihong
Date: Tue Apr 13 00:53:02 2010
New Revision: 933452

URL: http://svn.apache.org/viewvc?rev=933452&view=rev
Log:
GERONIMO-4909 The changes just remove the bundle if we unload the car from ConfigurationManager

Modified:
    geronimo/server/trunk/framework/modules/geronimo-deployment/src/main/java/org/apache/geronimo/deployment/DeploymentConfigurationManager.java
    geronimo/server/trunk/framework/modules/geronimo-deployment/src/main/java/org/apache/geronimo/deployment/SingleFileHotDeployer.java
    geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/ConfigurationManager.java
    geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/SimpleConfigurationManager.java
    geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/osgi/BundleUtils.java
    geronimo/server/trunk/plugins/clustering/geronimo-plugin-farm/src/main/java/org/apache/geronimo/farm/plugin/FarmGBean.java
    geronimo/server/trunk/plugins/console/console-base-portlets/src/main/java/org/apache/geronimo/console/configmanager/ConfigManagerPortlet.java
    geronimo/server/trunk/plugins/wab/geronimo-web-extender/src/main/java/org/apache/geronimo/osgi/web/extender/WebApplication.java

Modified: geronimo/server/trunk/framework/modules/geronimo-deployment/src/main/java/org/apache/geronimo/deployment/DeploymentConfigurationManager.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-deployment/src/main/java/org/apache/geronimo/deployment/DeploymentConfigurationManager.java?rev=933452&r1=933451&r2=933452&view=diff
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-deployment/src/main/java/org/apache/geronimo/deployment/DeploymentConfigurationManager.java (original)
+++ geronimo/server/trunk/framework/modules/geronimo-deployment/src/main/java/org/apache/geronimo/deployment/DeploymentConfigurationManager.java Tue Apr 13 00:53:02 2010
@@ -168,11 +168,11 @@ public class DeploymentConfigurationMana
     // UNLOAD
     //
 
-    public synchronized LifecycleResults unloadConfiguration(Artifact id) throws NoSuchConfigException {
+    public synchronized LifecycleResults unloadConfiguration(Artifact id) throws NoSuchConfigException, LifecycleException {
         return super.unloadConfiguration(id);
     }
 
-    public synchronized LifecycleResults unloadConfiguration(Artifact id, LifecycleMonitor monitor) throws NoSuchConfigException {
+    public synchronized LifecycleResults unloadConfiguration(Artifact id, LifecycleMonitor monitor) throws NoSuchConfigException, LifecycleException {
         return super.unloadConfiguration(id, monitor);
     }
 

Modified: geronimo/server/trunk/framework/modules/geronimo-deployment/src/main/java/org/apache/geronimo/deployment/SingleFileHotDeployer.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-deployment/src/main/java/org/apache/geronimo/deployment/SingleFileHotDeployer.java?rev=933452&r1=933451&r2=933452&view=diff
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-deployment/src/main/java/org/apache/geronimo/deployment/SingleFileHotDeployer.java (original)
+++ geronimo/server/trunk/framework/modules/geronimo-deployment/src/main/java/org/apache/geronimo/deployment/SingleFileHotDeployer.java Tue Apr 13 00:53:02 2010
@@ -34,6 +34,7 @@ import org.apache.geronimo.kernel.config
 import org.apache.geronimo.kernel.config.ConfigurationManager;
 import org.apache.geronimo.kernel.config.ConfigurationStore;
 import org.apache.geronimo.kernel.config.InvalidConfigException;
+import org.apache.geronimo.kernel.config.LifecycleException;
 import org.apache.geronimo.kernel.config.NoSuchConfigException;
 import org.apache.geronimo.kernel.repository.Artifact;
 import org.apache.geronimo.kernel.repository.ArtifactResolver;
@@ -117,6 +118,8 @@ public class SingleFileHotDeployer {
                 configurationManager.unloadConfiguration(existingConfigurationId);
             } catch (NoSuchConfigException e) {
                 throw new DeploymentException("Unable to unload existing configuration " + existingConfigurationId);
+            } catch (LifecycleException e) {
+                throw new DeploymentException("Unable to unload existing configuration " + existingConfigurationId);
             }
         }
 

Modified: geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/ConfigurationManager.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/ConfigurationManager.java?rev=933452&r1=933451&r2=933452&view=diff
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/ConfigurationManager.java (original)
+++ geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/ConfigurationManager.java Tue Apr 13 00:53:02 2010
@@ -53,7 +53,7 @@ import org.osgi.framework.Bundle;
  * classes needed by the GBeanDatas in the configuration.  Once the
  * configuration has been loaded, it's ClassLoader is available so the
  * GBeanDatas can be loaded and inspected.  But the GBean instances are not
- * instantiated and started until the configuration is started. 
+ * instantiated and started until the configuration is started.
  *
  * @version $Rev$ $Date$
  */
@@ -275,8 +275,9 @@ public interface ConfigurationManager ex
      * @return the results of the operation
      *
      * @throws NoSuchConfigException if the configuration is not loaded
+     * @throws LifecycleException
      */
-    LifecycleResults unloadConfiguration(Artifact configurationId) throws NoSuchConfigException;
+    LifecycleResults unloadConfiguration(Artifact configurationId) throws NoSuchConfigException, LifecycleException;
 
     /**
      * Stops and unloads the configuration.  This causes all contained gbeans
@@ -293,8 +294,9 @@ public interface ConfigurationManager ex
      * @return the results of the operation
      *
      * @throws NoSuchConfigException if the configuration is not loaded
+     * @throws LifecycleException
      */
-    LifecycleResults unloadConfiguration(Artifact configurationId, LifecycleMonitor monitor) throws NoSuchConfigException;
+    LifecycleResults unloadConfiguration(Artifact configurationId, LifecycleMonitor monitor) throws NoSuchConfigException, LifecycleException;
 
     /**
      * Loads and starts all of the gbeans contained within the configuration.
@@ -480,11 +482,12 @@ public interface ConfigurationManager ex
      *
      * @param configurationId the configuration identifier, which must be fully
      *                        resolved (isResolved() == true)
-     * 
+     *
      * @throws IOException if there was a problem removing the configuration
      * @throws NoSuchConfigException if the configuration is not loaded
+     * @throws LifecycleException
      */
-    void uninstallConfiguration(Artifact configurationId) throws IOException, NoSuchConfigException;
+    void uninstallConfiguration(Artifact configurationId) throws IOException, NoSuchConfigException, LifecycleException;
 
     /**
      * Gets the common ArtifactResolver in case the caller wants to use this

Modified: geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/SimpleConfigurationManager.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/SimpleConfigurationManager.java?rev=933452&r1=933451&r2=933452&view=diff
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/SimpleConfigurationManager.java (original)
+++ geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/SimpleConfigurationManager.java Tue Apr 13 00:53:02 2010
@@ -43,10 +43,11 @@ import org.apache.geronimo.kernel.reposi
 import org.apache.geronimo.kernel.repository.MissingDependencyException;
 import org.apache.geronimo.kernel.repository.Repository;
 import org.apache.geronimo.kernel.repository.Version;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
+import org.osgi.framework.BundleException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * @version $Rev$ $Date$
@@ -348,26 +349,6 @@ public class SimpleConfigurationManager 
                 actuallyLoaded = new LinkedHashMap<Artifact, Configuration>(resolvedParents.size());
             }
             try {
-//                for (Artifact configurationId : resolvedParents) {
-//
-//                    monitor.loading(configurationId);
-//                    String bundleId = locateBundle(configurationId, monitor);
-//                    try {
-//                        Bundle parent = bundleContext.installBundle(bundleId);
-//                        if (parent.getSymbolicName() != null) {
-//                            try {
-//                                parent.start();
-//                                bundles.put(configurationId, parent);
-//                            } catch (BundleException e) {
-//                                log.info("failed to start bundle: " + parent, e);
-//                            }
-//                        }
-//                    } catch (BundleException e) {
-//                        log.info("failed to install bundle " + configurationId + ", message: " + e.getMessage());
-//                    }
-//                    monitor.succeeded(configurationId);
-//
-//                }
                 // update the status of the loaded configurations
                 Configuration configuration = load(configurationData, resolvedParents, actuallyLoaded);
                 actuallyLoaded.put(configurationData.getId(), configuration);
@@ -849,11 +830,11 @@ public class SimpleConfigurationManager 
         return results;
     }
 
-    public synchronized LifecycleResults unloadConfiguration(Artifact id) throws NoSuchConfigException {
+    public synchronized LifecycleResults unloadConfiguration(Artifact id) throws NoSuchConfigException, LifecycleException {
         return unloadConfiguration(id, NullLifecycleMonitor.INSTANCE);
     }
 
-    public synchronized LifecycleResults unloadConfiguration(Artifact id, LifecycleMonitor monitor) throws NoSuchConfigException {
+    public synchronized LifecycleResults unloadConfiguration(Artifact id, LifecycleMonitor monitor) throws NoSuchConfigException, LifecycleException {
         if (!id.isResolved()) {
             throw new IllegalArgumentException("Artifact " + id + " is not fully resolved");
         }
@@ -885,6 +866,21 @@ public class SimpleConfigurationManager 
 
             // clean up the model
             removeConfigurationFromModel(configurationId);
+
+            try {
+                Bundle bundle = bundles.remove(configurationId);
+                if (bundle != null) {
+                    if (BundleUtils.canStop(bundle)) {
+                        bundle.stop(Bundle.STOP_TRANSIENT);
+                    }
+                    if (BundleUtils.canUninstall(bundle)) {
+                        bundle.uninstall();
+                    }
+                }
+            } catch (BundleException e) {
+                monitor.finished();
+                throw new LifecycleException("unload", configurationId, e);
+            }
         }
         monitor.finished();
         return results;
@@ -1389,7 +1385,7 @@ public class SimpleConfigurationManager 
         return configuration.getDependencyNode().getParents();
     }
 
-    public synchronized void uninstallConfiguration(Artifact configurationId) throws IOException, NoSuchConfigException {
+    public synchronized void uninstallConfiguration(Artifact configurationId) throws IOException, NoSuchConfigException, LifecycleException {
         if (!configurationId.isResolved()) {
             throw new IllegalArgumentException("Artifact " + configurationId + " is not fully resolved");
         }
@@ -1403,6 +1399,7 @@ public class SimpleConfigurationManager 
         }
 
         uninstall(configurationId);
+
         for (ConfigurationStore store : getStoreList()) {
             if (store.containsConfiguration(configurationId)) {
                 store.uninstall(configurationId);

Modified: geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/osgi/BundleUtils.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/osgi/BundleUtils.java?rev=933452&r1=933451&r2=933452&view=diff
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/osgi/BundleUtils.java (original)
+++ geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/osgi/BundleUtils.java Tue Apr 13 00:53:02 2010
@@ -37,22 +37,30 @@ import org.osgi.service.packageadmin.Pac
  * @version $Rev$ $Date$
  */
 public class BundleUtils {
-   
+
     public static boolean canStart(Bundle bundle) {
-        return (bundle.getState() != Bundle.STARTING)  && (!isFragment(bundle));
+        return (bundle.getState() != Bundle.UNINSTALLED) && (bundle.getState() != Bundle.STARTING) && (!isFragment(bundle));
+    }
+
+    public static boolean canStop(Bundle bundle) {
+        return (bundle.getState() != Bundle.UNINSTALLED) && (bundle.getState() != Bundle.STOPPING) && (!isFragment(bundle));
     }
-    
+
+    public static boolean canUninstall(Bundle bundle) {
+        return bundle.getState() != Bundle.UNINSTALLED;
+    }
+
     public static boolean isFragment(Bundle bundle) {
         Dictionary headers = bundle.getHeaders();
         return (headers != null && headers.get(Constants.FRAGMENT_HOST) != null);
     }
-    
+
     /**
      * Returns bundle (if any) associated with current thread's context classloader.
-     * 
-     * @param unwrap if true and if the bundle associated with the context classloader is a 
-     *        {@link DelegatingBundle}, this function will return the main application bundle 
-     *        backing with the {@link DelegatingBundle}. Otherwise, the bundle associated with 
+     *
+     * @param unwrap if true and if the bundle associated with the context classloader is a
+     *        {@link DelegatingBundle}, this function will return the main application bundle
+     *        backing with the {@link DelegatingBundle}. Otherwise, the bundle associated with
      *        the context classloader is returned as is. See {@link BundleClassLoader#getBundle(boolean)}
      *        for more information.
      * @return The bundle associated with the current thread's context classloader. Might be null.
@@ -60,18 +68,18 @@ public class BundleUtils {
     public static Bundle getContextBundle(boolean unwrap) {
         ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
         if (classLoader instanceof BundleClassLoader) {
-            return ((BundleClassLoader) classLoader).getBundle(unwrap);        
+            return ((BundleClassLoader) classLoader).getBundle(unwrap);
         } else if (classLoader instanceof BundleReference) {
             return ((BundleReference) classLoader).getBundle();
         } else {
             return null;
         }
     }
-    
+
     /**
      * Works like {@link Bundle#getEntryPaths(String)} but also returns paths
      * in attached fragment bundles.
-     * 
+     *
      * @param bundle
      * @param name
      * @return
@@ -92,11 +100,11 @@ public class BundleUtils {
         }
         return Collections.enumeration(paths);
     }
-    
+
     /**
      * Works like {@link Bundle#getEntry(String)} but also checks
      * attached fragment bundles for the given entry.
-     * 
+     *
      * @param bundle
      * @param name
      * @return
@@ -105,7 +113,7 @@ public class BundleUtils {
         if (name.equals("/")) {
             return bundle.getEntry(name);
         } else if (name.endsWith("/")) {
-             name = name.substring(0, name.length() - 1);       
+            name = name.substring(0, name.length() - 1);
         }
         String path;
         String pattern;
@@ -127,20 +135,19 @@ public class BundleUtils {
             return null;
         }
     }
-    
+
     public static LinkedHashSet<Bundle> getWiredBundles(Bundle bundle) {
         ServiceReference reference = bundle.getBundleContext().getServiceReference(PackageAdmin.class.getName());
-        PackageAdmin packageAdmin = (PackageAdmin) bundle.getBundleContext().getService(reference);        
+        PackageAdmin packageAdmin = (PackageAdmin) bundle.getBundleContext().getService(reference);
         try {
             return getWiredBundles(packageAdmin, bundle);
         } finally {
             bundle.getBundleContext().ungetService(reference);
         }
     }
-    
+
     public static LinkedHashSet<Bundle> getWiredBundles(PackageAdmin packageAdmin, Bundle bundle) {
         BundleDescription description = new BundleDescription(bundle.getHeaders());
-        
         // handle static wire via Import-Package
         List<BundleDescription.ImportPackage> imports = description.getExternalImports();
         LinkedHashSet<Bundle> wiredBundles = new LinkedHashSet<Bundle>();
@@ -151,23 +158,21 @@ public class BundleUtils {
                 wiredBundles.add(wiredBundle);
             }
         }
-                
         // handle dynamic wire via DynamicImport-Package
         if (!description.getDynamicImportPackage().isEmpty()) {
             for (Bundle b : bundle.getBundleContext().getBundles()) {
                 if (!wiredBundles.contains(b)) {
                     ExportedPackage[] exports = packageAdmin.getExportedPackages(b);
-                    Bundle wiredBundle = getWiredBundle(bundle, exports); 
+                    Bundle wiredBundle = getWiredBundle(bundle, exports);
                     if (wiredBundle != null) {
                         wiredBundles.add(wiredBundle);
                     }
                 }
             }
         }
-        
         return wiredBundles;
     }
-    
+
     private static Bundle getWiredBundle(Bundle bundle, ExportedPackage[] exports) {
         if (exports != null) {
             for (ExportedPackage exportedPackage : exports) {
@@ -183,5 +188,4 @@ public class BundleUtils {
         }
         return null;
     }
-
 }

Modified: geronimo/server/trunk/plugins/clustering/geronimo-plugin-farm/src/main/java/org/apache/geronimo/farm/plugin/FarmGBean.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/clustering/geronimo-plugin-farm/src/main/java/org/apache/geronimo/farm/plugin/FarmGBean.java?rev=933452&r1=933451&r2=933452&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/clustering/geronimo-plugin-farm/src/main/java/org/apache/geronimo/farm/plugin/FarmGBean.java (original)
+++ geronimo/server/trunk/plugins/clustering/geronimo-plugin-farm/src/main/java/org/apache/geronimo/farm/plugin/FarmGBean.java Tue Apr 13 00:53:02 2010
@@ -39,6 +39,7 @@ import org.apache.geronimo.gbean.annotat
 import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;
 import org.apache.geronimo.kernel.config.ConfigurationManager;
 import org.apache.geronimo.kernel.config.NoSuchConfigException;
+import org.apache.geronimo.kernel.config.LifecycleException;
 import org.apache.geronimo.kernel.repository.Artifact;
 import org.apache.geronimo.persistence.PersistenceUnitGBean;
 import org.apache.geronimo.system.plugin.DownloadResults;
@@ -248,6 +249,8 @@ public class FarmGBean implements NodeLi
             downloadResults.setFailure(e);
         } catch (NoSuchConfigException e) {
             downloadResults.setFailure(e);
+        } catch (LifecycleException e) {
+            downloadResults.setFailure(e);
         }
         return downloadResults;
     }

Modified: geronimo/server/trunk/plugins/console/console-base-portlets/src/main/java/org/apache/geronimo/console/configmanager/ConfigManagerPortlet.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/console/console-base-portlets/src/main/java/org/apache/geronimo/console/configmanager/ConfigManagerPortlet.java?rev=933452&r1=933451&r2=933452&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/console/console-base-portlets/src/main/java/org/apache/geronimo/console/configmanager/ConfigManagerPortlet.java (original)
+++ geronimo/server/trunk/plugins/console/console-base-portlets/src/main/java/org/apache/geronimo/console/configmanager/ConfigManagerPortlet.java Tue Apr 13 00:53:02 2010
@@ -64,7 +64,7 @@ import org.slf4j.LoggerFactory;
 public class ConfigManagerPortlet extends BasePortlet {
 
     private static final Logger logger = LoggerFactory.getLogger(ConfigManagerPortlet.class);
-    
+
     private static final String START_ACTION = "start";
 
     private static final String STOP_ACTION = "stop";
@@ -76,7 +76,7 @@ public class ConfigManagerPortlet extend
     private static final String CONFIG_INIT_PARAM = "config-type";
 
     private static final String SHOW_DEPENDENCIES_COOKIE = "org.apache.geronimo.configmanager.showDependencies";
-    
+
     private Kernel kernel;
 
     private PortletRequestDispatcher normalView;
@@ -84,9 +84,9 @@ public class ConfigManagerPortlet extend
     private PortletRequestDispatcher maximizedView;
 
     private PortletRequestDispatcher helpView;
-    
+
     private boolean showDisplayName;
-    
+
     private String moduleType;
 
     private static List<String> loadChildren(Kernel kernel, String configName) {
@@ -203,14 +203,14 @@ public class ConfigManagerPortlet extend
         if (WindowState.MINIMIZED.equals(renderRequest.getWindowState())) {
             return;
         }
-              
+
         String cookies = renderRequest.getProperty("cookie");
-        boolean showDependencies = (cookies != null && cookies.indexOf(SHOW_DEPENDENCIES_COOKIE + "=true") > 0);        
-        
+        boolean showDependencies = (cookies != null && cookies.indexOf(SHOW_DEPENDENCIES_COOKIE + "=true") > 0);
+
         List<ModuleDetails> moduleDetails = new ArrayList<ModuleDetails>();
         ConfigurationManager configManager = PortletManager.getConfigurationManager();
         List<ConfigurationInfo> infos = configManager.listConfigurations();
-        for (ConfigurationInfo info : infos) {           
+        for (ConfigurationInfo info : infos) {
             if (ConfigurationModuleType.WAR.getName().equalsIgnoreCase(moduleType)) {
 
                 if (info.getType().getValue() == ConfigurationModuleType.WAR.getValue()) {
@@ -219,7 +219,7 @@ public class ConfigManagerPortlet extend
                         AbstractName configObjName = Configuration.getConfigurationAbstractName(info.getConfigID());
                         boolean loaded = loadModule(configManager, configObjName);
 
-                        WebModule webModule = (WebModule) PortletManager.getModule(renderRequest, info.getConfigID());                        
+                        WebModule webModule = (WebModule) PortletManager.getModule(renderRequest, info.getConfigID());
 
                         if (webModule != null) {
                             details.getContextPaths().add(webModule.getContextPath());
@@ -229,7 +229,7 @@ public class ConfigManagerPortlet extend
                         if (showDependencies) {
                             addDependencies(details, configObjName);
                         }
-                        
+
                         if (loaded) {
                             unloadModule(configManager, configObjName);
                         }
@@ -249,7 +249,7 @@ public class ConfigManagerPortlet extend
                                 if (child.getModuleType().getValue() == ConfigurationModuleType.WAR.getValue()) {
                                     ModuleDetails childDetails = new ModuleDetails(info.getConfigID(), child.getModuleType(), info.getState());
                                     childDetails.setComponentName(child.getId().toString());
-                                    WebModule webModule = getWebModule(config, child);                                    
+                                    WebModule webModule = getWebModule(config, child);
                                     if (webModule != null) {
                                         childDetails.getContextPaths().add(webModule.getContextPath());
                                         childDetails.setDisplayName(webModule.getDisplayName());
@@ -289,7 +289,7 @@ public class ConfigManagerPortlet extend
                                         details.getContextPaths().add(webModule.getContextPath());
                                     }
                                 }
-                            }                                            
+                            }
                         }
                     } else if (info.getType().equals(ConfigurationModuleType.CAR)) {
                         Configuration config = configManager.getConfiguration(info.getConfigID());
@@ -357,12 +357,12 @@ public class ConfigManagerPortlet extend
             AbstractName childName = new AbstractName(config.getAbstractName().getArtifact(), query1);
             return (WebModule)kernel.getGBean(childName);
         } catch(Exception h){
-            // No gbean found, will not happen 
+            // No gbean found, will not happen
             // Except if module not started, ignored
         }
         return null;
     }
-    
+
     private boolean loadModule(ConfigurationManager configManager, AbstractName configObjName) {
         if(!kernel.isLoaded(configObjName)) {
             try {
@@ -384,7 +384,7 @@ public class ConfigManagerPortlet extend
         }
         return false;
     }
-    
+
     private void addDependencies(ModuleDetails details, AbstractName configObjName) {
         DependencyManager depMgr = kernel.getDependencyManager();
         Set<AbstractName> parents = depMgr.getParents(configObjName);
@@ -401,21 +401,22 @@ public class ConfigManagerPortlet extend
         Collections.sort(details.getParents());
         Collections.sort(details.getChildren());
     }
-    
+
     private void unloadModule(ConfigurationManager configManager, AbstractName configObjName) {
         try {
             configManager.unloadConfiguration(configObjName.getArtifact());
         } catch (NoSuchConfigException e) {
-            // Should not occur
-            e.printStackTrace();
-        }        
+            logger.error("Fail to unload module " + configObjName, e);
+        }  catch (LifecycleException e) {
+            logger.error("Fail to unload module " + configObjName, e);
+        }
     }
-    
-    private boolean showWebInfo() {        
+
+    private boolean showWebInfo() {
         return ConfigurationModuleType.WAR.getName().equalsIgnoreCase(moduleType) ||
                ConfigurationModuleType.EAR.getName().equalsIgnoreCase(moduleType);
-    }    
-    
+    }
+
     protected void doHelp(RenderRequest renderRequest, RenderResponse renderResponse) throws PortletException, IOException {
         helpView.include(renderRequest, renderResponse);
     }
@@ -496,27 +497,27 @@ public class ConfigManagerPortlet extend
         public List<Artifact> getChildren() {
             return children;
         }
-        
+
         public List<String> getContextPaths() {
             return contextPaths;
-        }     
-        
+        }
+
         public String getComponentName(){
             return componentName;
         }
-        
+
         public void setComponentName(String name){
             componentName = name;
-        }       
-        
+        }
+
         public String getDisplayName(){
             return displayName;
         }
-        
+
         public void setDisplayName(String name){
             displayName = name;
         }
-        
+
         public void setClientAppServerSide(boolean clientAppServerSide) {
             this.clientAppServerSide = clientAppServerSide;
         }

Modified: geronimo/server/trunk/plugins/wab/geronimo-web-extender/src/main/java/org/apache/geronimo/osgi/web/extender/WebApplication.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/wab/geronimo-web-extender/src/main/java/org/apache/geronimo/osgi/web/extender/WebApplication.java?rev=933452&r1=933451&r2=933452&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/wab/geronimo-web-extender/src/main/java/org/apache/geronimo/osgi/web/extender/WebApplication.java (original)
+++ geronimo/server/trunk/plugins/wab/geronimo-web-extender/src/main/java/org/apache/geronimo/osgi/web/extender/WebApplication.java Tue Apr 13 00:53:02 2010
@@ -43,6 +43,7 @@ import org.apache.geronimo.kernel.Naming
 import org.apache.geronimo.kernel.config.ConfigurationData;
 import org.apache.geronimo.kernel.config.ConfigurationManager;
 import org.apache.geronimo.kernel.config.ConfigurationUtil;
+import org.apache.geronimo.kernel.config.LifecycleException;
 import org.apache.geronimo.kernel.config.NoSuchConfigException;
 import org.apache.geronimo.kernel.repository.Artifact;
 import org.osgi.framework.Bundle;
@@ -52,7 +53,7 @@ import org.slf4j.LoggerFactory;
 /**
  * An instance of a WAB deployed to an available Web Container
  * instance.
- * 
+ *
  * @version $Rev$, $Date$
  */
 public class WebApplication implements Runnable {
@@ -64,12 +65,12 @@ public class WebApplication implements R
     private final Bundle bundle;
     // the deployed context path from the bundle headers
     private final String contextPath;
-    
+
     private final AtomicBoolean scheduled = new AtomicBoolean();
     private final AtomicBoolean running = new AtomicBoolean();
-    
+
     private boolean destroyed;
-    
+
     private Artifact deployedArtifact;
 
     /**
@@ -83,13 +84,13 @@ public class WebApplication implements R
     public WebApplication(WebContainerExtender extender, Bundle bundle, String contextPath) {
         this.extender = extender;
         this.bundle = bundle;
-        this.contextPath = contextPath;       
+        this.contextPath = contextPath;
     }
 
     public String getContextPath() {
-        return contextPath;        
+        return contextPath;
     }
-    
+
     /**
      * Provide access to the bundle where the application resides.
      *
@@ -146,7 +147,7 @@ public class WebApplication implements R
     private void failed(Throwable cause) {
         extender.getEventDispatcher().failed(bundle, contextPath, cause);
     }
-    
+
     /**
      * This method must be called inside a synchronized block to ensure this method is not run concurrently
      */
@@ -158,13 +159,13 @@ public class WebApplication implements R
         try {
             // send out a broadcast alert that we're going to do this
             deploying();
-                       
+
             ConfigurationManager configurationManager = extender.getConfigurationManager();
-                        
+
             File configSer = bundle.getBundleContext().getDataFile("config.ser");
             if (configSer.exists() && configSer.lastModified() == bundle.getLastModified()) {
                 LOGGER.info("Redeploying WAB {} at {}", new Object[] {bundle, contextPath});
-                
+
                 FileInputStream in = new FileInputStream(configSer);
                 try {
                     configurationData = ConfigurationUtil.readConfigurationData(in);
@@ -173,17 +174,17 @@ public class WebApplication implements R
                 }
             } else {
                 LOGGER.info("Deploying WAB {} at {}", new Object[] {bundle, contextPath});
-                
+
                 ModuleIDBuilder idBuilder = new ModuleIDBuilder();
                 Kernel kernel = extender.getKernel();
                 Naming naming = kernel.getNaming();
-                ModuleBuilder webModuleBuilder = extender.getWebModuleBuilder();    
+                ModuleBuilder webModuleBuilder = extender.getWebModuleBuilder();
                 if (webModuleBuilder == null) {
                     throw new DeploymentException("Unable to deploy " + bundle + " WAB. No web module builders found.");
                 }
                 WebModule webModule = (WebModule) webModuleBuilder.createModule(bundle, naming, idBuilder);
 
-                BundleDeploymentContext deploymentContext = 
+                BundleDeploymentContext deploymentContext =
                     new BundleDeploymentContext(
                         webModule.getEnvironment(),
                         webModule.getType(),
@@ -204,11 +205,11 @@ public class WebApplication implements R
                 deploymentContext.initializeConfiguration();
 
                 webModuleBuilder.initContext(deploymentContext, webModule, bundle);
-                
+
                 AbstractName appJndiName = naming.createChildName(deploymentContext.getModuleName(), "ApplicationJndi", "ApplicationJndi");
                 deploymentContext.getGeneralData().put(EARContext.APPLICATION_JNDI_NAME_KEY, appJndiName);
-                
-                webModuleBuilder.addGBeans(deploymentContext, webModule, bundle, extender.getRepositories());     
+
+                webModuleBuilder.addGBeans(deploymentContext, webModule, bundle, extender.getRepositories());
 
                 Map<JndiKey, Map<String, Object>> contexts = NamingBuilder.JNDI_KEY.get(deploymentContext.getGeneralData());
                 GBeanData appContexts = new GBeanData(appJndiName, ApplicationJndi.class);
@@ -216,7 +217,7 @@ public class WebApplication implements R
                 appContexts.setAttribute("applicationContextMap", contexts.get(JndiScope.application));
                 appContexts.setReferencePattern("GlobalContext", extender.getGlobalContextAbstractName());
                 deploymentContext.addGBean(appContexts);
-                
+
                 configurationData = deploymentContext.getConfigurationData();
                 FileOutputStream out = new FileOutputStream(configSer);
                 try {
@@ -230,17 +231,17 @@ public class WebApplication implements R
                 // set config.ser last modified time to be of the bundle
                 configSer.setLastModified(bundle.getLastModified());
             }
-            
-            configurationData.setUseEnvironment(true);    
+
+            configurationData.setUseEnvironment(true);
             configurationData.setBundleContext(bundle.getBundleContext());
-            
+
             configurationManager.loadConfiguration(configurationData);
             configurationManager.startConfiguration(configurationData.getId());
 
             deployedArtifact = configurationData.getId();
-            
+
             LOGGER.info("Deployed WAB {} at {}", new Object[] {bundle, contextPath});
-            
+
             // send out the deployed event
             deployed();
         } catch (Throwable exception) {
@@ -255,7 +256,7 @@ public class WebApplication implements R
             extender.unregisterWebApplication(this);
         }
     }
-    
+
     private void undeploy(Artifact artifact) {
         ConfigurationManager configurationManager = extender.getConfigurationManager();
         try {
@@ -264,15 +265,16 @@ public class WebApplication implements R
             e.printStackTrace();
         } catch (NoSuchConfigException e) {
             // ignore
+        } catch (LifecycleException e) {
         }
     }
-    
+
     /**
      * Undeploy a web application.
      */
     public void undeploy() {
         destroyed = true;
-        
+
         synchronized (running) {
             while (running.get()) {
                 try {
@@ -282,21 +284,21 @@ public class WebApplication implements R
                 }
             }
         }
-        
+
         // send the undeploying event
         undeploying();
-        
+
         if (deployedArtifact != null) {
             LOGGER.info("Undeploying WAB {} at {}", new Object[] {bundle, contextPath});
             undeploy(deployedArtifact);
             LOGGER.info("Undeployed WAB {} at {}", new Object[] {bundle, contextPath});
         }
-        
+
         // finished with the undeploy operation
         undeployed();
-        
+
         // unregister the application and possibly let other WABs with the same ContextPath to deploy
-        extender.unregisterWebApplication(this);        
+        extender.unregisterWebApplication(this);
     }
 
 }