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/12 18:26:07 UTC

svn commit: r1631202 - in /tomee/tomee/trunk: arquillian/arquillian-common/src/main/java/org/apache/openejb/arquillian/common/enrichment/ arquillian/arquillian-openejb-embedded-5/src/main/java/org/apache/openejb/arquillian/openejb/ arquillian/arquillia...

Author: rmannibucau
Date: Sun Oct 12 16:26:06 2014
New Revision: 1631202

URL: http://svn.apache.org/r1631202
Log:
setup-ing EE tck in cdi-embedded, we'll need to enhance embedded support for session etc...

Modified:
    tomee/tomee/trunk/arquillian/arquillian-common/src/main/java/org/apache/openejb/arquillian/common/enrichment/OpenEJBEnricher.java
    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/main/java/org/apache/openejb/arquillian/openejb/server/ServiceManagers.java
    tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiScanner.java
    tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/ThreadSingletonServiceImpl.java
    tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
    tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/web/LightweightWebAppBuilder.java
    tomee/tomee/trunk/tck/cdi-embedded/pom.xml
    tomee/tomee/trunk/tck/cdi-embedded/src/test/resources/arquillian.xml
    tomee/tomee/trunk/tck/cdi-embedded/src/test/resources/failing.xml
    tomee/tomee/trunk/tck/cdi-embedded/src/test/resources/passing.xml

Modified: tomee/tomee/trunk/arquillian/arquillian-common/src/main/java/org/apache/openejb/arquillian/common/enrichment/OpenEJBEnricher.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/arquillian/arquillian-common/src/main/java/org/apache/openejb/arquillian/common/enrichment/OpenEJBEnricher.java?rev=1631202&r1=1631201&r2=1631202&view=diff
==============================================================================
--- tomee/tomee/trunk/arquillian/arquillian-common/src/main/java/org/apache/openejb/arquillian/common/enrichment/OpenEJBEnricher.java (original)
+++ tomee/tomee/trunk/arquillian/arquillian-common/src/main/java/org/apache/openejb/arquillian/common/enrichment/OpenEJBEnricher.java Sun Oct 12 16:26:06 2014
@@ -24,6 +24,7 @@ import org.apache.openejb.OpenEJBRuntime
 import org.apache.openejb.arquillian.common.mockito.MockitoEnricher;
 import org.apache.openejb.core.Operation;
 import org.apache.openejb.core.ThreadContext;
+import org.apache.openejb.core.WebContext;
 import org.apache.openejb.loader.SystemInstance;
 import org.apache.openejb.spi.ContainerSystem;
 import org.apache.webbeans.annotation.AnyLiteral;
