Author: rmannibucau
Date: Sun Aug 21 20:59:19 2011
New Revision: 1160060

URL: http://svn.apache.org/viewvc?rev=1160060&view=rev
Log:
allowing persistence.xml to be read from file or an URL for standalone webapp

Modified:
    openejb/trunk/openejb3/assembly/openejb-lite/pom.xml
    openejb/trunk/openejb3/assembly/openejb-lite/src/main/assembly/client.xml
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java

Modified: openejb/trunk/openejb3/assembly/openejb-lite/pom.xml
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/assembly/openejb-lite/pom.xml?rev=1160060&r1=1160059&r2=1160060&view=diff
==============================================================================
--- openejb/trunk/openejb3/assembly/openejb-lite/pom.xml (original)
+++ openejb/trunk/openejb3/assembly/openejb-lite/pom.xml Sun Aug 21 20:59:19 
2011
@@ -71,10 +71,6 @@
           <groupId>org.apache.activemq</groupId>
           <artifactId>activemq-ra</artifactId>
         </exclusion>
-        <exclusion>
-          <groupId>org.apache.openjpa</groupId>
-          <artifactId>openjpa</artifactId>
-        </exclusion>
       </exclusions>
     </dependency>
   </dependencies>

Modified: 
openejb/trunk/openejb3/assembly/openejb-lite/src/main/assembly/client.xml
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/assembly/openejb-lite/src/main/assembly/client.xml?rev=1160060&r1=1160059&r2=1160060&view=diff
==============================================================================
--- openejb/trunk/openejb3/assembly/openejb-lite/src/main/assembly/client.xml 
(original)
+++ openejb/trunk/openejb3/assembly/openejb-lite/src/main/assembly/client.xml 
Sun Aug 21 20:59:19 2011
@@ -61,6 +61,7 @@
           <include>org.apache.openejb:openejb-itests-servlets</include>
           <include>org.apache.openejb:openejb-itests-client</include>
           <include>org.apache.openejb:openejb-client</include>
+          <include>org.apache.openjpa:openjpa</include>
 
           <!-- ActiveMQ -->
           <include>org.apache.activemq:activemq-core</include>

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java?rev=1160060&r1=1160059&r2=1160060&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java
 Sun Aug 21 20:59:19 2011
@@ -55,11 +55,9 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.net.MalformedURLException;
 import java.net.URL;
-import java.net.URLClassLoader;
 import java.net.URLDecoder;
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -75,6 +73,7 @@ import java.util.jar.Attributes;
 import java.util.jar.JarEntry;
 import java.util.jar.JarFile;
 import java.util.jar.Manifest;
+import java.util.zip.ZipEntry;
 
 import static org.apache.openejb.util.URLs.toFile;
 
@@ -185,16 +184,48 @@ public class DeploymentLoader implements
                 AppModule appModule = new 
AppModule(OpenEJB.class.getClassLoader(), file.getAbsolutePath(), new 
Application(), true);
                 addWebModule(appModule, baseUrl, 
OpenEJB.class.getClassLoader(), getContextRoot(), getModuleName());
 
-                File persistenceXml = new File(file, 
"WEB-INF/classes/META-INF/persistence.xml");
-                if (persistenceXml.exists() && persistenceXml.isFile()) {
+                URL persistenceUrl = null;
+                if (file.isDirectory()) {
+                    File persistenceXml = new File(file, 
"WEB-INF/classes/META-INF/persistence.xml");
+                    if (persistenceXml.exists() && persistenceXml.isFile()) {
+                        try {
+                            persistenceUrl = persistenceXml.toURI().toURL();
+                        } catch (MalformedURLException e) {
+                            // no-op
+                        }
+                    }
+                } else { // .war
+                    JarFile jf = null;
+                    try {
+                        jf = new JarFile(file);
+                    } catch (IOException e) {
+                        return appModule;
+                    }
+                    ZipEntry entry = 
jf.getEntry("WEB-INF/classes/META-INF/persistence.xml");
+                    if (entry != null) {
+                        String base = baseUrl.toString();
+                        if (!base.startsWith("jar:")) {
+                            base = "jar:" + base;
+                        }
+
+                        try {
+                            persistenceUrl = new URL(base + 
"!/WEB-INF/classes/META-INF/persistence.xml");
+                        } catch (MalformedURLException e) {
+                            // no-op
+                        }
+                    }
+                }
+
+                if (persistenceUrl != null) {
                     List<URL> persistenceUrls = (List<URL>) 
appModule.getAltDDs().get("persistence.xml");
                     if (persistenceUrls == null) {
                         persistenceUrls = new ArrayList<URL>();
                         appModule.getAltDDs().put("persistence.xml", 
persistenceUrls);
                     }
                     try {
-                        persistenceUrls.add(persistenceXml.toURI().toURL());
+                        persistenceUrls.add(persistenceUrl);
                     } catch (Exception e) {
+                        // no-op
                     }
                 }
                 addPersistenceUnits(appModule, baseUrl);


Reply via email to