You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by ha...@apache.org on 2011/11/15 03:59:52 UTC

svn commit: r1202017 - in /geronimo/devtools/eclipse-plugin/branches/3.0-beta-1/plugins/org.apache.geronimo.st.v30.core/src/main/java/org/apache/geronimo/st/v30/core: DeploymentUtils.java GeronimoServerBehaviourDelegate.java

Author: hanhongfang
Date: Tue Nov 15 02:59:51 2011
New Revision: 1202017

URL: http://svn.apache.org/viewvc?rev=1202017&view=rev
Log:
Revert patch of GERONIMODEVTOOLS-771: Support for class hot swap for OSGi applications since the counterpart patch in server doesn't go into server v3.0-beta-1

Modified:
    geronimo/devtools/eclipse-plugin/branches/3.0-beta-1/plugins/org.apache.geronimo.st.v30.core/src/main/java/org/apache/geronimo/st/v30/core/DeploymentUtils.java
    geronimo/devtools/eclipse-plugin/branches/3.0-beta-1/plugins/org.apache.geronimo.st.v30.core/src/main/java/org/apache/geronimo/st/v30/core/GeronimoServerBehaviourDelegate.java

Modified: geronimo/devtools/eclipse-plugin/branches/3.0-beta-1/plugins/org.apache.geronimo.st.v30.core/src/main/java/org/apache/geronimo/st/v30/core/DeploymentUtils.java
URL: http://svn.apache.org/viewvc/geronimo/devtools/eclipse-plugin/branches/3.0-beta-1/plugins/org.apache.geronimo.st.v30.core/src/main/java/org/apache/geronimo/st/v30/core/DeploymentUtils.java?rev=1202017&r1=1202016&r2=1202017&view=diff
==============================================================================
--- geronimo/devtools/eclipse-plugin/branches/3.0-beta-1/plugins/org.apache.geronimo.st.v30.core/src/main/java/org/apache/geronimo/st/v30/core/DeploymentUtils.java (original)
+++ geronimo/devtools/eclipse-plugin/branches/3.0-beta-1/plugins/org.apache.geronimo.st.v30.core/src/main/java/org/apache/geronimo/st/v30/core/DeploymentUtils.java Tue Nov 15 02:59:51 2011
@@ -17,7 +17,6 @@
 package org.apache.geronimo.st.v30.core;
 
 import java.io.File;
-import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -37,7 +36,6 @@ import org.eclipse.core.runtime.CoreExce
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.jst.j2ee.application.internal.operations.AppClientComponentExportDataModelProvider;
 import org.eclipse.jst.j2ee.application.internal.operations.EARComponentExportDataModelProvider;
@@ -60,7 +58,6 @@ import org.eclipse.wst.server.core.model
 import org.eclipse.wst.server.core.model.IModuleResource;
 import org.eclipse.wst.server.core.model.IModuleResourceDelta;
 import org.eclipse.wst.server.core.util.ProjectModule;
