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 2014/10/11 23:22:18 UTC

svn commit: r1631122 - in /tomee/tomee/trunk: arquillian/arquillian-openejb-embedded-5/src/main/java/org/apache/openejb/arquillian/openejb/ arquillian/arquillian-openejb-embedded-5/src/test/java/org/apache/openejb/arquillian/openejb/ arquillian/arquill...

Author: rmannibucau
Date: Sat Oct 11 21:22:18 2014
New Revision: 1631122

URL: http://svn.apache.org/r1631122
Log:
supporting multiple beans.xml in SW openejb embedded - note the fact we are fully embedded can be an issue later in TCKs, we can desire an in between mode where we dump even with openejb :(

Modified:
    tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-5/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBArchiveProcessor.java
    tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-5/src/test/java/org/apache/openejb/arquillian/openejb/ExceptionInjectionTest.java
    tomee/tomee/trunk/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/exception/DeploymentExceptionErrorTest.java
    tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/ReadDescriptors.java
    tomee/tomee/trunk/tck/cdi-embedded/src/test/resources/failing.xml

Modified: tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-5/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBArchiveProcessor.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-5/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBArchiveProcessor.java?rev=1631122&r1=1631121&r2=1631122&view=diff
==============================================================================
--- tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-5/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBArchiveProcessor.java (original)
+++ tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-5/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBArchiveProcessor.java Sat Oct 11 21:22:18 2014
@@ -19,6 +19,7 @@ package org.apache.openejb.arquillian.op
 import org.apache.openejb.ClassLoaderUtil;
 import org.apache.openejb.OpenEJBException;
 import org.apache.openejb.OpenEJBRuntimeException;
+import org.apache.openejb.cdi.CompositeBeans;
 import org.apache.openejb.config.AppModule;
 import org.apache.openejb.config.DeploymentLoader;
 import org.apache.openejb.config.EjbModule;
@@ -96,6 +97,7 @@ public class OpenEJBArchiveProcessor {
         }
 
         final List<URL> additionalPaths = new ArrayList<URL>();
+        final List<AssetSource> beansXmlMerged = new ArrayList<>();
 
         final String prefix;
         if (WebArchive.class.isInstance(archive)) {
@@ -115,6 +117,14 @@ public class OpenEJBArchiveProcessor {
                 } else if (ArchiveAsset.class.isInstance(asset)) {
                     final Archive<?> nestedArchive = ArchiveAsset.class.cast(asset).getArchive();
                     if (!isExcluded(nestedArchive.getName())) {
+                        final Node bXmlNode = nestedArchive.get(META_INF + BEANS_XML);
+                        if (bXmlNode != null) {
+                            try {
+                                beansXmlMerged.add(new AssetSource(bXmlNode.getAsset(), new URL("jar:file://!/WEB-INF/lib/" + nestedArchive.getName() + "!/META-INF/beans.xml")));
+                            } catch (final MalformedURLException e) {
+                                // shouldn't occur
+                            }
+                        }
                         archive.merge(nestedArchive);
                     }
                 }
@@ -198,7 +208,12 @@ public class OpenEJBArchiveProcessor {
             beansXml = archive.get(WEB_INF_CLASSES.concat(META_INF).concat(BEANS_XML));
         }
         if (beansXml != null) {
-            ejbModule.getAltDDs().put(BEANS_XML, new AssetSource(beansXml.getAsset()));
+            try {
+                beansXmlMerged.add(new AssetSource(beansXml.getAsset(), new URL("jar:file://!/WEB-INF/classes/beans.xml")));
+            } catch (final MalformedURLException e) {
+                // shouldn't occur
+            }
+            ejbModule.getAltDDs().put(BEANS_XML, beansXmlMerged);
         }
 
         final org.apache.xbean.finder.archive.Archive finderArchive = finderArchive(beansXml, archive, tempClassLoader, additionalPaths);
@@ -222,17 +237,17 @@ public class OpenEJBArchiveProcessor {
                     try {
                         appModule.getAltDDs().put(PERSISTENCE_XML, Arrays.asList(get(File.class, "file", asset).toURI().toURL()));
                     } catch (final MalformedURLException e) {
-                        appModule.getAltDDs().put(PERSISTENCE_XML, Arrays.asList(new AssetSource(persistenceXml.getAsset())));
+                        appModule.getAltDDs().put(PERSISTENCE_XML, Arrays.asList(new AssetSource(persistenceXml.getAsset(), null)));
                     }
                 } else if (ClassLoaderAsset.class.isInstance(asset)) {
                     final URL url = get(ClassLoader.class, "classLoader", asset).getResource(get(String.class, "resourceName", asset));
                     if (url != null) {
                         appModule.getAltDDs().put(PERSISTENCE_XML, Arrays.asList(url));
                     } else {
-                        appModule.getAltDDs().put(PERSISTENCE_XML, Arrays.asList(new AssetSource(persistenceXml.getAsset())));
+                        appModule.getAltDDs().put(PERSISTENCE_XML, Arrays.asList(new AssetSource(persistenceXml.getAsset(), null)));
                     }
                 } else {
-                    appModule.getAltDDs().put(PERSISTENCE_XML, Arrays.asList(new AssetSource(persistenceXml.getAsset())));
+                    appModule.getAltDDs().put(PERSISTENCE_XML, Arrays.asList(new AssetSource(persistenceXml.getAsset(), null)));
                 }
             }
         }
