You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by ga...@apache.org on 2009/12/04 21:48:16 UTC

svn commit: r887352 - /geronimo/server/trunk/plugins/aries/geronimo-aries-builder/src/main/java/org/apache/geronimo/aries/builder/AriesAppModuleBuilder.java

Author: gawor
Date: Fri Dec  4 20:48:16 2009
New Revision: 887352

URL: http://svn.apache.org/viewvc?rev=887352&view=rev
Log:
GERONIMO-4971: temporary code that installs aries application bundles

Modified:
    geronimo/server/trunk/plugins/aries/geronimo-aries-builder/src/main/java/org/apache/geronimo/aries/builder/AriesAppModuleBuilder.java

Modified: geronimo/server/trunk/plugins/aries/geronimo-aries-builder/src/main/java/org/apache/geronimo/aries/builder/AriesAppModuleBuilder.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/aries/geronimo-aries-builder/src/main/java/org/apache/geronimo/aries/builder/AriesAppModuleBuilder.java?rev=887352&r1=887351&r2=887352&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/aries/geronimo-aries-builder/src/main/java/org/apache/geronimo/aries/builder/AriesAppModuleBuilder.java (original)
+++ geronimo/server/trunk/plugins/aries/geronimo-aries-builder/src/main/java/org/apache/geronimo/aries/builder/AriesAppModuleBuilder.java Fri Dec  4 20:48:16 2009
@@ -21,9 +21,15 @@
 import java.io.InputStream;
 import java.net.URI;
 import java.net.URL;
+import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.List;
 import java.util.jar.JarEntry;
 import java.util.jar.JarFile;
+import java.util.jar.JarInputStream;
+import java.util.jar.Manifest;
 import java.util.zip.ZipEntry;
 
 import org.apache.aries.application.ApplicationMetadata;
@@ -43,9 +49,11 @@
 import org.apache.geronimo.kernel.Kernel;
 import org.apache.geronimo.kernel.Naming;
 import org.apache.geronimo.kernel.config.ConfigurationStore;
+import org.apache.geronimo.kernel.osgi.BundleUtils;
 import org.apache.geronimo.kernel.repository.Artifact;
 import org.apache.geronimo.kernel.repository.Environment;
 import org.osgi.framework.Bundle;
+import org.osgi.framework.Constants;
 import org.osgi.framework.ServiceReference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -132,20 +140,68 @@
         }
     }
     
+    private String getSymbolicName(Manifest mf) {
+        String name = null;
+        if (mf != null) {
+            name = (String) mf.getMainAttributes().getValue(Constants.BUNDLE_SYMBOLICNAME);
+        }
+        return name;
+    }
+    
     public void installModule(JarFile earFile, EARContext earContext, Module module, Collection configurationStores, ConfigurationStore targetConfigurationStore, Collection repositories) throws DeploymentException {
         AriesAppModule ariesModule = (AriesAppModule) module;        
         JarFile moduleFile = module.getModuleFile();
         
-        for (Content content : ariesModule.getApplicationMetadata().getApplicationContents()) {
-            ZipEntry entry = moduleFile.getEntry(content.getContentName() + ".jar");
-            System.out.println(entry + " " + content.getContentName());
-            try {
-                earContext.addInclude(URI.create(content.getContentName()), moduleFile, entry);
-            } catch (IOException e) {
-                throw new DeploymentException("Unable to copy app client module jar into configuration: " + moduleFile.getName(), e);
+        /*
+         * XXX: This is totally not right but for now allows us to install 
+         * simple Aries applications into Geronimo. 
+         */
+        HashMap<String, String> mapping = new HashMap<String, String>();
+        Enumeration<JarEntry> entries = moduleFile.entries();
+        while(entries.hasMoreElements()) {
+            JarEntry entry = entries.nextElement();
+            if (entry.getName().endsWith(".jar")) {
+                try {
+                    InputStream in = moduleFile.getInputStream(entry);
+                    JarInputStream jarInput = new JarInputStream(in);
+                    String name = getSymbolicName(jarInput.getManifest());
+                    if (name != null) {
+                        mapping.put(name, entry.getName());
+                    }
+                } catch (IOException e) {
+                    LOG.warn("Error getting jar entry {}", entry.getName(), e);
+                }
             }
         }
-                               
+
+        List<Bundle> installedBundles = new ArrayList<Bundle>();        
+        try {
+            for (Content content : ariesModule.getApplicationMetadata().getApplicationContents()) {
+                String entryName = mapping.get(content.getContentName());
+                if (entryName == null) {
+                    LOG.warn("Unknown bundle name in application context {}", content.getContentName());
+                    continue;
+                }
+                ZipEntry entry = moduleFile.getEntry(entryName);
+                if (entry == null) {
+                    // this should not happen
+                    throw new DeploymentException("Jar entry not found " + entryName);
+                }
+
+                InputStream in = moduleFile.getInputStream(entry);
+                Bundle appBundle = bundle.getBundleContext().installBundle(content.getContentName(), in);
+                installedBundles.add(appBundle);
+            }
+            
+            for (Bundle installedBundle : installedBundles) {
+                if (BundleUtils.canStart(installedBundle)) {
+                    installedBundle.start();
+                }
+            }
+        } catch (Exception e) {
+            throw new DeploymentException("Failed to install application", e);
+        }
+        
         module.setEarContext(earContext);
         module.setRootEarContext(earContext);
     }