-import org.eclipse.wst.server.core.util.PublishHelper;
 
 /**
  * @version $Rev$ $Date$
@@ -382,7 +379,7 @@ public class DeploymentUtils {
             }
         }
         return false;
-    }     
+    }
     
     public static boolean isInstalledModule(IServer server, String configId) {
         Trace.tracePoint("Entry", Activator.traceCore, "DeploymentUtils.isInstalledModule", server, configId);
@@ -437,74 +434,4 @@ public class DeploymentUtils {
         
         return configId;
     }
-        
-    public static IModuleResource[] getChangedClassResources(IModuleResourceDelta[] deltaArray) {
-        Trace.tracePoint("Entry", Activator.traceCore, "DeploymentUtils.getChangedClassResources", deltaArray);
-        List<IModuleResource> changedClassResources = new ArrayList<IModuleResource>();
-        // collect only changed classes resources
-        if (collectChangedClassResources(deltaArray, changedClassResources) && !changedClassResources.isEmpty()) {
-            // modified class resources were only found
-            IModuleResource[] resources = new IModuleResource[changedClassResources.size()];
-            changedClassResources.toArray(resources);
-            Trace.tracePoint("Exit ", Activator.traceCore, "DeploymentUtils.getChangedClassResources", resources);
-            return resources;
-        } else {
-            // added or removed resources or non-class resources were found
-            Trace.tracePoint("Exit ", Activator.traceCore, "DeploymentUtils.getChangedClassResources", "Added or removed resources or non-class resources were found");
-            return null;
-        }
-    }
-    
-    private static boolean collectChangedClassResources(IModuleResourceDelta[] deltaArray, List<IModuleResource> list) {
-        for (IModuleResourceDelta delta : deltaArray) {
-            int kind = delta.getKind();        
-            if (kind == IModuleResourceDelta.ADDED || kind == IModuleResourceDelta.REMOVED) {
-                return false;
-            }
-            IModuleResource resource = delta.getModuleResource();
-            if (resource instanceof IModuleFile) {
-                String name = resource.getName();
-                if (!name.endsWith(".class")) {
-                    return false;
-                }
-                if (kind == IModuleResourceDelta.CHANGED) {
-                    list.add(resource);
-                }
-            } else if (resource instanceof IModuleFolder) {
-                IModuleResourceDelta[] childDeltaArray = delta.getAffectedChildren();
-                if (!collectChangedClassResources(childDeltaArray, list)) {
-                    return false;
-                }
-            }
-        }
-        return true;
-    }
-    
-    public static File createChangeSetFile(IModuleResource[] resources) {
-        Trace.tracePoint("Entry", Activator.traceCore, "DeploymentUtils.createChangeSetFile", resources);
-        
-        File file = null;
-        try {
-            file = File.createTempFile("changeset", ".jar");
-        } catch (IOException e) {
-            Trace.tracePoint("Exit ", Activator.traceCore, "DeploymentUtils.createChangeSetFile", e);
-            return null;
-        }
-        
-        PublishHelper publishHelper = new PublishHelper(null);
-        IStatus[] statusArray = publishHelper.publishZip(resources, new Path(file.getAbsolutePath()), null);
-        if (statusArray != null) {
-            for (IStatus status : statusArray) {
-                if (!status.isOK()) {
-                    file.delete();
-                    Trace.tracePoint("Exit ", Activator.traceCore, "DeploymentUtils.createChangeSetFile", status);
-                    return null;
-                }
-            }
-        }
-        
-        Trace.tracePoint("Exit ", Activator.traceCore, "DeploymentUtils.createChangeSetFile", file);
-        return file;
-    }
-
 }

Modified: geronimo/devtools/eclipse-plugin/branches/3.0-beta-1/plugins/org.apache.geronimo.st.v30.core/src/main/java/org/apache/geronimo/st/v30/core/GeronimoServerBehaviourDelegate.java
URL: http://svn.apache.org/viewvc/geronimo/devtools/eclipse-plugin/branches/3.0-beta-1/plugins/org.apache.geronimo.st.v30.core/src/main/java/org/apache/geronimo/st/v30/core/GeronimoServerBehaviourDelegate.java?rev=1202017&r1=1202016&r2=1202017&view=diff
==============================================================================
--- geronimo/devtools/eclipse-plugin/branches/3.0-beta-1/plugins/org.apache.geronimo.st.v30.core/src/main/java/org/apache/geronimo/st/v30/core/GeronimoServerBehaviourDelegate.java (original)
+++ geronimo/devtools/eclipse-plugin/branches/3.0-beta-1/plugins/org.apache.geronimo.st.v30.core/src/main/java/org/apache/geronimo/st/v30/core/GeronimoServerBehaviourDelegate.java Tue Nov 15 02:59:51 2011
@@ -105,10 +105,8 @@ import org.eclipse.wst.server.core.Serve
 import org.eclipse.wst.server.core.internal.IModulePublishHelper;
 import org.eclipse.wst.server.core.internal.ProgressUtil;
 import org.eclipse.wst.server.core.model.IModuleFile;
-import org.eclipse.wst.server.core.model.IModuleResource;
 import org.eclipse.wst.server.core.model.IModuleResourceDelta;
 import org.eclipse.wst.server.core.model.ServerBehaviourDelegate;
-import org.eclipse.wst.server.core.util.PublishHelper;
 import org.eclipse.wst.server.core.util.SocketUtil;
 
 /**
@@ -591,7 +589,10 @@ public class GeronimoServerBehaviourDele
     
     private IStatus refreshBundle(IModule ebaModule, IModule bundleModule, AbstractName ebaName, Map<String, Long> bundleMap) {
         Trace.tracePoint("Entry", Activator.traceCore, "GeronimoServerBehaviourDelegate.refreshBundle", ebaModule, bundleModule, ebaName, bundleMap);
+
         try {
+            File file = DeploymentUtils.getTargetFile(getServer(), bundleModule);
+            
             String symbolicName = AriesHelper.getSymbolicName(bundleModule);
             Long bundleId = bundleMap.get(symbolicName);
             
@@ -601,13 +602,7 @@ public class GeronimoServerBehaviourDele
             }
             
             ExtendedDeploymentManager dm = (ExtendedDeploymentManager) DeploymentCommandFactory.getDeploymentManager(getServer());
-            /*
-             * Try class hot swap first and if it fails fallback to regular bundle update.
-             */
-            if (!refreshBundleClasses(dm, ebaModule, bundleModule, ebaName, bundleId)) {
-                File file = DeploymentUtils.getTargetFile(getServer(), bundleModule);
-                dm.updateEBAContent(ebaName, bundleId, file);
-            }
+            dm.updateEBAContent(ebaName, bundleId, file);
         } catch (Exception e) {
             return new Status(IStatus.ERROR, Activator.PLUGIN_ID, Messages.REFRESH_FAIL, e);
         }
