You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by ge...@apache.org on 2011/02/17 09:20:59 UTC

svn commit: r1071540 - in /geronimo/server/branches/3.0-M2: framework/modules/geronimo-deploy-jsr88/src/main/java/org/apache/geronimo/deployment/plugin/ framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/util/ plugins/aries/gero...

Author: genspring
Date: Thu Feb 17 08:20:59 2011
New Revision: 1071540

URL: http://svn.apache.org/viewvc?rev=1071540&view=rev
Log:
svn merge -c r1071532 https://svn.apache.org/repos/asf/geronimo/server/trunk . GERONIMO-5769 use OSGi API to operate WAB in portlet, suggestion from Jarek.

Added:
    geronimo/server/branches/3.0-M2/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/util/BundleUtil.java
      - copied unchanged from r1071532, geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/util/BundleUtil.java
Modified:
    geronimo/server/branches/3.0-M2/framework/modules/geronimo-deploy-jsr88/src/main/java/org/apache/geronimo/deployment/plugin/ConfigIDExtractor.java
    geronimo/server/branches/3.0-M2/plugins/aries/geronimo-aries-builder/src/main/java/org/apache/geronimo/aries/builder/ApplicationInstaller.java
    geronimo/server/branches/3.0-M2/plugins/console/console-base-portlets/src/main/java/org/apache/geronimo/console/configmanager/ConfigManagerPortlet.java
    geronimo/server/branches/3.0-M2/plugins/wab/geronimo-web-extender/src/main/java/org/apache/geronimo/osgi/web/extender/WebContainerExtender.java   (contents, props changed)

Modified: geronimo/server/branches/3.0-M2/framework/modules/geronimo-deploy-jsr88/src/main/java/org/apache/geronimo/deployment/plugin/ConfigIDExtractor.java
URL: http://svn.apache.org/viewvc/geronimo/server/branches/3.0-M2/framework/modules/geronimo-deploy-jsr88/src/main/java/org/apache/geronimo/deployment/plugin/ConfigIDExtractor.java?rev=1071540&r1=1071539&r2=1071540&view=diff
==============================================================================
--- geronimo/server/branches/3.0-M2/framework/modules/geronimo-deploy-jsr88/src/main/java/org/apache/geronimo/deployment/plugin/ConfigIDExtractor.java (original)
+++ geronimo/server/branches/3.0-M2/framework/modules/geronimo-deploy-jsr88/src/main/java/org/apache/geronimo/deployment/plugin/ConfigIDExtractor.java Thu Feb 17 08:20:59 2011
@@ -37,6 +37,7 @@ import javax.xml.parsers.SAXParserFactor
 import org.apache.geronimo.common.DeploymentException;
 import org.apache.geronimo.kernel.repository.Artifact;
 import org.apache.geronimo.kernel.repository.Version;
+import org.apache.geronimo.kernel.util.BundleUtil;
 import org.apache.geronimo.kernel.util.JarUtils;
 import org.apache.geronimo.kernel.util.XmlUtil;
 import org.slf4j.Logger;
@@ -268,18 +269,10 @@ public class ConfigIDExtractor {
         
         org.osgi.framework.Version version=new org.osgi.framework.Version(artifactVersion.trim());
 
-        return new Artifact("application", artifactID.trim(), getVersion(version), "eba").toString();
+        return new Artifact("application", artifactID.trim(), BundleUtil.getVersion(version), "eba").toString();
     } 
     
