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/02/23 16:48:13 UTC

svn commit: r1292830 - in /openejb/trunk/openejb: arquillian-tomee/arquillian-tomee-moviefun-example/ container/openejb-core/src/main/java/org/apache/openejb/config/

Author: rmannibucau
Date: Thu Feb 23 15:48:13 2012
New Revision: 1292830

URL: http://svn.apache.org/viewvc?rev=1292830&view=rev
Log:
fixing the way we shortcut CDI managed classes (dur to the new filtering mode)

Removed:
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AggregatedArchive.java
Modified:
    openejb/trunk/openejb/arquillian-tomee/arquillian-tomee-moviefun-example/pom.xml
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/FinderFactory.java
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/WebappAggregatedArchive.java

Modified: openejb/trunk/openejb/arquillian-tomee/arquillian-tomee-moviefun-example/pom.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian-tomee/arquillian-tomee-moviefun-example/pom.xml?rev=1292830&r1=1292829&r2=1292830&view=diff
==============================================================================
--- openejb/trunk/openejb/arquillian-tomee/arquillian-tomee-moviefun-example/pom.xml (original)
+++ openejb/trunk/openejb/arquillian-tomee/arquillian-tomee-moviefun-example/pom.xml Thu Feb 23 15:48:13 2012
@@ -181,6 +181,11 @@
       <version>${version.shrinkwrap.descriptor}</version>
     </dependency>
     <dependency>
+      <groupId>log4j</groupId>
+      <artifactId>log4j</artifactId>
+      <version>1.2.16</version>
+    </dependency>
+    <dependency>
       <groupId>org.apache.openejb</groupId>
       <artifactId>tomee-embedded</artifactId>
       <version>1.0.0-beta-3-SNAPSHOT</version>

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java?rev=1292830&r1=1292829&r2=1292830&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java Thu Feb 23 15:48:13 2012
@@ -1330,17 +1330,19 @@ public class AnnotationDeployer implemen
             //  more classes than actually apply to CDI.  This can "pollute"
             //  the CDI class space and break injection points
 
-            if (!(finder instanceof AnnotationFinder)) return finder.getAnnotatedClassNames();
+            if (!(finder instanceof FinderFactory.ModuleLimitedFinder)) return finder.getAnnotatedClassNames();
 
-            final AnnotationFinder annotationFinder = (AnnotationFinder) finder;
+            final IAnnotationFinder delegate = ((FinderFactory.ModuleLimitedFinder) finder).getDelegate();
+            if (!(delegate instanceof AnnotationFinder)) return finder.getAnnotatedClassNames();
 
-            final Archive archive = annotationFinder.getArchive();
+            final AnnotationFinder annotationFinder = (AnnotationFinder) delegate;
 
-            if (!(archive instanceof AggregatedArchive)) return finder.getAnnotatedClassNames();
+            final Archive archive = annotationFinder.getArchive();
+            if (!(archive instanceof WebappAggregatedArchive)) return finder.getAnnotatedClassNames();
 
             final List<String> classes = new ArrayList<String>();
 
