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