You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2012/05/22 01:55:51 UTC

svn commit: r1341277 - /openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBArchiveProcessor.java

Author: rmannibucau
Date: Mon May 21 23:55:51 2012
New Revision: 1341277

URL: http://svn.apache.org/viewvc?rev=1341277&view=rev
Log:
some persistenceurl management (to enhance)

Modified:
    openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBArchiveProcessor.java

Modified: openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBArchiveProcessor.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBArchiveProcessor.java?rev=1341277&r1=1341276&r2=1341277&view=diff
==============================================================================
--- openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBArchiveProcessor.java (original)
+++ openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBArchiveProcessor.java Mon May 21 23:55:51 2012
@@ -1,7 +1,13 @@
 package org.apache.openejb.arquillian.openejb;
 
+import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
+import java.lang.reflect.Field;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.net.URLStreamHandler;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
@@ -31,12 +37,16 @@ import org.jboss.shrinkwrap.api.Archive;
 import org.jboss.shrinkwrap.api.ArchivePath;
 import org.jboss.shrinkwrap.api.Node;
 import org.jboss.shrinkwrap.api.asset.Asset;
+import org.jboss.shrinkwrap.api.asset.FileAsset;
+import org.jboss.shrinkwrap.api.asset.UrlAsset;
+import org.jboss.shrinkwrap.api.spec.WebArchive;
 import org.jboss.shrinkwrap.impl.base.filter.IncludeRegExpPaths;
 
 public class OpenEJBArchiveProcessor implements ApplicationArchiveProcessor {
     private static final Logger LOGGER = Logger.getLogger(OpenEJBArchiveProcessor.class.getName());
 
     private static final String META_INF = "META-INF/";
+    private static final String WEB_INF = "WEB-INF/";
     private static final String EJB_JAR_XML = "ejb-jar.xml";
 
     private static final String BEANS_XML = "beans.xml";
@@ -54,6 +64,13 @@ public class OpenEJBArchiveProcessor imp
         final Class<?> javaClass = testClass.getJavaClass();
         final AppModule appModule = new AppModule(javaClass.getClassLoader(), javaClass.getName());
 
+        final String prefix;
+        if (archive instanceof WebArchive) {
+            prefix = WEB_INF;
+        } else {
+            prefix = META_INF;
+        }
+
         // add the test as a managed bean to be able to inject into it easily
         {
             final EjbJar ejbJar = new EjbJar();
@@ -68,7 +85,7 @@ public class OpenEJBArchiveProcessor imp
         final org.apache.xbean.finder.archive.Archive finderArchive = finderArchive(archive, appModule.getClassLoader());
 
         final EjbJar ejbJar;
-        final Node ejbJarXml = archive.get(META_INF.concat(EJB_JAR_XML));
+        final Node ejbJarXml = archive.get(prefix.concat(EJB_JAR_XML));
         if (ejbJarXml != null) {
             try {
                 ejbJar = ReadDescriptors.readEjbJar(ejbJarXml.getAsset().openStream());
@@ -84,35 +101,46 @@ public class OpenEJBArchiveProcessor imp
         appModule.getEjbModules().add(ejbModule);
 
         {
-            final Node beansXml = archive.get(META_INF.concat(BEANS_XML));
+            final Node beansXml = archive.get(prefix.concat(BEANS_XML));
             if (beansXml != null) {
                 ejbModule.getAltDDs().put(BEANS_XML, new AssetSource(beansXml.getAsset()));
             }
         }
 
         {
-            final Node persistenceXml = archive.get(META_INF.concat(PERSISTENCE_XML));
+            final Node persistenceXml = archive.get(prefix.concat(PERSISTENCE_XML));
             if (persistenceXml != null) {
-                appModule.getAltDDs().put(PERSISTENCE_XML, Arrays.asList(new AssetSource(persistenceXml.getAsset())));
+                final Asset asset = persistenceXml.getAsset();
+                if (asset instanceof UrlAsset) {
+                    appModule.getAltDDs().put(PERSISTENCE_XML, Arrays.asList(get(URL.class, "url", asset)));
+                } else if (asset instanceof FileAsset) {
+                    try {
+                        appModule.getAltDDs().put(PERSISTENCE_XML, Arrays.asList(get(File.class, "file", asset).toURI().toURL()));
+                    } catch (MalformedURLException e) {
+                        appModule.getAltDDs().put(PERSISTENCE_XML, Arrays.asList(new AssetSource(persistenceXml.getAsset())));
+                    }
+                } else {
+                    appModule.getAltDDs().put(PERSISTENCE_XML, Arrays.asList(new AssetSource(persistenceXml.getAsset())));
+                }
             }
         }
 
         {
-            final Node openejbJarXml = archive.get(META_INF.concat(OPENEJB_JAR_XML));
+            final Node openejbJarXml = archive.get(prefix.concat(OPENEJB_JAR_XML));
             if (openejbJarXml != null) {
                 ejbModule.getAltDDs().put(OPENEJB_JAR_XML, new AssetSource(openejbJarXml.getAsset()));
             }
         }
 
         {
-            final Node validationXml = archive.get(META_INF.concat(VALIDATION_XML));
+            final Node validationXml = archive.get(prefix.concat(VALIDATION_XML));
             if (validationXml != null) {
                 ejbModule.getAltDDs().put(VALIDATION_XML, new AssetSource(validationXml.getAsset()));
             }
         }
 
         {
-            final Node envEntriesProperties = archive.get(META_INF.concat(ENV_ENTRIES_PROPERTIES));
+            final Node envEntriesProperties = archive.get(prefix.concat(ENV_ENTRIES_PROPERTIES));
             if (envEntriesProperties != null) {
                 InputStream is = null;
                 final Properties properties = new Properties();
@@ -135,6 +163,16 @@ public class OpenEJBArchiveProcessor imp
         module.set(appModule);
     }
 
+    private <T> T get(Class<T> fileClass, String attr, Asset asset) {
+        try {
+            final Field field = asset.getClass().getDeclaredField(attr);
+            field.setAccessible(true);
+            return fileClass.cast(field.get(asset));
+        } catch (Exception e) {
+            return null;
+        }
+    }
+
     private org.apache.xbean.finder.archive.Archive finderArchive(final Archive<?> archive, final ClassLoader cl) {
         final List<Class<?>> classes = new ArrayList<Class<?>>();
         final Map<ArchivePath, Node> content = archive.getContent(new IncludeRegExpPaths(".*.class"));