You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by no...@apache.org on 2010/02/19 23:13:40 UTC

svn commit: r912010 - in /incubator/aries/trunk/application: application-api/src/main/java/org/apache/aries/application/ application-management/src/test/java/org/apache/aries/application/management/impl/ application-management/src/test/java/org/apache/...

Author: not
Date: Fri Feb 19 22:13:40 2010
New Revision: 912010

URL: http://svn.apache.org/viewvc?rev=912010&view=rev
Log:
ARIES-188 Separate out the deployed application content from the required bundle dependencies in the deployment metadata.

Modified:
    incubator/aries/trunk/application/application-api/src/main/java/org/apache/aries/application/DeploymentMetadata.java
    incubator/aries/trunk/application/application-api/src/main/java/org/apache/aries/application/DeploymentMetadataFactory.java
    incubator/aries/trunk/application/application-management/src/test/java/org/apache/aries/application/management/impl/AriesApplicationManagerImplTest.java
    incubator/aries/trunk/application/application-management/src/test/java/org/apache/aries/unittest/utils/EbaUnitTestUtils.java
    incubator/aries/trunk/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/obr/generator/RepositoryDescriptorGenerator.java
    incubator/aries/trunk/application/application-runtime/src/main/java/org/apache/aries/application/runtime/impl/ApplicationContextImpl.java
    incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/impl/DeploymentMetadataFactoryImpl.java
    incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/impl/DeploymentMetadataImpl.java
    incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/AppConstants.java

Modified: incubator/aries/trunk/application/application-api/src/main/java/org/apache/aries/application/DeploymentMetadata.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-api/src/main/java/org/apache/aries/application/DeploymentMetadata.java?rev=912010&r1=912009&r2=912010&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-api/src/main/java/org/apache/aries/application/DeploymentMetadata.java (original)
+++ incubator/aries/trunk/application/application-api/src/main/java/org/apache/aries/application/DeploymentMetadata.java Fri Feb 19 22:13:40 2010
@@ -51,6 +51,12 @@
   public List<DeploymentContent> getApplicationDeploymentContents();
   
   /**
+   * get the value of the Provision-Bundle header
+   * @return
+   */
+  public List<DeploymentContent> getApplicationProvisionBundles();
+
+  /**
    * Obtain the associated 
    * {@link org.apache.aries.application.ApplicationMetadata ApplicationMetadata}. 
    * @return The application metadata.
@@ -71,4 +77,5 @@
    */
 
   public void store(OutputStream out) throws IOException;
+
 }

Modified: incubator/aries/trunk/application/application-api/src/main/java/org/apache/aries/application/DeploymentMetadataFactory.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-api/src/main/java/org/apache/aries/application/DeploymentMetadataFactory.java?rev=912010&r1=912009&r2=912010&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-api/src/main/java/org/apache/aries/application/DeploymentMetadataFactory.java (original)
+++ incubator/aries/trunk/application/application-api/src/main/java/org/apache/aries/application/DeploymentMetadataFactory.java Fri Feb 19 22:13:40 2010
@@ -25,6 +25,8 @@
 import org.apache.aries.application.filesystem.IFile;
 import org.apache.aries.application.management.AriesApplication;
 import org.apache.aries.application.management.BundleInfo;
+import org.apache.aries.application.management.ManagementException;
+import org.apache.aries.application.management.ResolverException;
 
 /**
  * Methods for creating a DeploymentMetadata instance
@@ -35,10 +37,11 @@
    * Create a DeploymentMetadata from an AriesApplication and its by-value bundles. 
    * @param  app The AriesApplication in question
    * @param  bundleInfo A resolved set of BundleInfo objects
-   * @throws IOException
+   * @throws ResolverException
    * @return DeploymentMetadata instance
    */