-    //copied from org.apache.geronimo.aries.builder.ApplicationInstaller.getVersion(Version)
-    private static String getVersion(org.osgi.framework.Version version) {
-        String str = version.getMajor() + "." + version.getMinor() + "." + version.getMicro();
-        String qualifier = version.getQualifier();
-        if (qualifier != null && qualifier.trim().length() > 0) {
-            str += "-" + version.getQualifier().trim();
-        }
-        return str;
-    }
+    
     
     private static String extractModuleIdFromPlan(Reader plan) throws IOException {
         SAXParserFactory factory = XmlUtil.newSAXParserFactory();

Modified: geronimo/server/branches/3.0-M2/plugins/aries/geronimo-aries-builder/src/main/java/org/apache/geronimo/aries/builder/ApplicationInstaller.java
URL: http://svn.apache.org/viewvc/geronimo/server/branches/3.0-M2/plugins/aries/geronimo-aries-builder/src/main/java/org/apache/geronimo/aries/builder/ApplicationInstaller.java?rev=1071540&r1=1071539&r2=1071540&view=diff
==============================================================================
--- geronimo/server/branches/3.0-M2/plugins/aries/geronimo-aries-builder/src/main/java/org/apache/geronimo/aries/builder/ApplicationInstaller.java (original)
+++ geronimo/server/branches/3.0-M2/plugins/aries/geronimo-aries-builder/src/main/java/org/apache/geronimo/aries/builder/ApplicationInstaller.java Thu Feb 17 08:20:59 2011
@@ -42,6 +42,7 @@ import org.apache.geronimo.kernel.config
 import org.apache.geronimo.kernel.config.ConfigurationUtil;
 import org.apache.geronimo.kernel.repository.Artifact;
 import org.apache.geronimo.kernel.repository.Environment;
+import org.apache.geronimo.kernel.util.BundleUtil;
 import org.apache.geronimo.kernel.util.FileUtils;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceRegistration;
@@ -173,20 +174,8 @@ public class ApplicationInstaller implem
     }
             
     public static Artifact getConfigId(ApplicationMetadata metadata) {
-        return createArtifact("application", metadata.getApplicationSymbolicName(), metadata.getApplicationVersion());
+        return BundleUtil.createArtifact("application", metadata.getApplicationSymbolicName(), metadata.getApplicationVersion());
     }
     
-    private static Artifact createArtifact(String group, String symbolicName, Version version) {
-        return new Artifact(group, symbolicName, getVersion(version), "eba");
-    }
-    
-    private static String getVersion(Version version) {
-        String str = version.getMajor() + "." + version.getMinor() + "." + version.getMicro();
-        String qualifier = version.getQualifier();
-        if (qualifier != null && qualifier.trim().length() > 0) {
-            str += "-" + version.getQualifier().trim();
-        }
-        return str;
-    }
     
 }

Modified: geronimo/server/branches/3.0-M2/plugins/console/console-base-portlets/src/main/java/org/apache/geronimo/console/configmanager/ConfigManagerPortlet.java
URL: http://svn.apache.org/viewvc/geronimo/server/branches/3.0-M2/plugins/console/console-base-portlets/src/main/java/org/apache/geronimo/console/configmanager/ConfigManagerPortlet.java?rev=1071540&r1=1071539&r2=1071540&view=diff
==============================================================================
--- geronimo/server/branches/3.0-M2/plugins/console/console-base-portlets/src/main/java/org/apache/geronimo/console/configmanager/ConfigManagerPortlet.java (original)
+++ geronimo/server/branches/3.0-M2/plugins/console/console-base-portlets/src/main/java/org/apache/geronimo/console/configmanager/ConfigManagerPortlet.java Thu Feb 17 08:20:59 2011
@@ -31,6 +31,7 @@ import javax.portlet.ActionRequest;
 import javax.portlet.ActionResponse;
 import javax.portlet.PortletConfig;
 import javax.portlet.PortletException;
+import javax.portlet.PortletRequest;
 import javax.portlet.PortletRequestDispatcher;
 import javax.portlet.RenderRequest;
 import javax.portlet.RenderResponse;
@@ -57,7 +58,10 @@ import org.apache.geronimo.kernel.config
 import org.apache.geronimo.kernel.management.State;
 import org.apache.geronimo.kernel.repository.Artifact;
 import org.apache.geronimo.kernel.repository.MissingDependencyException;
+import org.apache.geronimo.kernel.util.BundleUtil;
 import org.apache.geronimo.management.geronimo.WebModule;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -76,7 +80,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;
