You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by ga...@apache.org on 2013/03/29 02:11:43 UTC

svn commit: r1462372 - in /geronimo/server/branches/3.0/plugins/aries/geronimo-aries/src/main/java/org/apache/geronimo/aries: ApplicationInstaller.java EBAArtifactTypeHandler.java UnpackEBATypeHandler.java

Author: gawor
Date: Fri Mar 29 01:11:43 2013
New Revision: 1462372

URL: http://svn.apache.org/r1462372
Log:
GERONIMO-6442: Avoid unnecessary copy of OSGi application contents into a temporary directory during deployment

Added:
    geronimo/server/branches/3.0/plugins/aries/geronimo-aries/src/main/java/org/apache/geronimo/aries/EBAArtifactTypeHandler.java   (with props)
Removed:
    geronimo/server/branches/3.0/plugins/aries/geronimo-aries/src/main/java/org/apache/geronimo/aries/UnpackEBATypeHandler.java
Modified:
    geronimo/server/branches/3.0/plugins/aries/geronimo-aries/src/main/java/org/apache/geronimo/aries/ApplicationInstaller.java

Modified: geronimo/server/branches/3.0/plugins/aries/geronimo-aries/src/main/java/org/apache/geronimo/aries/ApplicationInstaller.java
URL: http://svn.apache.org/viewvc/geronimo/server/branches/3.0/plugins/aries/geronimo-aries/src/main/java/org/apache/geronimo/aries/ApplicationInstaller.java?rev=1462372&r1=1462371&r2=1462372&view=diff
==============================================================================
--- geronimo/server/branches/3.0/plugins/aries/geronimo-aries/src/main/java/org/apache/geronimo/aries/ApplicationInstaller.java (original)
+++ geronimo/server/branches/3.0/plugins/aries/geronimo-aries/src/main/java/org/apache/geronimo/aries/ApplicationInstaller.java Fri Mar 29 01:11:43 2013
@@ -22,6 +22,9 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.net.URL;
 import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
 import java.util.zip.ZipInputStream;
 
 import org.apache.aries.application.ApplicationMetadata;
@@ -84,6 +87,7 @@ public class ApplicationInstaller implem
     private Collection<ConfigurationStore> configurationStores;
     private Environment defaultEnvironment;
     private GeronimoApplicationManager applicationManager;
+    private Map<Artifact, AriesApplication> applicationMap;
     
     public ApplicationInstaller(@ParamReference(name = "Store", namingType = "ConfigurationStore") Collection<ConfigurationStore> configurationStores,
                                 @ParamReference(name = "Repositories", namingType = "Repository") Collection<? extends Repository> repositories,
@@ -101,6 +105,7 @@ public class ApplicationInstaller implem
         this.defaultEnvironment = defaultEnvironment;
         this.webApplicationTracker = new WebApplicationTracker(bundleContext);
         this.applicationManager = new GeronimoApplicationManager(bundleContext);
+        this.applicationMap = Collections.synchronizedMap(new HashMap<Artifact, AriesApplication>());
     }
 
     public void doStart() throws Exception {
@@ -108,12 +113,10 @@ public class ApplicationInstaller implem
         webApplicationTracker.start();
         applicationManager.doStart();
         
-        if (getUnpackApplicationBundles()) {
-            for (Repository repository : repositories) {
-                if (repository instanceof AbstractRepository) {
-                    ((AbstractRepository) repository).setTypeHandler("eba", new UnpackEBATypeHandler());
-                }
-            }
+        for (Repository repository : repositories) {
+            if (repository instanceof AbstractRepository) {
+                ((AbstractRepository) repository).setTypeHandler("eba", new EBAArtifactTypeHandler(this));
+            }           
         }        
     }
 
@@ -141,6 +144,20 @@ public class ApplicationInstaller implem
         return webApplicationTracker;
     }
     
