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 09:13:32 UTC

svn commit: r1292692 - in /openejb/trunk/openejb/container/openejb-core/src: main/java/org/apache/openejb/config/ test/java/org/apache/openejb/config/scanning/ test/java/org/apache/openejb/config/scanning/bean/ test/resources/

Author: rmannibucau
Date: Thu Feb 23 08:13:31 2012
New Revision: 1292692

URL: http://svn.apache.org/viewvc?rev=1292692&view=rev
Log:
adding ConfigurableClasspathArchive

Added:
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurableClasspathArchive.java
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ScanConstants.java
    openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/scanning/
    openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/scanning/AbstractXmlAnnotationFinderTest.java
    openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/scanning/XmlClassesAnnotationFinderTest.java
    openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/scanning/XmlPackageAnnotationFinderTest.java
    openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/scanning/bean/
    openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/scanning/bean/MyAnnotation.java
    openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/scanning/bean/MyBean1.java
    openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/scanning/bean/MyBean2.java
    openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/scanning/bean/MyBean3.java
    openejb/trunk/openejb/container/openejb-core/src/test/resources/test-package-scan.xml
    openejb/trunk/openejb/container/openejb-core/src/test/resources/test-scan.xml
Modified:
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AggregatedArchive.java
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/FinderFactory.java

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AggregatedArchive.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AggregatedArchive.java?rev=1292692&r1=1292691&r2=1292692&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AggregatedArchive.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AggregatedArchive.java Thu Feb 23 08:13:31 2012
@@ -16,16 +16,20 @@
  */
 package org.apache.openejb.config;
 
+import org.apache.openejb.xbean.xml.XMLAnnotationFinderHelper;
+import org.apache.xbean.finder.ResourceFinder;
 import org.apache.xbean.finder.archive.Archive;
 import org.apache.xbean.finder.archive.ClasspathArchive;
 import org.apache.xbean.finder.archive.CompositeArchive;
 import org.apache.xbean.finder.archive.FilteredArchive;
 import org.apache.xbean.finder.filter.Filter;
 
+import javax.xml.bind.JAXBException;
 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;
@@ -34,7 +38,7 @@ import java.util.Map;
 /**
 * @version $Rev$ $Date$
 */
-public class AggregatedArchive implements Archive {
+public class AggregatedArchive implements Archive, ScanConstants {
 
     private final Map<URL, List<String>> classesMap = new HashMap<URL, List<String>>();
     private final Archive archive;
@@ -44,9 +48,21 @@ public class AggregatedArchive implement
 
         for (URL url : urls) {
 
+            Archive rawArchive;
+
+            final ResourceFinder scanFinder = new ResourceFinder("", url);
+            try {
+                final URL scanXml = scanFinder.find(SCAN_XML);
+                rawArchive = XMLAnnotationFinderHelper.xmlArchive(scanXml.openStream(), loader, Arrays.asList(url));
+            } catch (IOException e) {
+                rawArchive = ClasspathArchive.archive(loader, url);
+            } catch (JAXBException e) {
+                rawArchive = ClasspathArchive.archive(loader, url);
+            }
+
             final List<String> classes = new ArrayList<String>();
 
-            final Archive archive = new FilteredArchive(ClasspathArchive.archive(loader, url), new Filter(){
+            final Archive archive = new FilteredArchive(rawArchive, new Filter() {
                 @Override
                 public boolean accept(String name) {
                     classes.add(name);

Added: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurableClasspathArchive.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurableClasspathArchive.java?rev=1292692&view=auto
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurableClasspathArchive.java (added)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurableClasspathArchive.java Thu Feb 23 08:13:31 2012
@@ -0,0 +1,165 @@
+package org.apache.openejb.config;
+
+import org.apache.openejb.loader.SystemInstance;
+import org.apache.xbean.finder.ResourceFinder;
+import org.apache.xbean.finder.archive.Archive;
+import org.apache.xbean.finder.archive.ClassesArchive;
+import org.apache.xbean.finder.archive.ClasspathArchive;
+import org.apache.xbean.finder.archive.CompositeArchive;
+import org.apache.xbean.finder.archive.FilteredArchive;
+import org.apache.xbean.finder.filter.Filter;
+import org.apache.xbean.finder.filter.FilterList;
+import org.apache.xbean.finder.filter.PackageFilter;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
+
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+import java.io.BufferedInputStream;
+import java.io.IOException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+public class ConfigurableClasspathArchive extends CompositeArchive implements ScanConstants {
+    private static final SAXParserFactory SAX_FACTORY = SAXParserFactory.newInstance();
+
+    public ConfigurableClasspathArchive(final ClassLoader loader, final URL... urls) {
+        this(loader, Arrays.asList(urls));
+    }
+
+    public ConfigurableClasspathArchive(final ClassLoader loader, final Iterable<URL> urls) {
+        super(archive(loader, urls));
+    }
+
+    public static List<Archive> archive(final ClassLoader loader, final Iterable<URL> urls) {
+        final List<Archive> archives = new ArrayList<Archive>();
+        for (URL location : urls) {
+            try {
+                archives.add(archive(loader, location));
+            } catch (Exception e) {
+                // ignored
+            }
+        }
+        return archives;
+    }
+
+    public static Archive archive(final ClassLoader loader, final URL location) {
+        final ResourceFinder scanFinder = new ResourceFinder("", location);
+        try {
+            final URL scanXml = scanFinder.find(SystemInstance.get().getProperty(SCAN_XML_PROPERTY, SCAN_XML));
+            final ScanHandler scan = read(scanXml);
+            final Archive packageArchive = packageArchive(scan.getPackages(), loader, location);
+            final Archive classesArchive = classesArchive(scan.getPackages(), scan.getClasses(), loader);
+
+            if (packageArchive != null && classesArchive != null) {
+                return new CompositeArchive(classesArchive, packageArchive);
+            } else if (packageArchive != null) {
+                return  packageArchive;
+            }
+            return classesArchive;
+        } catch (IOException e) {
+            return ClasspathArchive.archive(loader, location);
+        }
+    }
+
+    private static ScanHandler read(final URL scanXml) throws IOException {
+        try {
+            final SAXParser parser = SAX_FACTORY.newSAXParser();
+            final ScanHandler handler = new ScanHandler();
+            parser.parse(new BufferedInputStream(scanXml.openStream()), handler);
+            return handler;
+        } catch (Exception e) {
+            throw new IOException("can't parse " + scanXml.toExternalForm());
+        }
+    }
+
+    public static Archive packageArchive(final Set<String> packageNames, final ClassLoader loader, final URL url) {
+        if (!packageNames.isEmpty()) {
+            return new FilteredArchive(ClasspathArchive.archive(loader, url), filters(packageNames));
+        }
+        return null;
+    }
+
+    private static Filter filters(final Set<String> packageNames) {
+        final List<Filter> filters = new ArrayList<Filter>();
+        for (String packageName : packageNames) {
+            filters.add(new PackageFilter(packageName));
+        }
+        return new FilterList(filters);
+    }
+
+    public static Archive classesArchive(final Set<String> packages, final Set<String> classnames, final ClassLoader loader) {
+        Class<?>[] classes = new Class<?>[classnames.size()];
+        int i = 0;
+        for (String clazz : classnames) {
+            // skip classes managed by package filtering
+            if (packages != null && clazzInPackage(packages, clazz)) {
+                continue;
+            }
+
+            try {
+                classes[i++] = loader.loadClass(clazz);
+            } catch (ClassNotFoundException e) {
+                // ignored
+            }
+        }
+
+        if (i != classes.length) { // shouldn't occur
+            final Class<?>[] updatedClasses = new Class<?>[i];
+            System.arraycopy(classes, 0, updatedClasses, 0, i);
+            classes = updatedClasses;
+        }
+
+        return new ClassesArchive(classes);
+    }
+
+    private static boolean clazzInPackage(final Collection<String> packagename, final String clazz) {
+        for (String str : packagename) {
+            if (clazz.startsWith(str)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private static final class ScanHandler extends DefaultHandler {
+        private final Set<String> classes = new HashSet<String>();
+        private final Set<String> packages = new HashSet<String>();
+        private Set<String> current = null;
+
+        @Override
+        public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
+            if (qName.equals("class")) {
+                current = classes;
+            } else if (qName.equals("package")) {
+                current = packages;
+            }
+        }
+
+        @Override
+        public void characters(char ch[], int start, int length) throws SAXException {
+            if (current != null) {
+                current.add(new String(ch, start, length));
+            }
+        }
+
+        @Override
+        public void endElement(final String uri, final String localName, final String qName) throws SAXException {
+            current = null;
+        }
+
+        public Set<String> getPackages() {
+            return packages;
+        }
+
+        public Set<String> getClasses() {
+            return classes;
+        }
+    }
+}

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=1292692&r1=1292691&r2=1292692&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 08:13:31 2012
@@ -16,30 +16,16 @@
  */
 package org.apache.openejb.config;
 
-import org.apache.openejb.xbean.xml.XMLAnnotationFinderHelper;
+import org.apache.openejb.loader.SystemInstance;
 import org.apache.xbean.finder.AnnotationFinder;
 import org.apache.xbean.finder.IAnnotationFinder;
-import org.apache.openejb.util.Logger;
-import org.apache.openejb.util.LogCategory;
-import org.apache.openejb.loader.SystemInstance;
 import org.apache.xbean.finder.archive.ClassesArchive;
-import org.apache.xbean.finder.archive.ClasspathArchive;
 
-import javax.xml.bind.JAXBException;
 import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.InputStream;
 import java.net.URL;
-import java.util.Arrays;
 
 public class FinderFactory {
 
-    private static final Logger logger = Logger.getInstance(LogCategory.OPENEJB, FinderFactory.class);
-
-    private static final String SCAN_XML = "META-INF/org/apache/xbean/scan.xml";
-    private static final String WEB_SCAN_XML = SCAN_XML.replace("META-INF", "WEB-INF");
-
     private static final FinderFactory factory = new FinderFactory();
 
     private static FinderFactory get() {
@@ -55,21 +41,13 @@ public class FinderFactory {
         if (module instanceof WebModule) {
             WebModule webModule = (WebModule) module;
             final ClassLoader webClassLoader = webModule.getClassLoader();
-            final IAnnotationFinder finder = xmlFinder(module, inputStream(webModule.getFile(), WEB_SCAN_XML), webModule.getScannableUrls(), AggregatedArchive.class);
-            if (finder != null) {
-                return finder;
-            }
             return new AnnotationFinder(new AggregatedArchive(webClassLoader, webModule.getScannableUrls())).link();
         }
         
         if (module instanceof ConnectorModule) {
         	ConnectorModule connectorModule = (ConnectorModule) module;
         	final ClassLoader connectorClassLoader = connectorModule.getClassLoader();
-            final IAnnotationFinder finder = xmlFinder(module, connectorClassLoader.getResourceAsStream(SCAN_XML), connectorModule.getLibraries());
-            if (finder != null) {
-                return finder;
-            }
-        	return new AnnotationFinder(new ClasspathArchive(connectorClassLoader, connectorModule.getLibraries())).link();
+        	return new AnnotationFinder(new ConfigurableClasspathArchive(connectorClassLoader, connectorModule.getLibraries())).link();
         }
 
         if (module.getJarLocation() != null) {
@@ -80,55 +58,17 @@ public class FinderFactory {
             if (file.exists()) {
                 url = file.toURI().toURL();
                 
-                File webInfClassesFolder = new File(file, "WEB-INF/classes");
+                File webInfClassesFolder = new File(file, "WEB-INF/classes"); // is it possible?? normally no
 				if (webInfClassesFolder.exists() && webInfClassesFolder.isDirectory()) {
                 	url = webInfClassesFolder.toURI().toURL();
                 }
-                if (webInfClassesFolder.getParentFile().exists()) {
-                    final FileInputStream fis = inputStream(webInfClassesFolder.getParentFile().getParentFile(), WEB_SCAN_XML);
-                    final IAnnotationFinder finder = xmlFinder(module, fis, Arrays.asList(url));
-                    if (finder != null) {
-                        return finder;
-                    }
-                }
             } else {
                 url = new URL(location);
             }
 
-            final IAnnotationFinder finder = xmlFinder(module, module.getClassLoader().getResourceAsStream(SCAN_XML), Arrays.asList(url));
-            if (finder != null) {
-                return finder;
-            }
-
-            return new AnnotationFinder(new ClasspathArchive(module.getClassLoader(), url)).link();
+            return new AnnotationFinder(new ConfigurableClasspathArchive(module.getClassLoader(), url)).link();
         } else {
             return new AnnotationFinder(new ClassesArchive()).link();
         }
     }
-
-    private static IAnnotationFinder xmlFinder(final DeploymentModule module, final InputStream scanIs, final Iterable<URL> urls, final Class<?> clazz) {
-        if (scanIs != null) {
-            try {
-                final IAnnotationFinder finder = XMLAnnotationFinderHelper.finderFromXml(scanIs, module.getClassLoader(), urls, clazz);
-                logger.info("using scan.xml for module " + module.getModuleId());
-                return finder;
-            } catch (JAXBException jaxbEx) {
-                logger.warning("can't use scan.xml for " + module.getModuleId());
-            }
-        }
-        return null;
-    }
-
-    private static IAnnotationFinder xmlFinder(final DeploymentModule module, final InputStream scanIs, final Iterable<URL> urls) {
-        return xmlFinder(module, scanIs, urls, null);
-    }
-
-    private static FileInputStream inputStream(final File file, final String xml) throws FileNotFoundException {
-        final File scanFile = new File(file, xml);
-        if (scanFile.exists()) {
-            return new FileInputStream(scanFile);
-        }
-        return null;
-    }
-
 }

Added: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ScanConstants.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ScanConstants.java?rev=1292692&view=auto
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ScanConstants.java (added)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ScanConstants.java Thu Feb 23 08:13:31 2012
@@ -0,0 +1,6 @@
+package org.apache.openejb.config;
+
+public interface ScanConstants {
+    static final String SCAN_XML_PROPERTY = "openejb.scan.xml.name";
+    static final String SCAN_XML = "META-INF/scan.xml";
+}

Added: openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/scanning/AbstractXmlAnnotationFinderTest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/scanning/AbstractXmlAnnotationFinderTest.java?rev=1292692&view=auto
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/scanning/AbstractXmlAnnotationFinderTest.java (added)
+++ openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/scanning/AbstractXmlAnnotationFinderTest.java Thu Feb 23 08:13:31 2012
@@ -0,0 +1,61 @@
+package org.apache.openejb.config.scanning;
+
+import org.apache.openejb.config.ConfigurableClasspathArchive;
+import org.apache.openejb.config.scanning.bean.MyAnnotation;
+import org.apache.openejb.config.scanning.bean.MyBean1;
+import org.apache.openejb.config.scanning.bean.MyBean2;
+import org.apache.openejb.config.scanning.bean.MyBean3;
+import org.apache.xbean.finder.AnnotationFinder;
+import org.apache.xbean.finder.IAnnotationFinder;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.net.URL;
+import java.util.List;
+
+import static org.junit.Assert.assertEquals;
+
+public abstract class AbstractXmlAnnotationFinderTest {
+    protected IAnnotationFinder finder;
+
+    @Before
+    public void initFinder() throws Exception {
+        final ClassLoader loader = Thread.currentThread().getContextClassLoader();
+        System.setProperty("openejb.scan.xml.name", scanXml());
+        finder = new AnnotationFinder(new ConfigurableClasspathArchive(loader,
+                new URL[] {
+                        new URL(loader.getResource(scanXml()).toExternalForm().replace(scanXml(), ""))
+                }
+        ));
+        System.clearProperty("openejb.scan.xml.name");
+    }
+
+    protected abstract String scanXml();
+
+    @Test
+    public void findClass() {
+        final List<Class<?>> myClassAnnotated = finder.findAnnotatedClasses(MyAnnotation.class);
+        assertEquals(1, myClassAnnotated.size());
+        assertEquals(MyBean1.class, myClassAnnotated.iterator().next());
+    }
+
+    @Test
+    public void findMethod() {
+        final List<Method> myMethodAnnotated = finder.findAnnotatedMethods(MyAnnotation.class);
+        assertEquals(1, myMethodAnnotated.size());
+        final Method method = myMethodAnnotated.iterator().next();
+        assertEquals(MyBean2.class, method.getDeclaringClass());
+        assertEquals("aMethod", method.getName());
+    }
+
+    @Test
+    public void findField() {
+        final List<Field> myFieldAnnotated = finder.findAnnotatedFields(MyAnnotation.class);
+        assertEquals(1, myFieldAnnotated.size());
+        final Field field = myFieldAnnotated.iterator().next();
+        assertEquals(MyBean3.class, field.getDeclaringClass());
+        assertEquals("aField", field.getName());
+    }
+}

Added: openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/scanning/XmlClassesAnnotationFinderTest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/scanning/XmlClassesAnnotationFinderTest.java?rev=1292692&view=auto
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/scanning/XmlClassesAnnotationFinderTest.java (added)
+++ openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/scanning/XmlClassesAnnotationFinderTest.java Thu Feb 23 08:13:31 2012
@@ -0,0 +1,8 @@
+package org.apache.openejb.config.scanning;
+
+public class XmlClassesAnnotationFinderTest extends AbstractXmlAnnotationFinderTest {
+    @Override
+    public String scanXml() {
+        return "test-scan.xml";
+    }
+}

Added: openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/scanning/XmlPackageAnnotationFinderTest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/scanning/XmlPackageAnnotationFinderTest.java?rev=1292692&view=auto
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/scanning/XmlPackageAnnotationFinderTest.java (added)
+++ openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/scanning/XmlPackageAnnotationFinderTest.java Thu Feb 23 08:13:31 2012
@@ -0,0 +1,8 @@
+package org.apache.openejb.config.scanning;
+
+public class XmlPackageAnnotationFinderTest extends AbstractXmlAnnotationFinderTest {
+    @Override
+    protected String scanXml() {
+        return "test-package-scan.xml";
+    }
+}

Added: openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/scanning/bean/MyAnnotation.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/scanning/bean/MyAnnotation.java?rev=1292692&view=auto
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/scanning/bean/MyAnnotation.java (added)
+++ openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/scanning/bean/MyAnnotation.java Thu Feb 23 08:13:31 2012
@@ -0,0 +1,11 @@
+package org.apache.openejb.config.scanning.bean;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})
+public @interface MyAnnotation {
+}

Added: openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/scanning/bean/MyBean1.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/scanning/bean/MyBean1.java?rev=1292692&view=auto
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/scanning/bean/MyBean1.java (added)
+++ openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/scanning/bean/MyBean1.java Thu Feb 23 08:13:31 2012
@@ -0,0 +1,5 @@
+package org.apache.openejb.config.scanning.bean;
+
+@MyAnnotation
+public class MyBean1 {
+}

Added: openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/scanning/bean/MyBean2.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/scanning/bean/MyBean2.java?rev=1292692&view=auto
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/scanning/bean/MyBean2.java (added)
+++ openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/scanning/bean/MyBean2.java Thu Feb 23 08:13:31 2012
@@ -0,0 +1,6 @@
+package org.apache.openejb.config.scanning.bean;
+
+public class MyBean2 {
+    @MyAnnotation
+    public void aMethod() {}
+}

Added: openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/scanning/bean/MyBean3.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/scanning/bean/MyBean3.java?rev=1292692&view=auto
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/scanning/bean/MyBean3.java (added)
+++ openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/scanning/bean/MyBean3.java Thu Feb 23 08:13:31 2012
@@ -0,0 +1,6 @@
+package org.apache.openejb.config.scanning.bean;
+
+public class MyBean3 {
+    @MyAnnotation
+    private int aField;
+}

Added: openejb/trunk/openejb/container/openejb-core/src/test/resources/test-package-scan.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/test/resources/test-package-scan.xml?rev=1292692&view=auto
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/test/resources/test-package-scan.xml (added)
+++ openejb/trunk/openejb/container/openejb-core/src/test/resources/test-package-scan.xml Thu Feb 23 08:13:31 2012
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<scan>
+  <packages>
+    <package>org.apache.openejb.config.scanning.bean</package>
+  </packages>
+</scan>

Added: openejb/trunk/openejb/container/openejb-core/src/test/resources/test-scan.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/test/resources/test-scan.xml?rev=1292692&view=auto
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/test/resources/test-scan.xml (added)
+++ openejb/trunk/openejb/container/openejb-core/src/test/resources/test-scan.xml Thu Feb 23 08:13:31 2012
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<scan>
+  <classes>
+    <class>org.apache.openejb.config.scanning.bean.MyBean1</class>
+    <class>org.apache.openejb.config.scanning.bean.MyBean2</class>
+    <class>org.apache.openejb.config.scanning.bean.MyBean3</class>
+  </classes>
+  <packages/>
+</scan>