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;
}
}