+    protected void registerApplication(Artifact id, AriesApplication app) {
+        applicationMap.put(id, app);
+    }
+    
+    protected AriesApplication unregisterApplication(Artifact id) {
+        AriesApplication app = applicationMap.remove(id);
+        return app;
+    }
+    
+    protected AriesApplication lookupApplication(Artifact id) {
+        AriesApplication app = applicationMap.get(id);
+        return app;
+    }
+    
     public DeploymentContext startInstall(AriesApplication app, File inPlaceLocation, ConfigurationStore targetConfigurationStore)
         throws ConfigurationAlreadyExistsException, IOException, DeploymentException {
 
@@ -158,7 +175,7 @@ public class ApplicationInstaller implem
         //Use a temporary folder to hold the extracted files for analysis use
         File tempDirectory = FileUtils.createTempDir();
         try {
-            DeploymentContext context = new DeploymentContext(tempDirectory,
+            DeploymentContext context = new EBADeploymentContext(tempDirectory,
                             null,
                             environment,
                             moduleName,
@@ -172,8 +189,8 @@ public class ApplicationInstaller implem
             context.initializeConfiguration();
 
             if (inPlaceLocation == null) {
-                // UnpackEBATypeHandler will unpack the application bundles if necessary at install time 
-                storeApplication(app, tempDirectory, false);
+                // EBAArtifactTypeHandler will "install" the application
+                registerApplication(configId, app);
             } else {                
                 storeInPlaceApplication(app, inPlaceLocation);
             }
@@ -199,7 +216,11 @@ public class ApplicationInstaller implem
         return Boolean.parseBoolean(property);
     }
     
-    private void storeApplication(AriesApplication app, File directory, boolean unpack) throws IOException {
+    protected void storeApplication(AriesApplication app, File directory) throws IOException {
+        storeApplication(app, directory, getUnpackApplicationBundles());
+    }
+    
+    protected void storeApplication(AriesApplication app, File directory, boolean unpack) throws IOException {
         ApplicationMetadata appMetadata = app.getApplicationMetadata();
         appMetadata.store(new File(directory, AppConstants.APPLICATION_MF));
 
@@ -318,5 +339,27 @@ public class ApplicationInstaller implem
             }
         }
     }
+    
+    private class EBADeploymentContext extends DeploymentContext {
+
+        public EBADeploymentContext(File baseDir, 
+                                    File inPlaceConfigurationDir, 
+                                    Environment environment,
+                                    AbstractName moduleName, 
+                                    ConfigurationModuleType moduleType, 
+                                    Naming naming,
+                                    ConfigurationManager configurationManager, 
+                                    Collection<Repository> repositories,
+                                    BundleContext bundleContext) throws DeploymentException {
+            super(baseDir, inPlaceConfigurationDir, environment, moduleName, 
+                  moduleType, naming, configurationManager, repositories, bundleContext);
+        }
+
+        @Override
+        public void close() throws IOException, DeploymentException {
+            super.close();
+            unregisterApplication(moduleName.getArtifact());
+        }
+    }
 
 }

Added: geronimo/server/branches/3.0/plugins/aries/geronimo-aries/src/main/java/org/apache/geronimo/aries/EBAArtifactTypeHandler.java
URL: http://svn.apache.org/viewvc/geronimo/server/branches/3.0/plugins/aries/geronimo-aries/src/main/java/org/apache/geronimo/aries/EBAArtifactTypeHandler.java?rev=1462372&view=auto
==============================================================================
--- geronimo/server/branches/3.0/plugins/aries/geronimo-aries/src/main/java/org/apache/geronimo/aries/EBAArtifactTypeHandler.java (added)
+++ geronimo/server/branches/3.0/plugins/aries/geronimo-aries/src/main/java/org/apache/geronimo/aries/EBAArtifactTypeHandler.java Fri Mar 29 01:11:43 2013
@@ -0,0 +1,58 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.geronimo.aries;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.apache.aries.application.management.AriesApplication;
+import org.apache.geronimo.kernel.repository.Artifact;
+import org.apache.geronimo.kernel.repository.ArtifactTypeHandler;
+import org.apache.geronimo.kernel.repository.FileWriteMonitor;
+import org.apache.geronimo.kernel.util.FileUtils;
+
+/**
+ * @version $Rev:385232 $ $Date$
+ */
+public class EBAArtifactTypeHandler implements ArtifactTypeHandler {
+
+    private ApplicationInstaller installer;
+    
+    public EBAArtifactTypeHandler(ApplicationInstaller installer) {
+        this.installer = installer;
+    }
+
+    @Override
+    public void install(InputStream source, int size, Artifact artifactId, FileWriteMonitor monitor, File target) throws IOException {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void install(File source, Artifact artifactId, FileWriteMonitor monitor, File target) throws IOException {
+        // copy config.ser & other generated stuff during deployment
+        FileUtils.recursiveCopy(source, target);
+        
+        AriesApplication app = installer.lookupApplication(artifactId);
+        // app will be null for in-place deployment
+        if (app != null) {
+            // copy the contents on the application
+            installer.storeApplication(app, target);
+        } 
+    }
+
+}

Propchange: geronimo/server/branches/3.0/plugins/aries/geronimo-aries/src/main/java/org/apache/geronimo/aries/EBAArtifactTypeHandler.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/server/branches/3.0/plugins/aries/geronimo-aries/src/main/java/org/apache/geronimo/aries/EBAArtifactTypeHandler.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/server/branches/3.0/plugins/aries/geronimo-aries/src/main/java/org/apache/geronimo/aries/EBAArtifactTypeHandler.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain