Author: rmannibucau
Date: Wed Jan 16 00:27:29 2013
New Revision: 1433764

URL: http://svn.apache.org/viewvc?rev=1433764&view=rev
Log:
TOMEE-738 hooks to deploy rar in jar in WEB-INF/lib

Modified:
    
tomee/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java

Modified: 
tomee/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java
URL: 
http://svn.apache.org/viewvc/tomee/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java?rev=1433764&r1=1433763&r2=1433764&view=diff
==============================================================================
--- 
tomee/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java
 (original)
+++ 
tomee/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java
 Wed Jan 16 00:27:29 2013
@@ -249,8 +249,7 @@ public class DeploymentLoader implements
         // WEB-INF
         if (webModule.getAltDDs().containsKey("ra.xml")) {
             final String jarLocation = new File(webModule.getJarLocation(), 
"/WEB-INF/classes").getAbsolutePath();
-            final ConnectorModule connectorModule = 
createConnectorModule(jarLocation, jarLocation, webModule.getClassLoader(), 
webModule.getModuleId() + "RA");
-            connectorModule.getAltDDs().put("ra.xml", 
webModule.getAltDDs().get("ra.xml"));
+            final ConnectorModule connectorModule = 
createConnectorModule(jarLocation, jarLocation, webModule.getClassLoader(), 
webModule.getModuleId() + "RA", (URL) webModule.getAltDDs().get("ra.xml"));
             appModule.getConnectorModules().add(connectorModule);
         }
 
@@ -267,6 +266,33 @@ public class DeploymentLoader implements
                 logger.error("error processing url " + url.toExternalForm(), 
e);
             }
         }
+
+        for (URL url : webModule.getScannableUrls()) {
+            try {
+                final File file = URLs.toFile(url);
+                if (file.getName().endsWith(".jar")) {
+                    final JarFile jarFile = new JarFile(file);
+
+                    // TODO: better management of altdd
+                    String name = (ALTDD != null ? ALTDD + "." : "") + 
"ra.xml";
+
+                    JarEntry entry = jarFile.getJarEntry(name);
+                    if (entry == null) {
+                        name = "META-INF/" + name;
+                        entry = jarFile.getJarEntry(name);
+                    }
+                    if (entry == null) {
+                        continue;
+                    }
+
+                    final String jarLocation = file.getAbsolutePath();
+                    final ConnectorModule connectorModule = 
createConnectorModule(jarLocation, jarLocation, webModule.getClassLoader(), 
null);
+                    appModule.getConnectorModules().add(connectorModule);
+                }
+            } catch (Exception e) {
+                logger.error("error processing url " + url.toExternalForm(), 
e);
+            }
+        }
     }
 
     protected ClassLoader getOpenEJBClassLoader() {
@@ -1189,6 +1215,10 @@ public class DeploymentLoader implements
     }
 
     protected static ConnectorModule createConnectorModule(final String appId, 
final String rarPath, final ClassLoader parentClassLoader, final String 
moduleId) throws OpenEJBException {
+        return createConnectorModule(appId, rarPath, parentClassLoader, 
moduleId, null);
+    }
+
+    protected static ConnectorModule createConnectorModule(final String appId, 
final String rarPath, final ClassLoader parentClassLoader, final String 
moduleId, final URL raXmlUrl) throws OpenEJBException {
         final URL baseUrl;// unpack the rar file
         File rarFile = new File(rarPath);
         rarFile = unpack(rarFile);
@@ -1197,7 +1227,11 @@ public class DeploymentLoader implements
         // read the ra.xml file
         final Map<String, URL> descriptors = getDescriptors(baseUrl);
         Connector connector = null;
-        final URL rarXmlUrl = descriptors.get("ra.xml");
+        URL rarXmlUrl = descriptors.get("ra.xml");
+        if (rarXmlUrl == null && raXmlUrl != null) {
+            descriptors.put("ra.xml", raXmlUrl);
+            rarXmlUrl = raXmlUrl;
+        }
         if (rarXmlUrl != null) {
             connector = ReadDescriptors.readConnector(rarXmlUrl);
         }
@@ -1692,12 +1726,12 @@ public class DeploymentLoader implements
     }
 
     public static File unpack(final File jarFile) throws OpenEJBException {
-        if (jarFile.isDirectory()) {
+        if (jarFile.isDirectory() || jarFile.getName().endsWith(".jar")) {
             return jarFile;
         }
 
         String name = jarFile.getName();
-        if (name.endsWith(".jar") || name.endsWith(".ear") || 
name.endsWith(".zip") || name.endsWith(".war") || name.endsWith(".rar")) {
+        if (name.endsWith(".ear") || name.endsWith(".zip") || 
name.endsWith(".war") || name.endsWith(".rar")) {
             name = name.replaceFirst("....$", "");
         } else {
             name += ".unpacked";


Reply via email to