@@ -240,7 +255,7 @@ public class OpenEJBArchiveProcessor {
         {
             final Node openejbJarXml = archive.get(prefix.concat(OPENEJB_JAR_XML));
             if (openejbJarXml != null) {
-                ejbModule.getAltDDs().put(OPENEJB_JAR_XML, new AssetSource(openejbJarXml.getAsset()));
+                ejbModule.getAltDDs().put(OPENEJB_JAR_XML, new AssetSource(openejbJarXml.getAsset(), null));
             }
         }
 
@@ -251,15 +266,15 @@ public class OpenEJBArchiveProcessor {
                 validationXml = archive.get(WEB_INF_CLASSES.concat(META_INF).concat(VALIDATION_XML));
             }
             if (validationXml != null) {
-                testDD.put(VALIDATION_XML, new AssetSource(validationXml.getAsset())); // use same config otherwise behavior is weird
-                ejbModule.getAltDDs().put(VALIDATION_XML, new AssetSource(validationXml.getAsset()));
+                testDD.put(VALIDATION_XML, new AssetSource(validationXml.getAsset(), null)); // use same config otherwise behavior is weird
+                ejbModule.getAltDDs().put(VALIDATION_XML, new AssetSource(validationXml.getAsset(), null));
             }
         }
 
         {
             final Node resourcesXml = archive.get(prefix.concat(RESOURCES_XML));
             if (resourcesXml != null) {
-                ejbModule.getAltDDs().put(RESOURCES_XML, new AssetSource(resourcesXml.getAsset()));
+                ejbModule.getAltDDs().put(RESOURCES_XML, new AssetSource(resourcesXml.getAsset(), null));
             }
         }
 
@@ -366,10 +381,11 @@ public class OpenEJBArchiveProcessor {
         return name.substring(1, name.length() - 6);
     }
 