@@ -71,20 +72,31 @@ public final class OpenEJBEnricher {
         final BeanManagerImpl bm = findBeanManager(ctx);
         if (bm != null && bm.isInUse()) {
             try {
-                final Set<Bean<?>> beans = bm.getBeans(testInstance.getClass());
-                final Bean<?> bean = bm.resolve(beans);
-                final CreationalContext<?> cc = bm.createCreationalContext(bean);
-                if (context != null) {
-                    context.set(CreationalContext.class, cc);
-                }
-                OWBInjector.inject(bm, testInstance, cc);
+                doInject(testInstance, context, bm);
             } catch (final Throwable t) {
-                LOGGER.log(Level.SEVERE, "Failed injection on: " + testInstance.getClass(), t);
-                if (RuntimeException.class.isInstance(t)) {
-                    throw RuntimeException.class.cast(t);
+                boolean ok = false;
+                if (ctx != null) {
+                    for (final WebContext web : ctx.getWebContexts()) {
+                        final WebBeansContext webBeansContext = web.getWebBeansContext();
+                        if (webBeansContext != bm.getWebBeansContext()) {
+                            try {
+                                doInject(testInstance, context, webBeansContext.getBeanManagerImpl());
+                                ok = true;
+                                break;
+                            } catch (final Exception e) {
+                                // no-op, try next
+                            }
+                        }
+                    }
                 }
-                if (Exception.class.isInstance(t)) {
-                    throw new OpenEJBRuntimeException(Exception.class.cast(t));
+                if (!ok) {
+                    LOGGER.log(Level.SEVERE, "Failed injection on: " + testInstance.getClass(), t);
+                    if (RuntimeException.class.isInstance(t)) {
+                        throw RuntimeException.class.cast(t);
+                    }
+                    if (Exception.class.isInstance(t)) {
+                        throw new OpenEJBRuntimeException(Exception.class.cast(t));
+                    }
                 }
                 // ignoring other cases for the moment, let manage some OWB API change without making all tests failing
             }
@@ -104,6 +116,16 @@ public final class OpenEJBEnricher {
         }
     }
 
+    private static void doInject(final Object testInstance, final BeanContext context, final BeanManagerImpl bm) throws Exception {
+        final Set<Bean<?>> beans = bm.getBeans(testInstance.getClass());
+        final Bean<?> bean = bm.resolve(beans);
+        final CreationalContext<?> cc = bm.createCreationalContext(bean);
+        if (context != null) {
+            context.set(CreationalContext.class, cc);
+        }
+        OWBInjector.inject(bm, testInstance, cc);
+    }
+
     private static BeanManagerImpl findBeanManager(final AppContext ctx) {
         if (ctx != null) {
             return ctx.getWebBeansContext().getBeanManagerImpl();

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=1631202&r1=1631201&r2=1631202&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 Sun Oct 12 16:26:06 2014
@@ -19,10 +19,10 @@ 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;
+import org.apache.openejb.config.EmptyEjbJar;
 import org.apache.openejb.config.FinderFactory;
 import org.apache.openejb.config.ReadDescriptors;
 import org.apache.openejb.config.WebModule;
@@ -49,6 +49,7 @@ import org.jboss.shrinkwrap.api.asset.As
 import org.jboss.shrinkwrap.api.asset.ClassLoaderAsset;
 import org.jboss.shrinkwrap.api.asset.FileAsset;
 import org.jboss.shrinkwrap.api.asset.UrlAsset;
+import org.jboss.shrinkwrap.api.spec.EnterpriseArchive;
 import org.jboss.shrinkwrap.api.spec.WebArchive;
 import org.jboss.shrinkwrap.impl.base.filter.IncludeRegExpPaths;
 
@@ -62,6 +63,7 @@ import java.net.URLClassLoader;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
@@ -97,10 +99,20 @@ public class OpenEJBArchiveProcessor {
             javaClass = null;
         }
 
+        final ClassLoader parent;
+        if (javaClass == null) {
+            parent = Thread.currentThread().getContextClassLoader();
+        } else {
+            parent = javaClass.getClassLoader();
+        }
+
         final List<URL> additionalPaths = new ArrayList<URL>();
         final List<AssetSource> beansXmlMerged = new ArrayList<>();
+        CompositeArchive earArchive = null;
+        Map<URL, List<String>> earMap = null;
 
         final String prefix;
+        final boolean isEar = EnterpriseArchive.class.isInstance(archive);
         if (WebArchive.class.isInstance(archive)) {
             prefix = WEB_INF;
 
@@ -131,14 +143,42 @@ public class OpenEJBArchiveProcessor {
                 }
             }
         } else {
-            prefix = META_INF;
-        }
+            if (isEar) { // mainly for CDi TCKs
+                earMap = new HashMap<>();
+                final Map<ArchivePath, Node> jars = archive.getContent(new IncludeRegExpPaths("/.*\\.jar"));
+                final List<org.apache.xbean.finder.archive.Archive> archives = new ArrayList<>(jars.size());
+                for (final Map.Entry<ArchivePath, Node> node : jars.entrySet()) {
+                    final Asset asset = node.getValue().getAsset();
+                    if (ArchiveAsset.class.isInstance(asset)) {
+                        final Archive<?> libArchive = ArchiveAsset.class.cast(asset).getArchive();
+                        if (!isExcluded(libArchive.getName())) {
+                            final List<Class<?>> earClasses = new ArrayList<>();
+                            final List<String> earClassNames = new ArrayList<>();
+                            final Map<ArchivePath, Node> content = libArchive.getContent(new IncludeRegExpPaths(".*.class"));
+                            for (final Map.Entry<ArchivePath, Node> classNode : content.entrySet()) {
+                                final String classname = name(classNode.getKey().get());
+                                try {
+                                    earClasses.add(parent.loadClass(classname));
+                                    earClassNames.add(classname);
+                                } catch (final ClassNotFoundException e) {
+                                    LOGGER.fine("Can't load class " + classname);
+                                } catch (final NoClassDefFoundError ncdfe) {
+                                    // no-op
+                                }
+                            }
+                            try { // ends with !/META-INF/beans.xml to force it to be used as a cdi module
+                                earMap.put(new URL("jar:file://!/lib/" + archive.getName() + (libArchive.get(META_INF + BEANS_XML) != null ? "!/META-INF/beans.xml" : "")), earClassNames);
+                            } catch (final MalformedURLException e) {
+                                // no-op
+                            }
+                            archives.add(new ClassesArchive(earClasses));
+                        }
+                    } // else TODO
+                }
+                earArchive = new CompositeArchive(archives);
+            }
 
-        final ClassLoader parent;
-        if (javaClass == null) {
-            parent = Thread.currentThread().getContextClassLoader();
-        } else {
-            parent = javaClass.getClassLoader();
+            prefix = META_INF;
         }
 
         final URL[] urls = additionalPaths.toArray(new URL[additionalPaths.size()]);
@@ -159,6 +199,57 @@ public class OpenEJBArchiveProcessor {
             final WebModule webModule = new WebModule(new WebApp(), contextRoot(archive.getName()), loader, "", appModule.getModuleId());
             webModule.setUrls(additionalPaths);
             appModule.getWebModules().add(webModule);
+        } else if (isEar) { // mainly for CDi TCKs
+            final FinderFactory.OpenEJBAnnotationFinder earLibFinder = new FinderFactory.OpenEJBAnnotationFinder(new SimpleWebappAggregatedArchive(earArchive, earMap));
+            appModule.setEarLibFinder(earLibFinder);
+
+            final EjbModule earCdiModule = new EjbModule(appModule.getClassLoader(), DeploymentLoader.EAR_SCOPED_CDI_BEANS + appModule.getModuleId(), new EjbJar(), new OpenejbJar());
+            earCdiModule.setBeans(new Beans());
+            earCdiModule.setFinder(earLibFinder);
+            earCdiModule.setEjbJar(new EmptyEjbJar());
+            appModule.getEjbModules().add(earCdiModule);
+
+            for (final Map.Entry<ArchivePath, Node> node : archive.getContent(new IncludeRegExpPaths("/.*\\.war")).entrySet()) {
+                final Asset asset = node.getValue().getAsset();
+                if (ArchiveAsset.class.isInstance(asset)) {
+                    final Archive<?> webArchive = ArchiveAsset.class.cast(asset).getArchive();
+                    if (WebArchive.class.isInstance(webArchive)) {
+                        /* TODO: libs
+                        final Map<ArchivePath, Node> libs = archive.getContent(new IncludeRegExpPaths("/WEB-INF/lib/.*\\.jar"));
+                        */
+
+                        final Map<String, Object> altDD = new HashMap<String, Object>();
+                        final Node beansXml = findBeansXml(webArchive, new ArrayList<AssetSource>(), WEB_INF, altDD);
+                        final SWClassLoader webLoader = new SWClassLoader(WEB_INF_CLASSES, parent, webArchive);
+                        final FinderFactory.OpenEJBAnnotationFinder finder = new FinderFactory.OpenEJBAnnotationFinder(
+                                finderArchive(beansXml, webArchive, webLoader, Collections.<URL>emptyList()));
+
+                        final WebModule webModule = new WebModule(new WebApp(), contextRoot(webArchive.getName()), loader, "", appModule.getModuleId());
+                        webModule.setUrls(Collections.<URL>emptyList());
+                        webModule.setScannableUrls(Collections.<URL>emptyList());
+                        webModule.setFinder(finder);
+
+                        final EjbModule ejbModule = new EjbModule(webLoader, webModule.getModuleId(), null, new EjbJar(), new OpenejbJar());
+                        ejbModule.getAltDDs().putAll(altDD);
+                        ejbModule.setFinder(finder);
+                        ejbModule.setClassLoader(webLoader);
+                        ejbModule.setWebapp(true);
+
+                        appModule.getEjbModules().add(ejbModule);
+                        appModule.getWebModules().add(webModule);
+
+                        addPersistenceXml(archive, WEB_INF, appModule);
+                        addOpenEJbJarXml(archive, WEB_INF, ejbModule);
+                        addValidationXml(archive, WEB_INF, new HashMap<String, Object>(), ejbModule);
+                        addResourcesXml(archive, WEB_INF, ejbModule);
+                        addEnvEntries(archive, WEB_INF, appModule, ejbModule);
+                    }
+                }
+            }
+        }
+
+        if (isEar) { // adding the test class as lib class can break test if tested against the web part of the ear
+            return appModule;
         }
 
         // add the test as a managed bean to be able to inject into it easily
@@ -206,6 +297,28 @@ public class OpenEJBArchiveProcessor {
         final EjbModule ejbModule = new EjbModule(ejbJar);
         ejbModule.setClassLoader(tempClassLoader);
 
+        final Node beansXml = findBeansXml(archive, beansXmlMerged, prefix, ejbModule.getAltDDs());
+        final org.apache.xbean.finder.archive.Archive finderArchive = finderArchive(beansXml, archive, tempClassLoader, additionalPaths);
+        ejbModule.setFinder(new FinderFactory.ModuleLimitedFinder(new FinderFactory.OpenEJBAnnotationFinder(finderArchive)));
+        if (appModule.isWebapp()) { // war
+            appModule.getWebModules().iterator().next().setFinder(ejbModule.getFinder());
+        }
+        appModule.getEjbModules().add(ejbModule);
+
+        addPersistenceXml(archive, prefix, appModule);
+        addOpenEJbJarXml(archive, prefix, ejbModule);
+        addValidationXml(archive, prefix, testDD, ejbModule);
+        addResourcesXml(archive, prefix, ejbModule);
+        addEnvEntries(archive, prefix, appModule, ejbModule);
+
+        if (!appModule.isWebapp()) {
+            appModule.getAdditionalLibraries().addAll(additionalPaths);
+        }
+
+        return appModule;
+    }
+
+    private static Node findBeansXml(final Archive<?> archive, final List<AssetSource> beansXmlMerged, final String prefix, final Map<String, Object> altDD) {
         Node beansXml = archive.get(prefix.concat(BEANS_XML));
         if (beansXml == null && WEB_INF.equals(prefix)) {
             beansXml = archive.get(WEB_INF_CLASSES.concat(META_INF).concat(BEANS_XML));
@@ -216,96 +329,83 @@ public class OpenEJBArchiveProcessor {
             } 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);
-
-        ejbModule.setFinder(new FinderFactory.ModuleLimitedFinder(new FinderFactory.OpenEJBAnnotationFinder(finderArchive)));
-        if (appModule.isWebapp()) { // war
-            appModule.getWebModules().iterator().next().setFinder(ejbModule.getFinder());
+            altDD.put(BEANS_XML, beansXmlMerged);
         }
-        appModule.getEjbModules().add(ejbModule);
+        return beansXml;
+    }
 
-        {
-            Node persistenceXml = archive.get(prefix.concat(PERSISTENCE_XML));
-            if (persistenceXml == null && WEB_INF.equals(prefix)) {
-                persistenceXml = archive.get(WEB_INF_CLASSES.concat(META_INF).concat(PERSISTENCE_XML));
-            }
-            if (persistenceXml != null) {
-                final Asset asset = persistenceXml.getAsset();
-                if (UrlAsset.class.isInstance(asset)) {
-                    appModule.getAltDDs().put(PERSISTENCE_XML, Arrays.asList(get(URL.class, "url", asset)));
-                } else if (FileAsset.class.isInstance(asset)) {
-                    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(), 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(), null)));
-                    }
+    private static void addPersistenceXml(final Archive<?> archive, final String prefix, final AppModule appModule) {
+        Node persistenceXml = archive.get(prefix.concat(PERSISTENCE_XML));
+        if (persistenceXml == null && WEB_INF.equals(prefix)) {
+            persistenceXml = archive.get(WEB_INF_CLASSES.concat(META_INF).concat(PERSISTENCE_XML));
+        }
+        if (persistenceXml != null) {
+            final Asset asset = persistenceXml.getAsset();
+            if (UrlAsset.class.isInstance(asset)) {
+                appModule.getAltDDs().put(PERSISTENCE_XML, Arrays.asList(get(URL.class, "url", asset)));
+            } else if (FileAsset.class.isInstance(asset)) {
+                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(), 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(), null)));
                 }
+            } else {
+                appModule.getAltDDs().put(PERSISTENCE_XML, Arrays.asList(new AssetSource(persistenceXml.getAsset(), null)));
             }
         }
+    }
 
-        {
-            final Node openejbJarXml = archive.get(prefix.concat(OPENEJB_JAR_XML));
-            if (openejbJarXml != null) {
-                ejbModule.getAltDDs().put(OPENEJB_JAR_XML, new AssetSource(openejbJarXml.getAsset(), null));
-            }
+    private static void addOpenEJbJarXml(final Archive<?> archive, final String prefix, final EjbModule ejbModule) {
+        final Node openejbJarXml = archive.get(prefix.concat(OPENEJB_JAR_XML));
+        if (openejbJarXml != null) {
+            ejbModule.getAltDDs().put(OPENEJB_JAR_XML, new AssetSource(openejbJarXml.getAsset(), null));
         }
+    }
 
-        {
-            Node validationXml = archive.get(prefix.concat(VALIDATION_XML));
-            // bval tcks
-            if (validationXml == null && WEB_INF == prefix) { // we can use == here
-                validationXml = archive.get(WEB_INF_CLASSES.concat(META_INF).concat(VALIDATION_XML));
-            }
-            if (validationXml != null) {
-                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));
-            }
+    private static void addValidationXml(final Archive<?> archive, final String prefix, final Map<String, Object> testDD, final EjbModule ejbModule) {
+        Node validationXml = archive.get(prefix.concat(VALIDATION_XML));
+        // bval tcks
+        if (validationXml == null && WEB_INF == prefix) { // we can use == here
+            validationXml = archive.get(WEB_INF_CLASSES.concat(META_INF).concat(VALIDATION_XML));
+        }
+        if (validationXml != null) {
+            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(), null));
-            }
+    private static void addResourcesXml(final Archive<?> archive, final String prefix, final EjbModule ejbModule) {
+        final Node resourcesXml = archive.get(prefix.concat(RESOURCES_XML));
+        if (resourcesXml != null) {
+            ejbModule.getAltDDs().put(RESOURCES_XML, new AssetSource(resourcesXml.getAsset(), null));
         }
+    }
 