@@ -617,52 +612,6 @@ public class GeronimoServerBehaviourDele
         return Status.OK_STATUS;
     }
 
-    private boolean refreshBundleClasses(ExtendedDeploymentManager dm, IModule ebaModule, IModule bundleModule, AbstractName ebaName, long bundleId) throws Exception {
-        Trace.tracePoint("Entry", Activator.traceCore, "GeronimoServerBehaviourDelegate.refreshBundleClasses", ebaModule, bundleModule, ebaName, bundleId);    
-        // check if class hot swap is supported
-        if (!dm.isRedefineClassesSupported()) {
-            Trace.tracePoint("Exit ", Activator.traceCore, "GeronimoServerBehaviourDelegate.refreshBundleClasses", "Class redefinition is not supported");        
-            return false;
-        }
-        // ensure only classes have changed
-        IModuleResourceDelta[] delta = getPublishedResourceDelta(new IModule[] { ebaModule, bundleModule });
-        IModuleResource[] classResources = DeploymentUtils.getChangedClassResources(delta);
-        if (classResources == null) {
-            Trace.tracePoint("Exit ", Activator.traceCore, "GeronimoServerBehaviourDelegate.refreshBundleClasses", "Non-class resource modifications found");
-            return false;
-        }
-        // create temp. zip with the changes
-        File changeSetFile = DeploymentUtils.createChangeSetFile(classResources);
-        if (changeSetFile == null) {
-            Trace.tracePoint("Exit ", Activator.traceCore, "GeronimoServerBehaviourDelegate.refreshBundleClasses", "Error creating file with resource modifications");
-            return false;
-        }
-        // get document base for the module if it is expanded
-        String documentBase = getServerDelegate().isNoRedeploy() ? getWebModuleDocumentBase(bundleModule) : null;
-        // see if the classes can be hot swapped - update archive if module is not expanded
-        if (!dm.hotSwapEBAContent(ebaName, bundleId, changeSetFile, documentBase == null)) {
-            Trace.tracePoint("Exit ", Activator.traceCore, "GeronimoServerBehaviourDelegate.refreshBundleClasses", "Bundle class hot swap cannot be preformed");
-            changeSetFile.delete();
-            return false;
-        } else {
-            changeSetFile.delete();
-        }
-        if (documentBase != null) {
-            PublishHelper publishHelper = new PublishHelper(getTempDirectory().toFile());   
-            IStatus[] statusArray = publishHelper.publishFull(classResources, new Path(documentBase), null);
-            if (statusArray != null) {
-                // XXX: in case of an error should we return false to force full re-deploy?
-                for (IStatus status : statusArray) {
-                    if (!status.isOK()) {
-                        Trace.trace(Trace.WARNING, "Error publishing changes: " + status.getMessage(), status.getException(), Activator.traceCore);
-                    }
-                }
-            }
-        }
-        Trace.tracePoint("Exit ", Activator.traceCore, "GeronimoServerBehaviourDelegate.refreshBundleClasses", "Bundle class hot swap was succesfully preformed", documentBase);
-        return true;
-    }
-    
     private static class ModuleDelta {
         private final IModule[] module;
         private int delta = NO_CHANGE;
@@ -989,34 +938,28 @@ public class GeronimoServerBehaviourDele
         Trace.tracePoint("Exit ", Activator.traceCore, "GeronimoServerBehaviourDelegate.invokeCommand");
     }   
 