-    private static final class AssetSource implements ReadDescriptors.Source {
+    private static final class AssetSource extends ReadDescriptors.UrlSource {
         private Asset asset;
 
-        private AssetSource(final Asset asset) {
+        private AssetSource(final Asset asset, final URL url) {
+            super(url);
             this.asset = asset;
         }
 

Modified: tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-5/src/test/java/org/apache/openejb/arquillian/openejb/ExceptionInjectionTest.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-5/src/test/java/org/apache/openejb/arquillian/openejb/ExceptionInjectionTest.java?rev=1631122&r1=1631121&r2=1631122&view=diff
==============================================================================
--- tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-5/src/test/java/org/apache/openejb/arquillian/openejb/ExceptionInjectionTest.java (original)
+++ tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-5/src/test/java/org/apache/openejb/arquillian/openejb/ExceptionInjectionTest.java Sat Oct 11 21:22:18 2014
@@ -16,7 +16,6 @@
  */
 package org.apache.openejb.arquillian.openejb;
 
-import org.apache.openejb.OpenEJBException;
 import org.apache.webbeans.exception.WebBeansConfigurationException;
 import org.jboss.arquillian.container.spi.client.container.DeploymentException;
 import org.jboss.arquillian.container.test.api.Deployment;
@@ -43,10 +42,10 @@ public class ExceptionInjectionTest {
     private WebBeansConfigurationException owbException;
 
     @ArquillianResource
-    private OpenEJBException oejbException;
+    private javax.enterprise.inject.spi.DeploymentException oejbException;
 
     @Deployment(testable = false)
-    @ShouldThrowException(OpenEJBException.class)
+    @ShouldThrowException(javax.enterprise.inject.spi.DeploymentException.class)
     public static WebArchive war() {
         return ShrinkWrap.create(WebArchive.class)
                 .addAsWebInfResource(new StringAsset(Descriptors.create(BeansDescriptor.class)

Modified: tomee/tomee/trunk/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/exception/DeploymentExceptionErrorTest.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/exception/DeploymentExceptionErrorTest.java?rev=1631122&r1=1631121&r2=1631122&view=diff
==============================================================================
--- tomee/tomee/trunk/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/exception/DeploymentExceptionErrorTest.java (original)
+++ tomee/tomee/trunk/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/exception/DeploymentExceptionErrorTest.java Sat Oct 11 21:22:18 2014
@@ -16,7 +16,6 @@
  */
 package org.apache.openejb.arquillian.tests.exception;
 
-import org.apache.openejb.OpenEJBRuntimeException;
 import org.jboss.arquillian.container.spi.client.container.DeploymentException;
 import org.jboss.arquillian.container.test.api.Deployment;
 import org.jboss.arquillian.container.test.api.ShouldThrowException;
@@ -39,10 +38,10 @@ public class DeploymentExceptionErrorTes
     private DeploymentException de;
 
     @ArquillianResource
-    private OpenEJBRuntimeException oejbException;
+    private javax.enterprise.inject.spi.DeploymentException oejbException;
 
     @Deployment(testable = false)
-    @ShouldThrowException(OpenEJBRuntimeException.class)
+    @ShouldThrowException(javax.enterprise.inject.spi.DeploymentException.class)
     public static WebArchive war() {
         return ShrinkWrap.create(WebArchive.class)
                     .addAsWebInfResource(new StringAsset(Descriptors.create(BeansDescriptor.class)

Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/ReadDescriptors.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/ReadDescriptors.java?rev=1631122&r1=1631121&r2=1631122&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/ReadDescriptors.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/ReadDescriptors.java Sat Oct 11 21:22:18 2014
@@ -18,6 +18,7 @@
 package org.apache.openejb.config;
 
 import org.apache.openejb.OpenEJBException;
+import org.apache.openejb.cdi.CompositeBeans;
 import org.apache.openejb.config.sys.JSonConfigReader;
 import org.apache.openejb.config.sys.JaxbOpenejb;
 import org.apache.openejb.config.sys.Resources;
@@ -472,9 +473,38 @@ public class ReadDescriptors implements 
             }
         } else if (raw instanceof Beans) {
             ejbModule.setBeans((Beans) raw);
+        } else if (List.class.isInstance(raw)) {
+            final CompositeBeans compositeBeans = new CompositeBeans();
+            final List list = List.class.cast(raw);
+            if (!list.isEmpty()) {
+                for (final Object o : list) {
+                    try {
+                        final UrlSource urlSource = UrlSource.class.cast(o);
+                        mergeBeansXml(compositeBeans, readBeans(urlSource.get()), urlSource.getUrl());
+                    } catch (final IOException e) {
+                        throw new OpenEJBException(e);
+                    }
+                }
+                ejbModule.setBeans(compositeBeans);
+            }
         }
     }
 
+    private static Beans mergeBeansXml(final CompositeBeans current, final Beans beans, final URL url) {
+        current.getAlternativeClasses().addAll(beans.getAlternativeClasses());
+        current.getAlternativeStereotypes().addAll(beans.getAlternativeStereotypes());
+        current.getDecorators().addAll(beans.getDecorators());
+        current.getInterceptors().addAll(beans.getInterceptors());
+        current.getScan().getExclude().addAll(beans.getScan().getExclude());
+
+        // check is done here since later we lost the data of the origin
+        ReadDescriptors.checkDuplicatedByBeansXml(beans, current);
+
+        final String beanDiscoveryMode = beans.getBeanDiscoveryMode();
+        current.getDiscoveryByUrl().put(url, beanDiscoveryMode == null ? "ALL" : beanDiscoveryMode);
+        return current;
+    }
+
     private void readCmpOrm(final EjbModule ejbModule) throws OpenEJBException {
         final Object data = ejbModule.getAltDDs().get("openejb-cmp-orm.xml");
         if (data != null && !(data instanceof EntityMappings)) {
@@ -863,6 +893,10 @@ public class ReadDescriptors implements 
         public InputStream get() throws IOException {
             return IO.read(url);
         }
+
+        public URL getUrl() {
+            return url;
+        }
     }
 
     public static class StringSource implements Source {

Modified: tomee/tomee/trunk/tck/cdi-embedded/src/test/resources/failing.xml
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tck/cdi-embedded/src/test/resources/failing.xml?rev=1631122&r1=1631121&r2=1631122&view=diff
==============================================================================
--- tomee/tomee/trunk/tck/cdi-embedded/src/test/resources/failing.xml (original)
+++ tomee/tomee/trunk/tck/cdi-embedded/src/test/resources/failing.xml Sat Oct 11 21:22:18 2014
@@ -18,7 +18,7 @@
 <suite name="CDI TCK" verbose="0">
   <test name="CDI TCK">
     <classes>
-      <class name="org.jboss.cdi.tck.tests.decorators.definition.broken.nonExistantClassInBeansXml.NonExistantDecoratorClassInBeansXmlTest"/>
+      <class name="org.jboss.cdi.tck.tests.extensions.alternative.deployment.AlternativeInLibraryWithExtensionTest"/>
     </classes>
   </test>
 </suite>