-            final AggregatedArchive aggregatedArchive = (AggregatedArchive) archive;
+            final WebappAggregatedArchive aggregatedArchive = (WebappAggregatedArchive) archive;
             final Map<URL, List<String>> map = aggregatedArchive.getClassesMap();
 
             for (Map.Entry<URL, List<String>> entry : map.entrySet()) {

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/FinderFactory.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/FinderFactory.java?rev=1292830&r1=1292829&r2=1292830&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/FinderFactory.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/FinderFactory.java Thu Feb 23 15:48:13 2012
@@ -169,6 +169,10 @@ public class FinderFactory {
             return ts;
         }
 
+        public IAnnotationFinder getDelegate() {
+            return delegate;
+        }
+
         private static abstract class Predicate<T> {
             protected final List<String> accepted;
 

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/WebappAggregatedArchive.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/WebappAggregatedArchive.java?rev=1292830&r1=1292829&r2=1292830&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/WebappAggregatedArchive.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/WebappAggregatedArchive.java Thu Feb 23 15:48:13 2012
@@ -1,50 +1,99 @@
 package org.apache.openejb.config;
 
+import org.apache.xbean.finder.archive.Archive;
 import org.apache.xbean.finder.archive.CompositeArchive;
 import org.apache.xbean.finder.archive.FilteredArchive;
 import org.apache.xbean.finder.filter.Filter;
 
 import java.io.IOException;
+import java.io.InputStream;
 import java.net.URL;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
 
-public class WebappAggregatedArchive extends CompositeArchive implements ScanConstants {
+public class WebappAggregatedArchive implements Archive, ScanConstants {
     private static final String WEBAPP_GLOBAL_SCAN_LOCATION = "WEB-INF/" + SCAN_XML_NAME;
 
+    private final Map<URL, List<String>> map = new HashMap<URL, List<String>>();
+    private ScanUtil.ScanHandler handler = null;
+    private boolean scanXmlExists = false; // faster than using an empty handler
+    private Archive archive;
+
     public WebappAggregatedArchive(final ClassLoader loader, final Iterable<URL> urls) {
-        super(new FilteredArchive(new AggregatedArchive(loader, urls), new ScanFilter(loader)));
-    }
+        final List<Archive> archives = new ArrayList<Archive>();
 
-    private static class ScanFilter implements Filter {
-        private ScanUtil.ScanHandler handler = null;
-        private boolean active = false; // faster then using an empty handler
-
-        public ScanFilter(final ClassLoader loader) {
-            final URL scanXml = loader.getResource(WEBAPP_GLOBAL_SCAN_LOCATION);
-            if (scanXml != null) {
-                try {
-                    handler = ScanUtil.read(scanXml);
-                    active = true;
-                } catch (IOException e) {
-                    // ignored, will not use filtering with scan.xml
-                }
+        final URL scanXml = loader.getResource(WEBAPP_GLOBAL_SCAN_LOCATION);
+        if (scanXml != null) {
+            try {
+                handler = ScanUtil.read(scanXml);
+                scanXmlExists = true;
+            } catch (IOException e) {
+                // ignored, will not use filtering with scan.xml
             }
         }
 
+        for (URL url : urls) {
+            final List<String> classes = new ArrayList<String>();
+            final Archive archive = new FilteredArchive(new ConfigurableClasspathArchive(loader, Arrays.asList(url)), new ScanXmlSaverFilter(scanXmlExists, handler, classes));
+            map.put(url, classes);
+            archives.add(archive);
+        }
+
+        archive = new CompositeArchive(archives);
+    }
+
+    public Map<URL, List<String>> getClassesMap() {
+        return map;
+    }
+
+    @Override
+    public InputStream getBytecode(String className) throws IOException, ClassNotFoundException {
+        return archive.getBytecode(className);
+    }
+
+    @Override
+    public Class<?> loadClass(String className) throws ClassNotFoundException {
+        return archive.loadClass(className);
+    }
+
+    @Override
+    public Iterator<String> iterator() {
+        return archive.iterator();
+    }
+
+    private static class ScanXmlSaverFilter implements Filter {
+        private boolean scanXmlExists;
+        private final ScanUtil.ScanHandler handler;
+        private final List<String> classes;
+
+        private ScanXmlSaverFilter(boolean scanXmlExists, ScanUtil.ScanHandler handler, List<String> classes) {
+            this.scanXmlExists = scanXmlExists;
+            this.handler = handler;
+            this.classes = classes;
+        }
+
         @Override
-        public boolean accept(final String name) {
-            if (active) {
+        public boolean accept(String name) {
+            if (scanXmlExists) {
                 for (String packageName : handler.getPackages()) {
                     if (name.startsWith(packageName)) {
+                        classes.add(name);
                         return true;
                     }
                 }
                 for (String className : handler.getClasses()) {
                     if (className.equals(name)) {
+                        classes.add(name);
                         return true;
                     }
                 }
                 return false;
             }
+            classes.add(name);
             return true;
         }
     }