-  public DeploymentMetadata createDeploymentMetadata (AriesApplication app, Set<BundleInfo> bundleInfo);
+  public DeploymentMetadata createDeploymentMetadata (AriesApplication app, Set<BundleInfo> bundleInfo)
+    throws ResolverException;
   
   /**
    * Extract a DeploymentMetadata instance from an IFile

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=912010&r1=912009&r2=912010&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 Fri Feb 19 22:13:40 2010
@@ -71,7 +71,11 @@
   static class DummyResolver implements AriesApplicationResolver {
     Set<BundleInfo> nextResult;
     public Set<BundleInfo> resolve(AriesApplication app, ResolveConstraint... constraints) {
-      return nextResult;
+      Set<BundleInfo> info = new HashSet<BundleInfo>(nextResult);
+      
+      info.addAll(app.getBundleInfo());
+      
+      return info;
     } 
     void setNextResult (Set<BundleInfo> r) { 
       nextResult = r;
@@ -144,12 +148,16 @@
     DeploymentMetadata dm = app.getDeploymentMetadata();
     List<DeploymentContent> dcList = dm.getApplicationDeploymentContents();
 
-    assertEquals (dcList.size(), 3);
-    DeploymentContent dc1 = new DeploymentContentImpl ("foo.bar.widgets;deployed-version=1.0.0");
-    DeploymentContent dc2 = new DeploymentContentImpl ("my.business.logic;deployed-version=1.0.0");
+    assertEquals (2, dcList.size());
+    DeploymentContent dc1 = new DeploymentContentImpl ("foo.bar.widgets;deployed-version=1.1.0");
+    DeploymentContent dc2 = new DeploymentContentImpl ("my.business.logic;deployed-version=1.1.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));
 
   }
@@ -181,7 +189,8 @@
     
     AriesApplication newApp = _appMgr.createApplication(storedEba);
     DeploymentMetadata dm = newApp.getDeploymentMetadata();
-    assertEquals (dm.getApplicationDeploymentContents().size(), 3);
+    assertEquals (2, dm.getApplicationDeploymentContents().size());
+    assertEquals(1, dm.getApplicationProvisionBundles().size());
     assertEquals (dm.getApplicationSymbolicName(), app.getApplicationMetadata().getApplicationSymbolicName());
     assertEquals (dm.getApplicationVersion(), app.getApplicationMetadata().getApplicationVersion());
   }

Modified: incubator/aries/trunk/application/application-management/src/test/java/org/apache/aries/unittest/utils/EbaUnitTestUtils.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-management/src/test/java/org/apache/aries/unittest/utils/EbaUnitTestUtils.java?rev=912010&r1=912009&r2=912010&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-management/src/test/java/org/apache/aries/unittest/utils/EbaUnitTestUtils.java (original)
+++ incubator/aries/trunk/application/application-management/src/test/java/org/apache/aries/unittest/utils/EbaUnitTestUtils.java Fri Feb 19 22:13:40 2010
@@ -43,33 +43,37 @@
   
   private static void createEbaRecursive(File folder, File tempDir, String prefix) throws IOException
   {
-    for (File f : folder.listFiles())
-    {
-      if ((f.getName().endsWith(".jar") || f.getName().endsWith(".war")) && f.isDirectory())
+    File[] files = folder.listFiles();
+    
+    if (files != null) {
+      for (File f : files)
       {
-        File manifestFile = new File(f, "META-INF/MANIFEST.MF");
-        Manifest m;
-        
-        if (manifestFile.isFile())
-          m = new Manifest(new FileInputStream(manifestFile));
-        else
+        if ((f.getName().endsWith(".jar") || f.getName().endsWith(".war")) && f.isDirectory())
         {
-          m = new Manifest();
-          m.getMainAttributes().put(Attributes.Name.MANIFEST_VERSION, "1.0");
-        }
+          File manifestFile = new File(f, "META-INF/MANIFEST.MF");
+          Manifest m;
           
-        File jarFile = new File(tempDir, prefix + f.getName());
-        jarFile.getParentFile().mkdirs();
-        
-        IOUtils.jarUp(f, jarFile, m); 
-      }
-      else if (f.isFile())
-      {
-        IOUtils.writeOut(tempDir, prefix + f.getName(), new FileInputStream(f));
-      }
-      else if (f.isDirectory())
-      {
-        createEbaRecursive(f, tempDir, prefix + f.getName() + File.separator);
+          if (manifestFile.isFile())
+            m = new Manifest(new FileInputStream(manifestFile));
+          else
+          {
+            m = new Manifest();
+            m.getMainAttributes().put(Attributes.Name.MANIFEST_VERSION, "1.0");
+          }
+            
+          File jarFile = new File(tempDir, prefix + f.getName());
+          jarFile.getParentFile().mkdirs();
+          
+          IOUtils.jarUp(f, jarFile, m); 
+        }
+        else if (f.isFile())
+        {
+          IOUtils.writeOut(tempDir, prefix + f.getName(), new FileInputStream(f));
+        }
+        else if (f.isDirectory())
+        {
+          createEbaRecursive(f, tempDir, prefix + f.getName() + File.separator);
+        }
       }
     }
   }

Modified: incubator/aries/trunk/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/obr/generator/RepositoryDescriptorGenerator.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/obr/generator/RepositoryDescriptorGenerator.java?rev=912010&r1=912009&r2=912010&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/obr/generator/RepositoryDescriptorGenerator.java (original)
+++ incubator/aries/trunk/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/obr/generator/RepositoryDescriptorGenerator.java Fri Feb 19 22:13:40 2010
@@ -76,6 +76,7 @@
     
     requirement.setAttribute("extend", "false");
     requirement.setAttribute("multiple", "false");
+    requirement.setAttribute("optional", "false");
     
     requirement.setAttribute("filter", ManifestHeaderProcessor.generateFilter("bundle", p.getContentName(), p.getAttributes()));
     

Modified: incubator/aries/trunk/application/application-runtime/src/main/java/org/apache/aries/application/runtime/impl/ApplicationContextImpl.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-runtime/src/main/java/org/apache/aries/application/runtime/impl/ApplicationContextImpl.java?rev=912010&r1=912009&r2=912010&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-runtime/src/main/java/org/apache/aries/application/runtime/impl/ApplicationContextImpl.java (original)
+++ incubator/aries/trunk/application/application-runtime/src/main/java/org/apache/aries/application/runtime/impl/ApplicationContextImpl.java Fri Feb 19 22:13:40 2010
@@ -65,7 +65,10 @@
     }
     
     try {
-      for (DeploymentContent content : meta.getApplicationDeploymentContents()) {
+      List<DeploymentContent> bundlesToInstall = new ArrayList<DeploymentContent>(meta.getApplicationDeploymentContents());
+      bundlesToInstall.addAll(meta.getApplicationProvisionBundles());
+      
+      for (DeploymentContent content : bundlesToInstall) {
         String bundleSymbolicName = content.getContentName();
         Version bundleVersion = content.getExactVersion();
         

Modified: incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/impl/DeploymentMetadataFactoryImpl.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/impl/DeploymentMetadataFactoryImpl.java?rev=912010&r1=912009&r2=912010&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/impl/DeploymentMetadataFactoryImpl.java (original)
+++ incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/impl/DeploymentMetadataFactoryImpl.java Fri Feb 19 22:13:40 2010
@@ -27,11 +27,13 @@
 import org.apache.aries.application.filesystem.IFile;
 import org.apache.aries.application.management.AriesApplication;
 import org.apache.aries.application.management.BundleInfo;
+import org.apache.aries.application.management.ManagementException;
+import org.apache.aries.application.management.ResolverException;
 
 public class DeploymentMetadataFactoryImpl implements DeploymentMetadataFactory {
 
   public DeploymentMetadata createDeploymentMetadata(AriesApplication app,
-      Set<BundleInfo> additionalBundlesRequired) {
+      Set<BundleInfo> additionalBundlesRequired) throws ResolverException {
     return new DeploymentMetadataImpl (app, additionalBundlesRequired);
   }
   

Modified: incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/impl/DeploymentMetadataImpl.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/impl/DeploymentMetadataImpl.java?rev=912010&r1=912009&r2=912010&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/impl/DeploymentMetadataImpl.java (original)
+++ incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/impl/DeploymentMetadataImpl.java Fri Feb 19 22:13:40 2010
@@ -27,7 +27,9 @@
 import java.io.OutputStream;
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 import java.util.jar.Attributes;
 import java.util.jar.Manifest;
@@ -36,31 +38,46 @@
 import org.apache.aries.application.Content;
 import org.apache.aries.application.DeploymentContent;
 import org.apache.aries.application.DeploymentMetadata;
+import org.apache.aries.application.VersionRange;
 import org.apache.aries.application.filesystem.IFile;
 import org.apache.aries.application.management.AriesApplication;
 import org.apache.aries.application.management.BundleInfo;
+import org.apache.aries.application.management.ManagementException;
+import org.apache.aries.application.management.ResolverException;
 import org.apache.aries.application.utils.AppConstants;
 import org.apache.aries.application.utils.manifest.ManifestProcessor;
 import org.osgi.framework.Version;
 
 public class DeploymentMetadataImpl implements DeploymentMetadata {
+  private ApplicationMetadata _applicationMetadata;
+  private List<DeploymentContent> _deploymentContent = new ArrayList<DeploymentContent>();
+  private List<DeploymentContent> _provisionSharedContent = new ArrayList<DeploymentContent>();
   
-  ApplicationMetadata _applicationMetadata;
-  List<DeploymentContent> _deploymentContent;
-  
-  public DeploymentMetadataImpl (AriesApplication app, Set<BundleInfo> additionalBundlesRequired) {
+  public DeploymentMetadataImpl (AriesApplication app, Set<BundleInfo> bundlesRequired) throws ResolverException
+  {
     _applicationMetadata = app.getApplicationMetadata();
     _deploymentContent = new ArrayList<DeploymentContent>();
+    _provisionSharedContent = new ArrayList<DeploymentContent>();
+    
+    Map<String, VersionRange> appContent = new HashMap<String, VersionRange>();
     
-    // DeploymentContent needs to list everything in the application content
-    // plus all the bundles in additonalBundlesRequired
-    for (Content c: _applicationMetadata.getApplicationContents()) { 
-      _deploymentContent.add(new DeploymentContentImpl(c.getContentName(), c.getVersion().getMinimumVersion()));
-    }
-    for (BundleInfo bundleInfo : additionalBundlesRequired) { 
-      DeploymentContentImpl dci = new DeploymentContentImpl(bundleInfo.getSymbolicName(), 
-          bundleInfo.getVersion()); 
-      _deploymentContent.add(dci);
+    for (Content c : app.getApplicationMetadata().getApplicationContents()) {
+      appContent.put(c.getContentName(), c.getVersion());
+    }
+    
+    for (BundleInfo info : bundlesRequired) {
+      
+      VersionRange range = appContent.get(info.getSymbolicName());
+      
+      DeploymentContent dp = new DeploymentContentImpl(info.getSymbolicName(), info.getVersion());
+      
+      if (range == null) {
+        _provisionSharedContent.add(dp);
+      } else if (range.matches(info.getVersion())) {
+        _deploymentContent.add(dp);
+      } else {
+        throw new ResolverException("Bundle " + info.getSymbolicName() + " at version " + info.getVersion() + " is not in the range " + range);
+      }
     }
   }
   
@@ -77,12 +94,10 @@
       _applicationMetadata = new ApplicationMetadataImpl (mf);
 
       Attributes attributes = mf.getMainAttributes();
-      String deploymentContent = attributes.getValue(AppConstants.DEPLOYMENT_CONTENT);
-      List<String> dcList = ManifestProcessor.split(deploymentContent, ",");
-      _deploymentContent = new ArrayList<DeploymentContent>();
-      for (String s : dcList) { 
-        _deploymentContent.add(new DeploymentContentImpl(s));
-      }
+      
+      parseContent(attributes.getValue(AppConstants.DEPLOYMENT_CONTENT), _deploymentContent);
+      parseContent(attributes.getValue(AppConstants.PROVISION_CONTENT), _provisionSharedContent);
+      
     } finally { 
       is.close();
     }
@@ -91,6 +106,10 @@
   public List<DeploymentContent> getApplicationDeploymentContents() {
     return Collections.unmodifiableList(_deploymentContent);
   }
+  
+  public List<DeploymentContent> getApplicationProvisionBundles() {
+    return Collections.unmodifiableList(_provisionSharedContent);
+  }
 
   public ApplicationMetadata getApplicationMetadata() {
     return _applicationMetadata;
@@ -118,15 +137,16 @@
     attributes.putValue(Attributes.Name.MANIFEST_VERSION.toString(), AppConstants.MANIFEST_VERSION);
     attributes.putValue(AppConstants.APPLICATION_VERSION, getApplicationVersion().toString());
     attributes.putValue(AppConstants.APPLICATION_SYMBOLIC_NAME, getApplicationSymbolicName());
-    attributes.putValue(AppConstants.DEPLOYMENT_CONTENT, getDeploymentContentsAsString());
+    attributes.putValue(AppConstants.DEPLOYMENT_CONTENT, getDeploymentContentsAsString(_deploymentContent));
+    attributes.putValue(AppConstants.PROVISION_CONTENT, getDeploymentContentsAsString(_provisionSharedContent));
     mf.write(out);
   }
   
   
   
-  private String getDeploymentContentsAsString () { 
+  private String getDeploymentContentsAsString (List<DeploymentContent> content) { 
     StringBuilder builder = new StringBuilder();
-    for (DeploymentContent dc : getApplicationDeploymentContents()) {
+    for (DeploymentContent dc : content) {
       builder.append(dc.getContentName());
       builder.append(';' + AppConstants.DEPLOYMENT_BUNDLE_VERSION + "=");
       builder.append(dc.getExactVersion());
@@ -138,4 +158,11 @@
     return builder.toString();
   }
 
-}
+  private void parseContent(String content, List<DeploymentContent> contents)
+  {
+    List<String> pcList = ManifestProcessor.split(content, ",");
+    for (String s : pcList) {
+      contents.add(new DeploymentContentImpl(s));
+    }
+  }
+}
\ No newline at end of file

Modified: incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/AppConstants.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/AppConstants.java?rev=912010&r1=912009&r2=912010&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/AppConstants.java (original)
+++ incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/AppConstants.java Fri Feb 19 22:13:40 2010
@@ -26,6 +26,9 @@
 {
   /** Trace group for this bundle */
   public String TRACE_GROUP = "Aries.app.utils";
+
+  /** The Provision-Content header for the deployment.mf */
+  public static final String PROVISION_CONTENT = "Provision-Bundle";
   
   /** The application scope (used to find the applications bundle repository */
   public static final String APPLICATION_SCOPE = "Application-Scope";