You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by mn...@apache.org on 2010/07/06 12:51:13 UTC
svn commit: r960866 - in /incubator/aries/trunk/application:
application-api/ application-management/
application-management/src/main/java/org/apache/aries/application/management/impl/
application-management/src/test/java/org/apache/aries/application/m...
Author: mnuttall
Date: Tue Jul 6 10:51:12 2010
New Revision: 960866
URL: http://svn.apache.org/viewvc?rev=960866&view=rev
Log:
ARIES-192: Convert bundles before generating the application content. From a patch submitted by Emily Jiang.
Added:
incubator/aries/trunk/application/application-management/src/test/resources/conversion/
incubator/aries/trunk/application/application-management/src/test/resources/conversion/MANIFEST.MF
incubator/aries/trunk/application/application-management/src/test/resources/conversion/conversion.eba/
incubator/aries/trunk/application/application-management/src/test/resources/conversion/conversion.eba/helloWorld.jar/
incubator/aries/trunk/application/application-management/src/test/resources/conversion/conversion.eba/helloWorld.jar/META-INF/
incubator/aries/trunk/application/application-management/src/test/resources/conversion/conversion.eba/helloWorld.jar/META-INF/MANIFEST.MF
incubator/aries/trunk/application/application-management/src/test/resources/conversion/conversion.eba/helloWorld.war/
incubator/aries/trunk/application/application-management/src/test/resources/conversion/conversion.eba/helloWorld.war/WEB-INF/
incubator/aries/trunk/application/application-management/src/test/resources/conversion/conversion.eba/helloWorld.war/WEB-INF/web.xml
Modified:
incubator/aries/trunk/application/application-api/pom.xml
incubator/aries/trunk/application/application-management/ (props changed)
incubator/aries/trunk/application/application-management/src/main/java/org/apache/aries/application/management/impl/AriesApplicationManagerImpl.java
incubator/aries/trunk/application/application-management/src/test/java/org/apache/aries/application/management/impl/AriesApplicationManagerImplTest.java
incubator/aries/trunk/application/application-utils/pom.xml
Modified: incubator/aries/trunk/application/application-api/pom.xml
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-api/pom.xml?rev=960866&r1=960865&r2=960866&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-api/pom.xml (original)
+++ incubator/aries/trunk/application/application-api/pom.xml Tue Jul 6 10:51:12 2010
@@ -43,7 +43,7 @@
<dependency>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.core</artifactId>
- <version>4.0.0</version>
+ <version>4.2.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
Propchange: incubator/aries/trunk/application/application-management/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Tue Jul 6 10:51:12 2010
@@ -2,3 +2,5 @@ target
.classpath
.project
.settings
+ariesApplicationManagerImplTest
+unittest
Modified: incubator/aries/trunk/application/application-management/src/main/java/org/apache/aries/application/management/impl/AriesApplicationManagerImpl.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-management/src/main/java/org/apache/aries/application/management/impl/AriesApplicationManagerImpl.java?rev=960866&r1=960865&r2=960866&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-management/src/main/java/org/apache/aries/application/management/impl/AriesApplicationManagerImpl.java (original)
+++ incubator/aries/trunk/application/application-management/src/main/java/org/apache/aries/application/management/impl/AriesApplicationManagerImpl.java Tue Jul 6 10:51:12 2010
@@ -114,10 +114,66 @@ public class AriesApplicationManagerImpl
AriesApplicationImpl application = null;
try {
- Manifest applicationManifest = parseApplicationManifest (ebaFile);
- ManifestDefaultsInjector.updateManifest(applicationManifest, ebaFile.getName(), ebaFile);
+
+ /* We require that all other .jar and .war files included by-value be valid bundles
+ * because a DEPLOYMENT.MF has been provided. If no DEPLOYMENT.MF, migrate
+ * wars to wabs, plain jars to bundles
+ */
+
+ Set<BundleInfo> extraBundlesInfo = new HashSet<BundleInfo>();
+ for (IFile f : ebaFile) {
+ if (f.isDirectory()) {
+ continue;
+ }
+
+ BundleManifest bm = getBundleManifest (f);
+ if (bm != null) {
+ if (bm.isValid()) {
+ extraBundlesInfo.add(new SimpleBundleInfo(_applicationMetadataFactory, bm, f.toURL().toExternalForm()));
+ } else if (deploymentMetadata != null) {
+ throw new ManagementException (MessageUtil.getMessage("APPMANAGEMENT0003E", f.getName(), ebaFile.getName()));
+ } else {
+ // We have a jar that needs converting to a bundle, or a war to migrate to a WAB
+ BundleConversion convertedBinary = null;
+ Iterator<BundleConverter> converters = _bundleConverters.iterator();
+ List<ConversionException> conversionExceptions = Collections.emptyList();
+ while (converters.hasNext() && convertedBinary == null) {
+ try {
+ convertedBinary = converters.next().convert(ebaFile, f);
+ } catch (ServiceException sx) {
+ // We'll get this if our optional BundleConverter has not been injected.
+ } catch (ConversionException cx) {
+ conversionExceptions.add(cx);
+ }
+ }
+ if (conversionExceptions.size() > 0) {
+ for (ConversionException cx : conversionExceptions) {
+ _logger.error("APPMANAGEMENT0004E", new Object[]{f.getName(), ebaFile.getName(), cx});
+ }
+ throw new ManagementException (MessageUtil.getMessage("APPMANAGEMENT0005E", ebaFile.getName()));
+ }
+ if (convertedBinary != null) {
+ modifiedBundles.put (f.getName(), convertedBinary);
+ bm = BundleManifest.fromBundle(f);
+ extraBundlesInfo.add(new SimpleBundleInfo(_applicationMetadataFactory, bm, f.getName()));
+ }
+ }
+ }
+ }
+ Manifest applicationManifest = parseApplicationManifest (ebaFile);
+ String appName = ebaFile.getName();
+ //If the application name is null, we will try to get the file name.
+ if ((appName == null) || (appName.isEmpty())) {
+ String fullPath = ebaFile.toString();
+ if (fullPath.endsWith("/"))
+ fullPath = fullPath.substring(0, fullPath.length() -1);
+ int last_slash = fullPath.lastIndexOf("/");
+ appName = fullPath.substring(last_slash + 1, fullPath.length());
+ }
+
+
+ ManifestDefaultsInjector.updateManifest(applicationManifest, appName, ebaFile);
applicationMetadata = _applicationMetadataFactory.createApplicationMetadata(applicationManifest);
-
IFile deploymentManifest = ebaFile.getFile(AppConstants.DEPLOYMENT_MF);
if (deploymentManifest != null) {
deploymentMetadata = _deploymentMetadataFactory.createDeploymentMetadata(deploymentManifest);
@@ -130,51 +186,7 @@ public class AriesApplicationManagerImpl
}
}
- /* We require that all other .jar and .war files included by-value be valid bundles
- * because a DEPLOYMENT.MF has been provided. If no DEPLOYMENT.MF, migrate
- * wars to wabs, plain jars to bundles
- */
-
- Set<BundleInfo> extraBundlesInfo = new HashSet<BundleInfo>();
- for (IFile f : ebaFile) {
- if (f.isDirectory()) {
- continue;
- }
-
- BundleManifest bm = getBundleManifest (f);
- if (bm != null) {
- if (bm.isValid()) {
- extraBundlesInfo.add(new SimpleBundleInfo(_applicationMetadataFactory, bm, f.toURL().toExternalForm()));
- } else if (deploymentMetadata != null) {
- throw new ManagementException (MessageUtil.getMessage("APPMANAGEMENT0003E", f.getName(), ebaFile.getName()));
- } else {
- // We have a jar that needs converting to a bundle, or a war to migrate to a WAB
- BundleConversion convertedBinary = null;
- Iterator<BundleConverter> converters = _bundleConverters.iterator();
- List<ConversionException> conversionExceptions = Collections.emptyList();
- while (converters.hasNext() && convertedBinary == null) {
- try {
- convertedBinary = converters.next().convert(ebaFile, f);
- } catch (ServiceException sx) {
- // We'll get this if our optional BundleConverter has not been injected.
- } catch (ConversionException cx) {
- conversionExceptions.add(cx);
- }
- }
- if (conversionExceptions.size() > 0) {
- for (ConversionException cx : conversionExceptions) {
- _logger.error("APPMANAGEMENT0004E", new Object[]{f.getName(), ebaFile.getName(), cx});
- }
- throw new ManagementException (MessageUtil.getMessage("APPMANAGEMENT0005E", ebaFile.getName()));
- }
- if (convertedBinary != null) {
- modifiedBundles.put (f.getName(), convertedBinary);
- bm = BundleManifest.fromBundle(f);
- extraBundlesInfo.add(new SimpleBundleInfo(_applicationMetadataFactory, bm, f.getName()));
- }
- }
- }
- }
+
application = new AriesApplicationImpl (applicationMetadata, extraBundlesInfo, _localPlatform);
application.setDeploymentMetadata(deploymentMetadata);
Modified: incubator/aries/trunk/application/application-management/src/test/java/org/apache/aries/application/management/impl/AriesApplicationManagerImplTest.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-management/src/test/java/org/apache/aries/application/management/impl/AriesApplicationManagerImplTest.java?rev=960866&r1=960865&r2=960866&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-management/src/test/java/org/apache/aries/application/management/impl/AriesApplicationManagerImplTest.java (original)
+++ incubator/aries/trunk/application/application-management/src/test/java/org/apache/aries/application/management/impl/AriesApplicationManagerImplTest.java Tue Jul 6 10:51:12 2010
@@ -24,12 +24,15 @@ import static org.junit.Assert.assertNot
import static org.junit.Assert.assertTrue;
import java.io.File;
+import java.io.FileInputStream;
import java.io.IOException;
+import java.io.InputStream;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
+import java.util.jar.Manifest;
import org.apache.aries.application.ApplicationMetadata;
import org.apache.aries.application.ApplicationMetadataFactory;
@@ -45,13 +48,14 @@ import org.apache.aries.application.impl
import org.apache.aries.application.impl.DeploymentMetadataFactoryImpl;
import org.apache.aries.application.management.AriesApplication;
import org.apache.aries.application.management.AriesApplicationResolver;
+import org.apache.aries.application.management.BundleConversion;
import org.apache.aries.application.management.BundleConverter;
import org.apache.aries.application.management.BundleInfo;
+import org.apache.aries.application.management.ConversionException;
import org.apache.aries.application.management.LocalPlatform;
import org.apache.aries.application.management.ManagementException;
import org.apache.aries.application.management.ResolveConstraint;
import org.apache.aries.application.management.ResolverException;
-import org.apache.aries.application.management.impl.AriesApplicationManagerImpl;
import org.apache.aries.application.utils.filesystem.FileSystem;
import org.apache.aries.application.utils.filesystem.IOUtils;
import org.apache.aries.application.utils.management.SimpleBundleInfo;
@@ -98,31 +102,79 @@ public class AriesApplicationManagerImpl
return File.createTempFile("ebaTmp", null);
}
}
+
+ static class DummyConverter implements BundleConverter {
- static final String TEST_EBA = "./ariesApplicationManagerImplTest/test.eba";
+ public BundleConversion convert(IDirectory parentEba, IFile toBeConverted)
+ throws ConversionException {
+ if (toBeConverted.getName().equals("helloWorld.war")) {
+ InputStream is = null;
+ try {
+ is = new FileInputStream(new File("../src/test/resources/conversion/MANIFEST.MF"));
+ Manifest warManifest = new Manifest(is);
+ IOUtils.jarUp(new File("../src/test/resources/conversion/conversion.eba/helloWorld.war"), new File("./ariesApplicationManagerImplTest/conversion/helloWorld.war"), warManifest);
+ IOUtils.zipUp(new File("../src/test/resources/conversion/conversion.eba/helloWorld.jar"), new File("./ariesApplicationManagerImplTest/conversion/helloWorld.jar"));
+
+ IOUtils.zipUp(new File("./ariesApplicationManagerImplTest/conversion"), new File("./ariesApplicationManagerImplTest/conversion.eba"));
+ final InputStream jarIs = new FileInputStream(new File("./ariesApplicationManagerImplTest/conversion.eba"));
+ final String location = toBeConverted.toString();
+ return new BundleConversion() {
+
+ public BundleInfo getBundleInfo(ApplicationMetadataFactory amf) throws IOException {
+ return new SimpleBundleInfo(amf, BundleManifest.fromBundle(jarIs), location);
+ }
+
+ public InputStream getInputStream() throws IOException {
+ return jarIs;
+ }
+
+ };
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ try {
+ if (is != null)
+ is.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ return null;
+ }
+
+
+ }
+
+
+ static final String TEST_EBA = "./ariesApplicationManagerImplTest/test.eba";
+ static final String CONVERSION_EBA = "./ariesApplicationManagerImplTest/conversion.eba";
@BeforeClass
public static void preTest() throws Exception {
- new File("ariesApplicationManagerImplTest").mkdir();
+ new File("ariesApplicationManagerImplTest/conversion").mkdirs();
EbaUnitTestUtils.createEba("../src/test/resources/bundles/test.eba", TEST_EBA);
File src = new File ("../src/test/resources/bundles/repository/a.handy.persistence.library.jar");
File dest = new File ("ariesApplicationManagerImplTest/a.handy.persistence.library.jar");
IOUtils.zipUp(src, dest);
+ EbaUnitTestUtils.createEba("../src/test/resources/conversion/conversion.eba", CONVERSION_EBA);
}
AriesApplicationManagerImpl _appMgr;
ApplicationMetadataFactory _appMetaFactory;
DummyResolver _resolver;
-
+ DummyConverter _converter;
@Before
public void setup() {
_appMgr = new AriesApplicationManagerImpl ();
_appMetaFactory = new ApplicationMetadataFactoryImpl ();
DeploymentMetadataFactory dmf = new DeploymentMetadataFactoryImpl();
+ _converter = new DummyConverter();
List<BundleConverter> bundleConverters = new ArrayList<BundleConverter>();
- _resolver = new DummyResolver();
-
+ bundleConverters.add(_converter);
+ _resolver = new DummyResolver();
_appMgr.setApplicationMetadataFactory(_appMetaFactory);
_appMgr.setDeploymentMetadataFactory(dmf);
_appMgr.setBundleConverters(bundleConverters);
@@ -163,6 +215,36 @@ public class AriesApplicationManagerImpl
}
@Test
+ public void testCreateAndConversion() throws Exception {
+ AriesApplication app = createApplication (CONVERSION_EBA);
+ ApplicationMetadata appMeta = app.getApplicationMetadata();
+ assertEquals (appMeta.getApplicationName(), "conversion.eba");
+ assertEquals (appMeta.getApplicationSymbolicName(), "conversion.eba");
+ assertEquals (appMeta.getApplicationVersion(), new Version("0.0"));
+ List<Content> appContent = appMeta.getApplicationContents();
+ assertEquals (appContent.size(), 2);
+ Content fbw = new ContentImpl("hello.world.jar;version=\"[1.1.0, 1.1.0]\"");
+ Content mbl = new ContentImpl("helloWorld.war;version=\"[0.0.0, 0.0.0]\"");
+ assertTrue (appContent.contains(fbw));
+ assertTrue (appContent.contains(mbl));
+
+ DeploymentMetadata dm = app.getDeploymentMetadata();
+ List<DeploymentContent> dcList = dm.getApplicationDeploymentContents();
+
+ assertEquals (2, dcList.size());
+ DeploymentContent dc1 = new DeploymentContentImpl ("hello.world.jar;deployed-version=1.1.0");
+ DeploymentContent dc2 = new DeploymentContentImpl ("helloWorld.war;deployed-version=0.0.0");
+ DeploymentContent dc3 = new DeploymentContentImpl ("a.handy.persistence.library;deployed-version=1.1.0");
+ assertTrue (dcList.contains(dc1));
+ assertTrue (dcList.contains(dc2));
+
+ dcList = dm.getApplicationProvisionBundles();
+
+ assertEquals(1, dcList.size());
+ assertTrue (dcList.contains(dc3));
+ }
+
+ @Test
public void testStoreAndReload() throws Exception {
AriesApplication app = createApplication (TEST_EBA);
File dest = new File ("ariesApplicationManagerImplTest/stored.eba");
@@ -211,7 +293,7 @@ public class AriesApplicationManagerImpl
nextResolverResult.add(resolvedPersistenceLibrary);
_resolver.setNextResult(nextResolverResult);
- IDirectory testEba = FileSystem.getFSRoot(new File(TEST_EBA));
+ IDirectory testEba = FileSystem.getFSRoot(new File(fileName));
AriesApplication app = _appMgr.createApplication(testEba);
app = _appMgr.resolve(app);
return app;
Added: incubator/aries/trunk/application/application-management/src/test/resources/conversion/MANIFEST.MF
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-management/src/test/resources/conversion/MANIFEST.MF?rev=960866&view=auto
==============================================================================
--- incubator/aries/trunk/application/application-management/src/test/resources/conversion/MANIFEST.MF (added)
+++ incubator/aries/trunk/application/application-management/src/test/resources/conversion/MANIFEST.MF Tue Jul 6 10:51:12 2010
@@ -0,0 +1,11 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: helloWorld.war
+Bundle-SymbolicName: helloWorld.war
+Bundle-Version: 0.0.0
+Bundle-Vendor: Apache.org
+Bundle-ContextPath: /test
+Export-Package: apache.org.helloWorldWar
+
+
+
Added: incubator/aries/trunk/application/application-management/src/test/resources/conversion/conversion.eba/helloWorld.jar/META-INF/MANIFEST.MF
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-management/src/test/resources/conversion/conversion.eba/helloWorld.jar/META-INF/MANIFEST.MF?rev=960866&view=auto
==============================================================================
--- incubator/aries/trunk/application/application-management/src/test/resources/conversion/conversion.eba/helloWorld.jar/META-INF/MANIFEST.MF (added)
+++ incubator/aries/trunk/application/application-management/src/test/resources/conversion/conversion.eba/helloWorld.jar/META-INF/MANIFEST.MF Tue Jul 6 10:51:12 2010
@@ -0,0 +1,9 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: HelloWorldJar
+Bundle-SymbolicName: hello.world.jar
+Bundle-Version: 1.1.0
+Bundle-Vendor: Apache.org
+Export-Package: apache.org.helloWorldJar
+
+
Added: incubator/aries/trunk/application/application-management/src/test/resources/conversion/conversion.eba/helloWorld.war/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-management/src/test/resources/conversion/conversion.eba/helloWorld.war/WEB-INF/web.xml?rev=960866&view=auto
==============================================================================
--- incubator/aries/trunk/application/application-management/src/test/resources/conversion/conversion.eba/helloWorld.war/WEB-INF/web.xml (added)
+++ incubator/aries/trunk/application/application-management/src/test/resources/conversion/conversion.eba/helloWorld.war/WEB-INF/web.xml Tue Jul 6 10:51:12 2010
@@ -0,0 +1,3 @@
+<web-app>
+<display-name>Hello World</display-name>
+</web-app>
\ No newline at end of file
Modified: incubator/aries/trunk/application/application-utils/pom.xml
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-utils/pom.xml?rev=960866&r1=960865&r2=960866&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-utils/pom.xml (original)
+++ incubator/aries/trunk/application/application-utils/pom.xml Tue Jul 6 10:51:12 2010
@@ -67,7 +67,7 @@
<dependency>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.core</artifactId>
- <version>4.0.0</version>
+ <version>4.2.0</version>
<scope>provided</scope>
</dependency>
<dependency>