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/01/14 16:10:26 UTC

svn commit: r899230 - 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/ application-management/src/main/java/...

Author: mnuttall
Date: Thu Jan 14 15:10:25 2010
New Revision: 899230

URL: http://svn.apache.org/viewvc?rev=899230&view=rev
Log:
ARIES-89: Implement application support: Very basic runtime support, and some improved logging

Added:
    incubator/aries/trunk/application/application-management/src/main/java/org/apache/aries/application/management/internal/
    incubator/aries/trunk/application/application-management/src/main/java/org/apache/aries/application/management/internal/MessageUtil.java
    incubator/aries/trunk/application/application-management/src/main/java/org/apache/aries/application/management/messages/AppManagementMessages.properties
Modified:
    incubator/aries/trunk/application/application-api/src/main/java/org/apache/aries/application/management/ApplicationContext.java
    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
    incubator/aries/trunk/application/application-management/src/main/resources/OSGI-INF/blueprint/app-management.xml
    incubator/aries/trunk/application/application-runtime/pom.xml

Modified: incubator/aries/trunk/application/application-api/src/main/java/org/apache/aries/application/management/ApplicationContext.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-api/src/main/java/org/apache/aries/application/management/ApplicationContext.java?rev=899230&r1=899229&r2=899230&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-api/src/main/java/org/apache/aries/application/management/ApplicationContext.java (original)
+++ incubator/aries/trunk/application/application-api/src/main/java/org/apache/aries/application/management/ApplicationContext.java Thu Jan 14 15:10:25 2010
@@ -22,6 +22,7 @@
 import java.util.Set;
 
 import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleException;
 
 /**
  * Represents an Aries application in the runtime
@@ -30,8 +31,8 @@
 {
   public ApplicationState getApplicationState();
   public AriesApplication getApplication();
-  public void start();
-  public void stop();
+  public void start() throws BundleException;
+  public void stop() throws BundleException;
   public Set<Bundle> getApplicationContent(); // 
   
   public enum ApplicationState

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=899230&r1=899229&r2=899230&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 Jan 14 15:10:25 2010
@@ -40,7 +40,7 @@
   public DeploymentMetadata getDeploymentMetadata();
 
   /** the set of bundles included in the application by value */
-  public Set<BundleInfo> getBundles();
+  public Set<BundleInfo> getBundleInfo();
 
   /** Stores any changes to disk using this implementations storage form */
   public void store(File f) throws FileNotFoundException, IOException;

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=899230&r1=899229&r2=899230&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 Jan 14 15:10:25 2010
@@ -21,9 +21,9 @@
 package org.apache.aries.application.management;
 
 import java.net.URL;
-import java.util.Set;
 
 import org.apache.aries.application.filesystem.IDirectory;
