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";