-        {
-            final Node envEntriesProperties = archive.get(prefix.concat(ENV_ENTRIES_PROPERTIES));
-            if (envEntriesProperties != null) {
-                InputStream is = null;
-                final Properties properties = new Properties();
-                try {
-                    is = envEntriesProperties.getAsset().openStream();
-                    properties.load(is);
-                    ejbModule.getAltDDs().put(ENV_ENTRIES_PROPERTIES, properties);
-
-                    // do it for test class too
-                    appModule.getEjbModules().iterator().next().getAltDDs().put(ENV_ENTRIES_PROPERTIES, properties);
-                } catch (final Exception e) {
-                    LOGGER.log(Level.SEVERE, "can't read env-entries.properties", e);
-                } finally {
-                    IO.close(is);
-                }
+    private static void addEnvEntries(final Archive<?> archive, final String prefix, final AppModule appModule, final EjbModule ejbModule) {
+        final Node envEntriesProperties = archive.get(prefix.concat(ENV_ENTRIES_PROPERTIES));
+        if (envEntriesProperties != null) {
+            InputStream is = null;
+            final Properties properties = new Properties();
+            try {
+                is = envEntriesProperties.getAsset().openStream();
+                properties.load(is);
+                ejbModule.getAltDDs().put(ENV_ENTRIES_PROPERTIES, properties);
+
+                // do it for test class too
+                appModule.getEjbModules().iterator().next().getAltDDs().put(ENV_ENTRIES_PROPERTIES, properties);
+            } catch (final Exception e) {
+                LOGGER.log(Level.SEVERE, "can't read env-entries.properties", e);
+            } finally {
+                IO.close(is);
             }
         }
-
-        if (!appModule.isWebapp()) {
-            appModule.getAdditionalLibraries().addAll(additionalPaths);
-        }
-
-        return appModule;
     }
 
     private static String contextRoot(final String name) {

Modified: tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-5/src/main/java/org/apache/openejb/arquillian/openejb/server/ServiceManagers.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-5/src/main/java/org/apache/openejb/arquillian/openejb/server/ServiceManagers.java?rev=1631202&r1=1631201&r2=1631202&view=diff
==============================================================================
--- tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-5/src/main/java/org/apache/openejb/arquillian/openejb/server/ServiceManagers.java (original)
+++ tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-5/src/main/java/org/apache/openejb/arquillian/openejb/server/ServiceManagers.java Sun Oct 12 16:26:06 2014
@@ -35,12 +35,19 @@ public final class ServiceManagers {
             final ServerService[] daemons = SimpleServiceManager.class.cast(smp).getDaemons();
             for (final ServerService ss : daemons) {
                 if ("httpejbd".equals(ss.getName())) {
-                    final HTTPContext httpContext = new HTTPContext(ss.getIP(), ss.getPort());
-                    httpContext.add(new Servlet("ArquillianServletRunner", info.appId));
-                    return new ProtocolMetaData().addContext(httpContext);
+                    if (info.webApps.size() == 1) {
+                        return newHttpProtocolMetaData(ss, info.webApps.iterator().next().contextRoot);
+                    }
+                    return newHttpProtocolMetaData(ss, info.appId);
                 }
             }
         }
         return null;
     }
+
+    private static ProtocolMetaData newHttpProtocolMetaData(final ServerService ss, final String contextRoot) {
+        final HTTPContext httpContext = new HTTPContext(ss.getIP(), ss.getPort());
+        httpContext.add(new Servlet("ArquillianServletRunner", contextRoot));
+        return new ProtocolMetaData().addContext(httpContext);
+    }
 }

Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiScanner.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiScanner.java?rev=1631202&r1=1631201&r2=1631202&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiScanner.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiScanner.java Sun Oct 12 16:26:06 2014
@@ -226,7 +226,7 @@ public class CdiScanner implements Scann
                             }
                         } else {
                             final ClassLoader loader = clazz.getClassLoader();
-                            if (!filterByClassLoader || comparator.isSame(loader) || loader.equals(scl) && isNotEarWebApp) {
+                            if (!filterByClassLoader || comparator.isSame(loader) || (loader.equals(scl) && isNotEarWebApp)) {
                                 classes.add(clazz);
                                 if (beans.startupClasses.contains(name)) {
                                     startupClasses.add(clazz);

Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/ThreadSingletonServiceImpl.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/ThreadSingletonServiceImpl.java?rev=1631202&r1=1631201&r2=1631202&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/ThreadSingletonServiceImpl.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/ThreadSingletonServiceImpl.java Sun Oct 12 16:26:06 2014
@@ -18,7 +18,6 @@
 package org.apache.openejb.cdi;
 
 import org.apache.openejb.AppContext;
-import org.apache.openejb.OpenEJBRuntimeException;
 import org.apache.openejb.assembler.classic.AppInfo;
 import org.apache.openejb.assembler.classic.EjbJarInfo;
 import org.apache.openejb.cdi.transactional.TransactionContext;

Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java?rev=1631202&r1=1631201&r2=1631202&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java Sun Oct 12 16:26:06 2014
@@ -1641,7 +1641,8 @@ public class AnnotationDeployer implemen
             final Map<URL, List<String>> map = aggregatedArchive.getClassesMap();
 
             for (final Map.Entry<URL, List<String>> entry : map.entrySet()) {
-                final URL beansXml = hasBeansXml(entry.getKey());
+                final URL key = entry.getKey();
+                final URL beansXml = hasBeansXml(key);
                 if (beansXml != null) {
                     classes.put(beansXml, entry.getValue());
                 }

Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/web/LightweightWebAppBuilder.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/web/LightweightWebAppBuilder.java?rev=1631202&r1=1631201&r2=1631202&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/web/LightweightWebAppBuilder.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/web/LightweightWebAppBuilder.java Sun Oct 12 16:26:06 2014
@@ -268,7 +268,9 @@ public class LightweightWebAppBuilder im
 
     private static Class<?> loadFromUrls(final ClassLoader loader, final String url, final String path) throws ClassNotFoundException {
         final String classname;
-        if ("jar:file://!/WEB-INF/classes/".equals(url) && path.contains("classes/")) {
+        if (path.startsWith("archive:") && path.contains(".war/")) {
+            classname = path.substring(path.indexOf(".war") + ".war".length() + 1);
+        } else if ("jar:file://!/WEB-INF/classes/".equals(url) && path.contains("classes/")) {
             classname = path.substring(path.lastIndexOf("classes/") + "classes/".length());
         } else {
             classname = path.substring(url.length());

Modified: tomee/tomee/trunk/tck/cdi-embedded/pom.xml
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tck/cdi-embedded/pom.xml?rev=1631202&r1=1631201&r2=1631202&view=diff
==============================================================================
--- tomee/tomee/trunk/tck/cdi-embedded/pom.xml (original)
+++ tomee/tomee/trunk/tck/cdi-embedded/pom.xml Sun Oct 12 16:26:06 2014
@@ -109,6 +109,12 @@
       <version>${org.apache.openwebbeans.version}</version>
       <scope>test</scope>
     </dependency>
+    <dependency>
+      <groupId>org.apache.openejb</groupId>
+      <artifactId>openejb-http</artifactId>
+      <version>${openejb.version}</version>
+      <scope>test</scope>
+    </dependency>
 
     <dependency>
       <groupId>org.testng</groupId>
@@ -133,6 +139,10 @@
             <openejb.cdi.applicationScope.cached>false</openejb.cdi.applicationScope.cached>
             <!-- not supported by the spec -->
             <openejb.cdi.producer.interception>false</openejb.cdi.producer.interception>
+            <!-- for ear we need WebAppDeployer -->
+            <org.apache.openejb.assembler.classic.WebAppBuilder>org.apache.openejb.web.LightweightWebAppBuilder</org.apache.openejb.assembler.classic.WebAppBuilder>
+            <!-- archives are well formed and all classes are in app loader -->
+            <openejb.cdi.filter.classloader>false</openejb.cdi.filter.classloader>
           </systemPropertyVariables>
         </configuration>
       </plugin>

Modified: tomee/tomee/trunk/tck/cdi-embedded/src/test/resources/arquillian.xml
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tck/cdi-embedded/src/test/resources/arquillian.xml?rev=1631202&r1=1631201&r2=1631202&view=diff
==============================================================================
--- tomee/tomee/trunk/tck/cdi-embedded/src/test/resources/arquillian.xml (original)
+++ tomee/tomee/trunk/tck/cdi-embedded/src/test/resources/arquillian.xml Sun Oct 12 16:26:06 2014
@@ -20,6 +20,7 @@
             xmlns="http://jboss.org/schema/arquillian"
             xsi:schemaLocation="http://jboss.org/schema/arquillian
                                 http://jboss.org/schema/arquillian/arquillian_1_0.xsd">
+
   <container qualifier="openejb" default="true">
     <configuration>
       <property name="properties">

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=1631202&r1=1631201&r2=1631202&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 Sun Oct 12 16:26:06 2014
@@ -18,7 +18,7 @@
 <suite name="CDI TCK" verbose="0">
   <test name="CDI TCK">
     <classes>
-      <class name="org.jboss.cdi.tck.tests.lookup.clientProxy.unproxyable.interceptor.InterceptedBeanProxyTest"/>
+      <class name="org.jboss.cdi.tck.tests.context.session.SessionContextTest"/>
     </classes>
   </test>
 </suite>

Modified: tomee/tomee/trunk/tck/cdi-embedded/src/test/resources/passing.xml
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tck/cdi-embedded/src/test/resources/passing.xml?rev=1631202&r1=1631201&r2=1631202&view=diff
==============================================================================
--- tomee/tomee/trunk/tck/cdi-embedded/src/test/resources/passing.xml (original)
+++ tomee/tomee/trunk/tck/cdi-embedded/src/test/resources/passing.xml Sun Oct 12 16:26:06 2014
@@ -49,13 +49,6 @@
   </listeners>
 
   <test name="JSR-346 TCK">
-    <groups>
-      <run>
-        <exclude name="integration" />
-        <exclude name="javaee-full" />
-      </run>
-    </groups>
-
     <packages>
       <package name="org.jboss.cdi.tck.tests.*">
         <!-- CHALLENGED TCK TESTS: clarifying this in the EG -->