+import org.osgi.framework.BundleException;
 
 /**
  * Create, install and uninstall applications via this service. 
@@ -32,8 +32,8 @@
 {
   public AriesApplication createApplication(IDirectory source) throws ManagementException;
   public AriesApplication createApplication(URL url) throws ManagementException;
-  public ApplicationContext install(AriesApplication app);
-  public void uninstall(ApplicationContext app);
+  public ApplicationContext install(AriesApplication app) throws BundleException;
+  public void uninstall(ApplicationContext app) throws BundleException;
   public void addApplicationListener(ApplicationListener l);
   public void removeApplicationListener(ApplicationListener l);
   AriesApplication resolve (AriesApplication originalApp, ResolveConstraint ... constraints);

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=899230&r1=899229&r2=899230&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 Jan 14 15:10:25 2010
@@ -38,9 +38,13 @@
 import org.apache.aries.application.management.LocalPlatform;
 import org.apache.aries.application.utils.AppConstants;
 import org.apache.aries.application.utils.filesystem.IOUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class AriesApplicationImpl implements AriesApplication {
 
+  private static final Logger _logger = LoggerFactory.getLogger("org.apache.aries.application.management");
+
   private Set<BundleInfo> _bundleInfo;
   private ApplicationMetadata _applicationMetadata;
   private DeploymentMetadata _deploymentMetadata;
@@ -71,7 +75,7 @@
     return _applicationMetadata;
   }
 
-  public Set<BundleInfo> getBundles() {
+  public Set<BundleInfo> getBundleInfo() {
     return _bundleInfo;
   }
 
@@ -159,7 +163,7 @@
     IOUtils.zipUp(tempDir, targetStream);
     if (!IOUtils.deleteRecursive(tempDir))
     {
-      // TODO: Log a warning
+      _logger.warn("APPMANAGEMENT0001E", tempDir);
     }
   }
 }

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=899230&r1=899229&r2=899230&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 Jan 14 15:10:25 2010
@@ -41,6 +41,7 @@
 import org.apache.aries.application.filesystem.IDirectory;
 import org.apache.aries.application.filesystem.IFile;
 import org.apache.aries.application.management.ApplicationContext;
+import org.apache.aries.application.management.ApplicationContextManager;
 import org.apache.aries.application.management.ApplicationListener;
 import org.apache.aries.application.management.AriesApplication;
 import org.apache.aries.application.management.AriesApplicationManager;
@@ -51,12 +52,15 @@
 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.internal.MessageUtil;
 import org.apache.aries.application.utils.AppConstants;
 import org.apache.aries.application.utils.filesystem.FileSystem;
 import org.apache.aries.application.utils.filesystem.IOUtils;
 import org.apache.aries.application.utils.manifest.BundleManifest;
 import org.apache.aries.application.utils.manifest.ManifestDefaultsInjector;
 import org.apache.aries.application.utils.manifest.ManifestProcessor;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleException;
 import org.osgi.framework.ServiceException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -68,6 +72,7 @@
   private List<BundleConverter> _bundleConverters;
   private AriesApplicationResolver _resolver;
   private LocalPlatform _localPlatform;
+  private ApplicationContextManager _applicationContextManager;
 
   private static final Logger _logger = LoggerFactory.getLogger("org.apache.aries.application.management.impl");
 
@@ -91,6 +96,10 @@
     _localPlatform = lp;
   }
   
+  public void setApplicationContextManager (ApplicationContextManager acm) { 
+    _applicationContextManager = acm;
+  }
+  
   
   /**
    * Create an AriesApplication from a .eba file: a zip file with a '.eba' extension
@@ -110,10 +119,15 @@
       IFile deploymentManifest = ebaFile.getFile(AppConstants.DEPLOYMENT_MF);
       if (deploymentManifest != null) { 
         deploymentMetadata = _deploymentMetadataFactory.createDeploymentMetadata(deploymentManifest);
+        
+        // Validate: symbolic names must match
+        String appSymbolicName = applicationMetadata.getApplicationSymbolicName();
+        String depSymbolicName = applicationMetadata.getApplicationSymbolicName();
+        if (!appSymbolicName.equals(depSymbolicName)) {
+          throw new ManagementException (MessageUtil.getMessage("APPMANAGEMENT0002E", ebaFile.getName(), appSymbolicName, depSymbolicName));
+        }
       }
       
-      // TODO: validate
-      
       /* 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
@@ -130,7 +144,7 @@
           if (bm.isValid()) {
             extraBundlesInfo.add(new BundleInfoImpl(bm, f.toURL().toExternalForm()));
           } else if (deploymentMetadata != null) {
-            throw new ManagementException ("Invalid bundle " + f.getName() + " found when DEPLOYMENT.MF present");
+            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
             InputStream convertedBinary = null;
@@ -147,9 +161,9 @@
             }
             if (conversionExceptions.size() > 0) {
               for (ConversionException cx : conversionExceptions) { 
-                _logger.error("Conversion failure", cx);
+                _logger.error("APPMANAGEMENT0004E", new Object[]{f.getName(), ebaFile.getName(), cx});
               }
-              throw new ManagementException ("createApplication failed due to conversion failures: see log for details");
+              throw new ManagementException (MessageUtil.getMessage("APPMANAGEMENT0005E", ebaFile.getName()));
             }
             if (convertedBinary != null) { 
               modifiedBundles.put (f.getName(), convertedBinary);
@@ -172,7 +186,7 @@
         
       }
     } catch (IOException iox) { 
-      _logger.error ("createApplication failed", iox);
+      _logger.error ("APPMANAGEMENT0006E", new Object []{ebaFile.getName(), iox});
       throw new ManagementException(iox);
     }
     
@@ -208,14 +222,17 @@
     // TODO Auto-generated method stub
     return null;
   } 
-  
+
   public ApplicationContext install(AriesApplication app) {
-    // TODO Auto-generated method stub
-    return null;
+    ApplicationContext result = _applicationContextManager.getApplicationContext(app);
+    return result;
   }
   
-  public void uninstall(ApplicationContext app) {
-    // TODO Auto-generated method stub
+  public void uninstall(ApplicationContext app) throws BundleException {
+    Set<Bundle> bundles = app.getApplicationContent();
+    for (Bundle b : bundles) { 
+      b.uninstall();
+    }
 
   }
 
@@ -245,7 +262,7 @@
         is = f.open();
         result = ManifestProcessor.parseManifest(is);
       } catch (IOException iox) { 
-        // TODO: log error
+        _logger.error ("APPMANAGEMENT0007E", new Object[]{source.getName(), iox});
         throw iox;
       } finally { 
         IOUtils.close(is);

Added: incubator/aries/trunk/application/application-management/src/main/java/org/apache/aries/application/management/internal/MessageUtil.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-management/src/main/java/org/apache/aries/application/management/internal/MessageUtil.java?rev=899230&view=auto
==============================================================================
--- incubator/aries/trunk/application/application-management/src/main/java/org/apache/aries/application/management/internal/MessageUtil.java (added)
+++ incubator/aries/trunk/application/application-management/src/main/java/org/apache/aries/application/management/internal/MessageUtil.java Thu Jan 14 15:10:25 2010
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIESOR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.aries.application.management.internal;
+
+import java.text.MessageFormat;
+import java.util.ResourceBundle;
+
+public class MessageUtil
+{
+  /** The resource bundle for blueprint messages */
+  private final static ResourceBundle messages = ResourceBundle.getBundle("org.apache.aries.application.management.messages.AppManagementMessages");
+  
+  /**
+   * Resolve a message from the bundle, including any necessary formatting.
+   * 
+   * @param key     the message key.
+   * @param inserts any required message inserts.
+   * @return        the message translated into the server local.
+   */
+  public static final String getMessage(String key, Object ... inserts)
+  {
+    String msg = messages.getString(key);
+    
+    if (inserts.length > 0)
+      msg = MessageFormat.format(msg, inserts);
+    
+    return msg;
+  }
+}

