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>