-    private String getWebModuleDocumentBase(IModule webModule) {
-        Trace.tracePoint("Entry", Activator.traceCore, "GeronimoServerBehaviourDelegate.getWebModuleDocumentBase", webModule);
+    private IStatus tryFileReplace(IModule[] module) {
+        Trace.tracePoint("Entry", Activator.traceCore, "GeronimoServerBehaviourDelegate.tryFileReplace", module.toString());
         
+        IModule webModule = module[module.length - 1];        
         if (webModule.isExternal()) {
-            Trace.tracePoint("Exit", Activator.traceCore, "GeronimoServerBehaviourDelegate.getWebModuleDocumentBase", "External module");
+            Trace.tracePoint("Exit", Activator.traceCore, "GeronimoServerBehaviourDelegate.tryFileReplace", "External module");
             return null;
         }
-                
+
         String contextPath = getServerDelegate().getContextPath(webModule);
         if (contextPath == null) {
-            Trace.tracePoint("Exit", Activator.traceCore, "GeronimoServerBehaviourDelegate.getWebModuleDocumentBase", "Context path is null");
+            Trace.tracePoint("Exit", Activator.traceCore, "GeronimoServerBehaviourDelegate.tryFileReplace", "Context path is null");
             return null;
         }
+        Trace.trace(Trace.INFO, "Context path: " + contextPath, Activator.logCore);
 
         String documentBase = getWebModuleDocumentBase(contextPath);
-        Trace.tracePoint("Exit", Activator.traceCore, "GeronimoServerBehaviourDelegate.getWebModuleDocumentBase", contextPath, documentBase);
-        return documentBase;        
-    }
-    
-    private IStatus tryFileReplace(IModule[] module) {
-        Trace.tracePoint("Entry", Activator.traceCore, "GeronimoServerBehaviourDelegate.tryFileReplace", module.toString());
-        
-        IModule webModule = module[module.length - 1];        
-        String documentBase = getWebModuleDocumentBase(webModule);
-        if (documentBase == null ) {
+        if (documentBase == null || documentBase.length() == 0) {
             Trace.tracePoint("Exit", Activator.traceCore, "GeronimoServerBehaviourDelegate.tryFileReplace", "Document base is null");
             return null;
         }
+        Trace.trace(Trace.INFO, "Document base: " + documentBase, Activator.logCore);
 
         List<IModuleResourceDelta> modifiedFiles = findModifiedFiles(module);
         if (modifiedFiles == null) {
@@ -1641,7 +1584,7 @@ public class GeronimoServerBehaviourDele
                 String moduleContextPath = (String) kernel.getAttribute(name, "contextPath");
                 if (contextPath.equals(moduleContextPath)) {
                     String docBase = (String) kernel.getAttribute(name, "docBase");
-                    return (docBase != null && docBase.length() > 0) ? docBase : null;
+                    return docBase;
                 }
             } catch (GBeanNotFoundException e) {
                 // ignore