@@ -144,34 +148,77 @@ public class ConfigManagerPortlet extend
     public void processAction(ActionRequest actionRequest, ActionResponse actionResponse) throws PortletException, IOException {
         String action = actionRequest.getParameter("action");
         actionResponse.setRenderParameter("message", ""); // set to blank first
+        
         try {
             ConfigurationManager configurationManager = ConfigurationUtil.getConfigurationManager(kernel);
             String config = getConfigID(actionRequest);
             Artifact configId = Artifact.create(config);
+            
+            boolean isWAB = configId.getType().equalsIgnoreCase(ConfigurationModuleType.WAB.getName());
+            
+            Bundle wabBundle=null;
+            
+            if (isWAB){
+                
+                wabBundle= this.getWABbundle(actionRequest,configId);
+            }
 
             if (START_ACTION.equals(action)) {
-                if(!configurationManager.isLoaded(configId)) {
-                    configurationManager.loadConfiguration(configId);
-                }
-                if(!configurationManager.isRunning(configId)) {
-                    org.apache.geronimo.kernel.config.LifecycleResults lcresult = configurationManager.startConfiguration(configId);
-                    addInfoMessage(actionRequest, getLocalizedString(actionRequest, "consolebase.infoMsg01") + printResults(lcresult.getStarted()));
+
+                if (isWAB && wabBundle!=null) {
+                    wabBundle.start();
+                } else {
+                    
+                    if (!configurationManager.isLoaded(configId)) {
+                        configurationManager.loadConfiguration(configId);
+                    }
+                    if (!configurationManager.isRunning(configId)) {
+                        org.apache.geronimo.kernel.config.LifecycleResults lcresult = configurationManager
+                                .startConfiguration(configId);
+                        addInfoMessage(actionRequest, getLocalizedString(actionRequest, "consolebase.infoMsg01")
+                                + printResults(lcresult.getStarted()));
+                    }
                 }
+
             } else if (STOP_ACTION.equals(action)) {
-                if(configurationManager.isLoaded(configId)) {
-                    LifecycleResults lcresult = configurationManager.unloadConfiguration(configId);
-                    addInfoMessage(actionRequest, getLocalizedString(actionRequest, "consolebase.infoMsg02") + printResults(lcresult.getStopped()));
+                
+                if (isWAB && wabBundle!=null) {
+                    wabBundle.stop();
+                    addInfoMessage(actionRequest, getLocalizedString(actionRequest, "consolebase.infoMsg02"));
+                } else {
+                
+                    if(configurationManager.isLoaded(configId)) {
+                        LifecycleResults lcresult = configurationManager.unloadConfiguration(configId);
+                        addInfoMessage(actionRequest, getLocalizedString(actionRequest, "consolebase.infoMsg02") + printResults(lcresult.getStopped()));
+                    }
                 }
+                
             } else if (UNINSTALL_ACTION.equals(action)) {
-                configurationManager.uninstallConfiguration(configId);
+                
+                if (isWAB && wabBundle!=null) {
+                    wabBundle.uninstall();
+                } else {
+                    configurationManager.uninstallConfiguration(configId);
+                }
+                
                 addInfoMessage(actionRequest, getLocalizedString(actionRequest, "consolebase.infoMsg04") + "<br />" + configId);
+                
             } else if (RESTART_ACTION.equals(action)) {
-                LifecycleResults lcresult = configurationManager.restartConfiguration(configId);
-                addInfoMessage(actionRequest, getLocalizedString(actionRequest, "consolebase.infoMsg03") + printResults(lcresult.getStarted()));
+                
+                if (isWAB && wabBundle!=null) {
+                    wabBundle.stop();
+                    wabBundle.start();
+                    addInfoMessage(actionRequest, getLocalizedString(actionRequest, "consolebase.infoMsg03"));
+                } else {
+                    LifecycleResults lcresult = configurationManager.restartConfiguration(configId);
+                    addInfoMessage(actionRequest, getLocalizedString(actionRequest, "consolebase.infoMsg03") + printResults(lcresult.getStarted()));
+                }
+                
             } else {
                 addWarningMessage(actionRequest, getLocalizedString(actionRequest, "consolebase.warnMsg01") + action + "<br />");
                 throw new PortletException("Invalid value for changeState: " + action);
             }
+            
         } catch (NoSuchConfigException e) {
             // ignore this for now
             addErrorMessage(actionRequest, getLocalizedString(actionRequest, "consolebase.errorMsg01"));
@@ -185,6 +232,36 @@ public class ConfigManagerPortlet extend
             logger.error("Exception", e);
         }
     }
+    
+    
+    private BundleContext getBundleContext(PortletRequest request) {
+        return (BundleContext) request.getPortletSession().getPortletContext().getAttribute("osgi-bundlecontext");
+    }
+    
+    private Bundle getWABbundle(PortletRequest request, Artifact configId) {
+
+        Bundle[] bundles = getBundleContext(request).getBundles();
+
+        String symboleName = configId.getArtifactId();
+
+        String version = configId.getVersion().toString();
+
+        for (Bundle bundle : bundles) {
+            String contextPath = (String) bundle.getHeaders().get(BundleUtil.WEB_CONTEXT_PATH_HEADER);
+            // a WAB MUST have the Web-ContextPath header
+            if (contextPath != null && bundle.getSymbolicName().equals(symboleName)
+                    && BundleUtil.getVersion(bundle.getVersion()).equals(version)) {
+
+                return bundle;
+            }
+
+        }
+
+        return null;
+
+    }
+    
+
 
     /**
      * Check if a configuration should be listed here. This method depends on the "config-type" portlet parameter
@@ -314,40 +391,22 @@ public class ConfigManagerPortlet extend
             // hack to display WAB because WAB can't be get from configManager.listConfigurations();
             
         if (ConfigurationModuleType.WAB.getName().equalsIgnoreCase(moduleType)) {
-            
-            Artifact wabQuery = Artifact.createPartial("///" + ConfigurationModuleType.WAB.getName().toLowerCase());
-
-            Artifact[] runningWABs = configManager.getRunning(wabQuery);
-
-            if (runningWABs != null && runningWABs.length > 0) {
-
-                for (Artifact wab : runningWABs) {
-                    ModuleDetails details = new ModuleDetails(wab, ConfigurationModuleType.WAB, State.RUNNING);
-                    try {
-                        AbstractName configObjName = Configuration.getConfigurationAbstractName(wab);
-                        boolean loaded = loadModule(configManager, configObjName);
-
-                        WebModule webModule = (WebModule) PortletManager.getModule(renderRequest, wab);
 
-                        if (webModule != null) {
-                            details.getContextPaths().add(webModule.getContextPath());
-                            details.setDisplayName(webModule.getDisplayName());
-                        }
+            Bundle[] bundles = getBundleContext(renderRequest).getBundles();
 
-                        if (showDependencies) {
-                            addDependencies(details, configObjName);
-                        }
-                        if (loaded) {
-                            unloadModule(configManager, configObjName);
-                        }
-                    } catch (InvalidConfigException ice) {
-                        // Should not occur
-                        ice.printStackTrace();
-                    }
+            for (Bundle bundle : bundles) {
+                String contextPath = (String) bundle.getHeaders().get(BundleUtil.WEB_CONTEXT_PATH_HEADER);
+                // a WAB MUST have the Web-ContextPath header
+                if (contextPath != null) {
+                    Artifact wabArtifact=new Artifact("",bundle.getSymbolicName(),BundleUtil.getVersion(bundle.getVersion()),ConfigurationModuleType.WAB.getName().toLowerCase());
+                    ModuleDetails details = new ModuleDetails(wabArtifact, ConfigurationModuleType.WAB, getWABStateFromBundleState(bundle));
+                    details.getContextPaths().add(contextPath);
+                    details.setDisplayName(bundle.getSymbolicName());
                     moduleDetails.add(details);
                 }
-
+        
             }
+            
         }
 
         
@@ -389,6 +448,27 @@ public class ConfigManagerPortlet extend
         }
         return configurationState;
     }
+    
+    private State getWABStateFromBundleState(Bundle bundle) {
+
+        int state = bundle.getState();
+
+        switch (state) {
+
+        case Bundle.ACTIVE:
+            return State.RUNNING;
+
+        case Bundle.STARTING:
+            return State.STARTING;
+
+        case Bundle.STOPPING:
+            return State.STOPPING;
+
+        default:
+            return State.STOPPED;
+        }
+
+    }
 
     private WebModule getWebModule(Configuration config, Configuration child) {
         try {
@@ -487,7 +567,7 @@ public class ConfigManagerPortlet extend
      * Convenience data holder for portlet that displays deployed modules.
      * Includes context path information for web modules.
      */
-    public static class ModuleDetails implements Comparable, Serializable {
+    public static class ModuleDetails implements Comparable<ModuleDetails>, Serializable {
         private static final long serialVersionUID = -7022687152297202079L;
         private final Artifact configId;
         private final ConfigurationModuleType type;
@@ -505,14 +585,14 @@ public class ConfigManagerPortlet extend
             this.configId = configId;
             this.type = type;
             this.state = state;
-            if (configId.toString().indexOf("org.apache.geronimo.configs/") == 0) {
+            if (configId.toString().indexOf("org.apache.geronimo.configs/") == 0 || configId.toString().indexOf("org.apache.geronimo.plugins/") == 0) {
                 this.expertConfig = true;
             }
         }
 
-        public int compareTo(Object o) {
-            if (o != null && o instanceof ModuleDetails){
-                return configId.compareTo(((ModuleDetails)o).configId);
+        public int compareTo(ModuleDetails o) {
+            if (o != null ){
+                return configId.compareTo(o.configId);
             } else {
                 return -1;
             }

Modified: geronimo/server/branches/3.0-M2/plugins/wab/geronimo-web-extender/src/main/java/org/apache/geronimo/osgi/web/extender/WebContainerExtender.java
URL: http://svn.apache.org/viewvc/geronimo/server/branches/3.0-M2/plugins/wab/geronimo-web-extender/src/main/java/org/apache/geronimo/osgi/web/extender/WebContainerExtender.java?rev=1071540&r1=1071539&r2=1071540&view=diff
==============================================================================
--- geronimo/server/branches/3.0-M2/plugins/wab/geronimo-web-extender/src/main/java/org/apache/geronimo/osgi/web/extender/WebContainerExtender.java (original)
+++ geronimo/server/branches/3.0-M2/plugins/wab/geronimo-web-extender/src/main/java/org/apache/geronimo/osgi/web/extender/WebContainerExtender.java Thu Feb 17 08:20:59 2011
@@ -43,6 +43,7 @@ import org.apache.geronimo.kernel.config
 import org.apache.geronimo.kernel.config.ConfigurationUtil;
 import org.apache.geronimo.kernel.repository.Environment;
 import org.apache.geronimo.kernel.repository.Repository;
+import org.apache.geronimo.kernel.util.BundleUtil;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.BundleEvent;
@@ -60,8 +61,7 @@ import org.slf4j.LoggerFactory;
  */
 @GBean
 public class WebContainerExtender implements GBeanLifecycle {
-    // the header that identifies a bundle as being a WAB
-    public final static String WEB_CONTEXT_PATH_HEADER = "Web-ContextPath";
+
 
     private static final Logger LOGGER = LoggerFactory.getLogger(WebContainerExtender.class);
 
@@ -243,7 +243,7 @@ public class WebContainerExtender implem
      */
     private WebApplication deploy(Bundle bundle) {
         LOGGER.debug("Scanning bundle {} for WAB application", bundle.getSymbolicName());
-        String contextPath = (String) bundle.getHeaders().get(WEB_CONTEXT_PATH_HEADER);
+        String contextPath = (String) bundle.getHeaders().get(BundleUtil.WEB_CONTEXT_PATH_HEADER);
         // a WAB MUST have the Web-ContextPath header or it must be ignored by the extender.
         if (contextPath == null) {
             LOGGER.debug("No web container application found in bundle {}", bundle.getSymbolicName());

Propchange: geronimo/server/branches/3.0-M2/plugins/wab/geronimo-web-extender/src/main/java/org/apache/geronimo/osgi/web/extender/WebContainerExtender.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Feb 17 08:20:59 2011
@@ -1,4 +1,4 @@
 /geronimo/server/branches/2.2/plugins/wab/geronimo-web-extender/src/main/java/org/apache/geronimo/osgi/web/WebContainerExtender.java:832538,885058
 /geronimo/server/branches/3.0-M1/plugins/wab/geronimo-web-extender/src/main/java/org/apache/geronimo/osgi/web/extender/WebContainerExtender.java:948864,951792
 /geronimo/server/trunk/plugins/j2ee/wab/geronimo-web-extender/src/main/java/org/apache/geronimo/osgi/web/WebContainerExtender.java:887507
-/geronimo/server/trunk/plugins/wab/geronimo-web-extender/src/main/java/org/apache/geronimo/osgi/web/extender/WebContainerExtender.java:1056676,1057959-1057962,1064377,1064432-1064433,1071183
+/geronimo/server/trunk/plugins/wab/geronimo-web-extender/src/main/java/org/apache/geronimo/osgi/web/extender/WebContainerExtender.java:1056676,1057959-1057962,1064377,1064432-1064433,1071183,1071532