Added: incubator/aries/trunk/application/application-management/src/main/java/org/apache/aries/application/management/messages/AppManagementMessages.properties
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-management/src/main/java/org/apache/aries/application/management/messages/AppManagementMessages.properties?rev=899230&view=auto
==============================================================================
--- incubator/aries/trunk/application/application-management/src/main/java/org/apache/aries/application/management/messages/AppManagementMessages.properties (added)
+++ incubator/aries/trunk/application/application-management/src/main/java/org/apache/aries/application/management/messages/AppManagementMessages.properties Thu Jan 14 15:10:25 2010
@@ -0,0 +1,7 @@
+APPMANAGEMENT0001E=APPMANAGEMENT0001E: Unable to fully delete directory {0}. 
+APPMANAGEMENT0002E=APPMANAGEMENT0002E: Unable to create Aries application from {0} since APPLICATION.MF symbolic name {1} does not equals DEPLOYMENT.MF symbolic name {2}.
+APPMANAGEMENT0003E=APPMANAGEMENT0003E: Invalid bundle {0} found when DEPLOYMENT.MF present in {1}.
+APPMANAGEMENT0004E=APPMANAGEMENT0004E: Exception caught when converting artifact {0} in {1}: {2}.
+APPMANAGEMENT0005E=APPMANAGEMENT0005E: Failed to create application from {0} due to conversion errors: see log for details.
+APPMANAGEMENT0006E=APPMANAGEMENT0006E: IOException encountered while constructing Aries application from {0}: {1}.
+APPMANAGEMENT0007E=APPMANAGEMENT0007E: IOException encountered while parsing APPICATION.MF in {0}: {1}. 
\ No newline at end of file

Modified: incubator/aries/trunk/application/application-management/src/main/resources/OSGI-INF/blueprint/app-management.xml
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-management/src/main/resources/OSGI-INF/blueprint/app-management.xml?rev=899230&r1=899229&r2=899230&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-management/src/main/resources/OSGI-INF/blueprint/app-management.xml (original)
+++ incubator/aries/trunk/application/application-management/src/main/resources/OSGI-INF/blueprint/app-management.xml Thu Jan 14 15:10:25 2010
@@ -25,6 +25,7 @@
     <property name="bundleConverters" ref="bundle-converters"/>
     <property name="resolver" ref="resolver"/>
     <property name="localPlatform" ref="localPlatform"/>
+    <property name="applicationContextManager" ref="application-context-manager"/>
   </bean>
   
   <reference id="app-metadata-manager" interface="org.apache.aries.application.ApplicationMetadataManager"/>
@@ -34,6 +35,7 @@
                   availability="optional"/>
   <reference id="resolver" interface="org.apache.aries.application.management.AriesApplicationResolver"/>
   <reference id="localPlatform" interface="org.apache.aries.application.management.LocalPlatform"/>
+  <reference id="application-context-manager" interface="org.apache.aries.application.management.ApplicationContextManager"/>
     
   <service interface="org.apache.aries.application.management.AriesApplicationManager" ref="manager-service" />
   

Modified: incubator/aries/trunk/application/application-runtime/pom.xml
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-runtime/pom.xml?rev=899230&r1=899229&r2=899230&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-runtime/pom.xml (original)
+++ incubator/aries/trunk/application/application-runtime/pom.xml Thu Jan 14 15:10:25 2010
@@ -7,7 +7,10 @@
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.apache.aries.application</groupId>
   <artifactId>application-runtime</artifactId>
-  <name>application-runtime</name>
+    <name>Apache Aries application runtime</name>
+  <description>
+      A very basic runtime implementation
+  </description>
   <version>1.0.0-incubating-SNAPSHOT</version>
   <url>http://maven.apache.org</url>
  <dependencies>
@@ -55,4 +58,23 @@
   		<version>1.0.0-incubating-SNAPSHOT</version>
   	</dependency>
   </dependencies>
+  
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.felix</groupId> 
+        <artifactId>maven-bundle-plugin</artifactId>
+        <extensions>true</extensions>
+        <configuration> 
+           <instructions>
+	         <Bundle-SymbolicName>${pom.groupId}.runtime</Bundle-SymbolicName>
+	         <Bundle-Activator>org.apache.aries.application.runtime.internal.Activator</Bundle-Activator>
+             <Private-Package>org.apache.aries.application.management.impl</Private-Package> 
+             <_versionpolicy>[$(version;==;$(@)),$(version;+;$(@)))</_versionpolicy>
+             <_removeheaders>Ignore-Package,Include-Resource,Private-Package,Bundle-DocURL</_removeheaders>
+         </instructions>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
 </project>
\ No newline at end of file