You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by gn...@apache.org on 2010/02/18 15:11:29 UTC

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

Author: gnodet
Date: Thu Feb 18 14:11:29 2010
New Revision: 911409

URL: http://svn.apache.org/viewvc?rev=911409&view=rev
Log:
The resolution process should be able to be done separatly from the AriesApplication creation

Modified:
    incubator/aries/trunk/application/application-api/src/main/java/org/apache/aries/application/management/AriesApplication.java
    incubator/aries/trunk/application/application-api/src/main/java/org/apache/aries/application/management/AriesApplicationManager.java
    incubator/aries/trunk/application/application-management/src/main/java/org/apache/aries/application/management/impl/AriesApplicationImpl.java
    incubator/aries/trunk/application/application-management/src/main/java/org/apache/aries/application/management/impl/AriesApplicationManagerImpl.java

Modified: incubator/aries/trunk/application/application-api/src/main/java/org/apache/aries/application/management/AriesApplication.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-api/src/main/java/org/apache/aries/application/management/AriesApplication.java?rev=911409&r1=911408&r2=911409&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-api/src/main/java/org/apache/aries/application/management/AriesApplication.java (original)
+++ incubator/aries/trunk/application/application-api/src/main/java/org/apache/aries/application/management/AriesApplication.java Thu Feb 18 14:11:29 2010
@@ -54,6 +54,19 @@
    */
   public Set<BundleInfo> getBundleInfo();
 
+
+  /**
+   * Check if the application is resolved or not.
+   * An application is said to be resolved if it has a valid deployment metadata.
+   * During the installation process, an application will be automatically
+   * resolved if it is not already.
+   *
+   * @return if the appplication is resolved or not.
+   * @see org.apache.aries.application.management.AriesApplicationManager#install(AriesApplication)  
+   * @see org.apache.aries.application.management.AriesApplicationManager#resolve(AriesApplication, ResolveConstraint...)
+   */
+  public boolean isResolved();
+
   /** 
    * Persist this metadata. 
    * @param f The file to store this metadata to

Modified: incubator/aries/trunk/application/application-api/src/main/java/org/apache/aries/application/management/AriesApplicationManager.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-api/src/main/java/org/apache/aries/application/management/AriesApplicationManager.java?rev=911409&r1=911408&r2=911409&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-api/src/main/java/org/apache/aries/application/management/AriesApplicationManager.java (original)
+++ incubator/aries/trunk/application/application-api/src/main/java/org/apache/aries/application/management/AriesApplicationManager.java Thu Feb 18 14:11:29 2010
@@ -32,7 +32,10 @@
 public interface AriesApplicationManager
 {
   /**
-   * Create an AriesApplication from a local resource
+   * Create an AriesApplication from a local resource.
+   * The application won't be automatically resolved if the
+   * archive does not contain a deployment manifest.
+   *
    * @param source .eba file, or exploded directory
    * @return AriesApplication
    * @throws ManagementException
@@ -40,7 +43,10 @@
   public AriesApplication createApplication(IDirectory source) throws ManagementException;
   
   /**
-   * Create an AriesApplication from a remote resource
+   * Create an AriesApplication from a remote resource.
+   * The application won't be automatically resolved if the
+   * archive does not contain a deployment manifest.
+   *
    * @param url
    * @return
    * @throws ManagementException
@@ -49,13 +55,18 @@
   
   /**
    * Install an AriesApplication - i.e. load its bundles into the runtime, but do 
-   * not start them. 
+   * not start them.
+   * If the application is not resolved, a call to {@link #resolve(AriesApplication, ResolveConstraint...)}
+   * will be performed and the resolved application will be installed.  In such a case the resolved
+   * application can be obtained by calling {@link org.apache.aries.application.management.ApplicationContext#getApplication()}
+   * on the returned ApplicationContext.
+   *
    * @param app Application to install 
    * @return ApplicationContext, a handle to an application in the runtime
    * @throws BundleException
    * @throws ManagementException 
    */
-  public ApplicationContext install(AriesApplication app) throws BundleException, ManagementException;
+  public ApplicationContext install(AriesApplication app) throws BundleException, ManagementException, ResolverException;
   
   /**
    * Uninstall an AriesApplication - i.e. unload its bundles from the runtime. 
@@ -77,8 +88,10 @@
   public void removeApplicationListener(ApplicationListener l);
   
   /**
-   * Re-resolve an AriesApplication against a set of constraints. Each ResolveConstraint
-   * represents a single proposed change to the content of an 
+   * Resolve an AriesApplication against a set of constraints. Each ResolveConstraint
+   * represents a single proposed change to the content of an application.
+   * If no constraints are given, a default resolution will be performed.
+   *
    * @param originalApp Original application
    * @param constraints Constraints
    * @throws ResolverException

Modified: incubator/aries/trunk/application/application-management/src/main/java/org/apache/aries/application/management/impl/AriesApplicationImpl.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-management/src/main/java/org/apache/aries/application/management/impl/AriesApplicationImpl.java?rev=911409&r1=911408&r2=911409&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-management/src/main/java/org/apache/aries/application/management/impl/AriesApplicationImpl.java (original)
+++ incubator/aries/trunk/application/application-management/src/main/java/org/apache/aries/application/management/impl/AriesApplicationImpl.java Thu Feb 18 14:11:29 2010
@@ -86,7 +86,11 @@
   public void setDeploymentMetadata (DeploymentMetadata dm) { 
     _deploymentMetadata = dm;
   }
-  
+
+  public Map<String, InputStream> getModifiedBundles() {
+    return _modifiedBundles;
+  }
+
   public void setModifiedBundles (Map<String, InputStream> modifiedBundles) {
     _modifiedBundles = modifiedBundles;
   }
@@ -95,6 +99,10 @@
     _localPlatform = lp;
   }
 
+  public boolean isResolved() {
+    return getDeploymentMetadata() != null;
+  }
+
   public void store(File f) throws FileNotFoundException, IOException {
     OutputStream os = new FileOutputStream (f);
     store(os);

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=911409&r1=911408&r2=911409&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 Thu Feb 18 14:11:29 2010
@@ -217,13 +217,23 @@
     return app;
   }
 
-  public AriesApplication resolve(AriesApplication originalApp,
-      ResolveConstraint... constraints) {
-    // TODO Auto-generated method stub
-    return null;
+  public AriesApplication resolve(AriesApplication originalApp, ResolveConstraint... constraints) throws ResolverException {
+    AriesApplicationImpl application = new AriesApplicationImpl(originalApp.getApplicationMetadata(), originalApp.getBundleInfo(), _localPlatform);
+    Set<BundleInfo> additionalBundlesRequired = _resolver.resolve(application);
+    DeploymentMetadata deploymentMetadata = _deploymentMetadataFactory.createDeploymentMetadata(application, additionalBundlesRequired);
+    application.setDeploymentMetadata(deploymentMetadata);
+    // Store a reference to any modified bundles
+    if (originalApp instanceof AriesApplicationImpl) {
+        // TODO: are we really passing streams around ?
+        application.setModifiedBundles(((AriesApplicationImpl) originalApp).getModifiedBundles());
+    }
+    return application;
   } 
 
-  public ApplicationContext install(AriesApplication app) throws BundleException, ManagementException {
+  public ApplicationContext install(AriesApplication app) throws BundleException, ManagementException, ResolverException {
+    if (!app.isResolved()) {
+        app = resolve(app);
+    }
     ApplicationContext result = _applicationContextManager.getApplicationContext(app);
     return result;
   }