[webbeans-commits] Webbeans SVN: r533 - in ri/trunk/webbeans-ri/src: main/java/org/jboss/webbeans/bootstrap and 5 other directories.

webbeans-commits at lists.jboss.org webbeans-commits at lists.jboss.org
Tue Dec 16 13:09:58 EST 2008


Author: pete.muir at jboss.org
Date: 2008-12-16 13:09:58 -0500 (Tue, 16 Dec 2008)
New Revision: 533

Added:
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bootstrap/spi/BusinessInterfaceDescriptor.java
Modified:
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/EnterpriseBean.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bootstrap/WebBeansBootstrap.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bootstrap/spi/EjbDescriptor.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bootstrap/spi/WebBeanDiscovery.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ejb/EJB.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ejb/EjbDescriptorCache.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/Reflections.java
   ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/AbstractTest.java
   ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/BoostrapTest.java
   ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/NewEventTest.java
   ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/mock/MockBootstrap.java
   ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/mock/MockEjbDescriptor.java
   ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/mock/MockWebBeanDiscovery.java
Log:
Fix Nick's weird EJB code from last night, remove all usage of EJB metadata scanning from code (comment out remove methods for now), improve structure of mock bootstrap

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/EnterpriseBean.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/EnterpriseBean.java	2008-12-16 07:36:02 UTC (rev 532)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/EnterpriseBean.java	2008-12-16 18:09:58 UTC (rev 533)
@@ -37,7 +37,6 @@
 import org.jboss.webbeans.ManagerImpl;
 import org.jboss.webbeans.bootstrap.spi.EjbDescriptor;
 import org.jboss.webbeans.contexts.DependentContext;
-import org.jboss.webbeans.ejb.EJB;
 import org.jboss.webbeans.ejb.EjbDescriptorCache;
 import org.jboss.webbeans.introspector.AnnotatedField;
 import org.jboss.webbeans.introspector.AnnotatedMethod;
@@ -144,7 +143,7 @@
       {
          return;
       }
-      if (!EJB.isEjb(getType().getSuperclass()))
+      if (EjbDescriptorCache.instance().containsKey(getType().getSuperclass()))
       {
          throw new DefinitionException("Annotation defined specializing EJB must have EJB superclass");
       }
@@ -185,13 +184,13 @@
    private Set<AnnotatedMethod<Object>> getNoArgsRemoveMethods()
    {
       Set<AnnotatedMethod<Object>> noArgsRemoveMethods = new HashSet<AnnotatedMethod<Object>>();
-      for (AnnotatedMethod<Object> removeMethod : getAnnotatedItem().getAnnotatedMethods(EJB.REMOVE_ANNOTATION))
+      /*for (AnnotatedMethod<Object> removeMethod : getAnnotatedItem().getAnnotatedMethods(EJB.REMOVE_ANNOTATION))
       {
          if (removeMethod.getParameters().isEmpty())
          {
             noArgsRemoveMethods.add(removeMethod);
          }
-      }
+      }*/
       return noArgsRemoveMethods;
    }
 
@@ -205,10 +204,10 @@
          return;
       }
 
-      if (removeMethod.isAnnotationPresent(Destructor.class) && !removeMethod.isAnnotationPresent(EJB.REMOVE_ANNOTATION))
+      /*if (removeMethod.isAnnotationPresent(Destructor.class) && !removeMethod.isAnnotationPresent(EJB.REMOVE_ANNOTATION))
       {
          throw new DefinitionException("Methods marked @Destructor must also be marked @Remove on " + removeMethod.getName());
-      }
+      }*/
       else if (removeMethod.isAnnotationPresent(Initializer.class))
       {
          throw new DefinitionException("Remove methods cannot be initializers on " + removeMethod.getName());

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bootstrap/WebBeansBootstrap.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bootstrap/WebBeansBootstrap.java	2008-12-16 07:36:02 UTC (rev 532)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bootstrap/WebBeansBootstrap.java	2008-12-16 18:09:58 UTC (rev 533)
@@ -57,7 +57,6 @@
 import org.jboss.webbeans.bootstrap.spi.WebBeanDiscovery;
 import org.jboss.webbeans.contexts.DependentContext;
 import org.jboss.webbeans.ejb.DefaultEnterpriseBeanLookup;
-import org.jboss.webbeans.ejb.EJB;
 import org.jboss.webbeans.ejb.EjbDescriptorCache;
 import org.jboss.webbeans.event.ObserverImpl;
 import org.jboss.webbeans.introspector.AnnotatedField;
@@ -82,7 +81,7 @@
 
    private static LogProvider log = Logging.getLogProvider(WebBeansBootstrap.class);
    
-   private ManagerImpl manager;
+   protected ManagerImpl manager;
 
    /**
     * Constructor
@@ -107,7 +106,7 @@
     * 
     * @param classes The classes to register
     */
-   public void registerBeans(Class<?>... classes)
+   protected void registerBeans(Class<?>... classes)
    {
       registerBeans(new HashSet<Class<?>>(Arrays.asList(classes)));
    }
@@ -117,11 +116,21 @@
     * 
     * @param classes The classes to register as Web Beans
     */
-   public void registerBeans(Iterable<Class<?>> classes)
+   protected void registerBeans(Iterable<Class<?>> classes)
    {
       Set<AbstractBean<?, ?>> beans = createBeans(classes);
+      beans.addAll(createStandardBeans());
       manager.setBeans(beans);
    }
+   
+   protected Set<AbstractBean<?, ?>> createStandardBeans()
+   {
+      Set<AbstractBean<?, ?>> beans = new HashSet<AbstractBean<?, ?>>();
+      createBean(BeanFactory.createSimpleBean(Transaction.class, manager), beans);
+      createBean(BeanFactory.createSimpleBean(ManagerImpl.class, manager), beans);
+      createBean(BeanFactory.createSimpleBean(DefaultEnterpriseBeanLookup.class, manager), beans);
+      return beans;
+   }
 
    /**
     * Creates Web Beans from a set of classes
@@ -134,12 +143,12 @@
     * @param classes The classes to adapt
     * @return A set of adapted Web Beans
     */
-   public Set<AbstractBean<?, ?>> createBeans(Iterable<Class<?>> classes)
+   protected Set<AbstractBean<?, ?>> createBeans(Iterable<Class<?>> classes)
    {
       Set<AbstractBean<?, ?>> beans = new HashSet<AbstractBean<?, ?>>();
       for (Class<?> clazz : classes)
       {
-         if (EJB.isEjb(clazz))
+         if (EjbDescriptorCache.instance().containsKey(clazz))
          {
             createBean(createEnterpriseBean(clazz, manager), beans);
          }
@@ -148,14 +157,11 @@
             createBean(createSimpleBean(clazz, manager), beans);
          }
       }
-      createBean(BeanFactory.createSimpleBean(Transaction.class, manager), beans);
-      createBean(BeanFactory.createSimpleBean(ManagerImpl.class, manager), beans);
-      createBean(BeanFactory.createSimpleBean(DefaultEnterpriseBeanLookup.class, manager), beans);
       return beans;
    }
    
 
-   public void createBean(AbstractClassBean<?> bean, Set<AbstractBean<?, ?>> beans)
+   protected void createBean(AbstractClassBean<?> bean, Set<AbstractBean<?, ?>> beans)
    {
       beans.add(bean);
       manager.getResolver().addInjectionPoints(bean.getInjectionPoints());
@@ -219,8 +225,9 @@
       {
          throw new IllegalStateException("No WebBeanDiscovery provider found, you need to implement the org.jboss.webbeans.bootstrap.spi.WebBeanDiscovery interface, and tell the RI to use it by specifying -D" + WebBeansBootstrap.WEB_BEAN_DISCOVERY_PROPERTY_NAME + "=<classname>");
       }
+      // Must populate EJB cache first, as we need it to detect whether a bean is an EJB!
+      EjbDescriptorCache.instance().addAll(webBeanDiscovery.discoverEjbs());
       registerBeans(webBeanDiscovery.discoverWebBeanClasses());
-      EjbDescriptorCache.instance().setEjbDescriptors(webBeanDiscovery.discoverEjbs());
       log.info("Validing Web Bean injection points");
       manager.getResolver().resolveInjectionPoints();
       manager.fireEvent(manager, new InitializedBinding());

Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bootstrap/spi/BusinessInterfaceDescriptor.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bootstrap/spi/BusinessInterfaceDescriptor.java	                        (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bootstrap/spi/BusinessInterfaceDescriptor.java	2008-12-16 18:09:58 UTC (rev 533)
@@ -0,0 +1,21 @@
+/**
+ * 
+ */
+package org.jboss.webbeans.bootstrap.spi;
+
+public interface BusinessInterfaceDescriptor<T>
+{
+
+   /**
+    * Gets the business interface class
+    */
+   public Class<T> getInterface();
+
+   /**
+    * Gets the JNDI name under which the EJB is registered
+    * 
+    * @return The JNDI name
+    */
+   public String getJndiName();
+   
+}
\ No newline at end of file


Property changes on: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bootstrap/spi/BusinessInterfaceDescriptor.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bootstrap/spi/EjbDescriptor.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bootstrap/spi/EjbDescriptor.java	2008-12-16 07:36:02 UTC (rev 532)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bootstrap/spi/EjbDescriptor.java	2008-12-16 18:09:58 UTC (rev 533)
@@ -18,7 +18,6 @@
 package org.jboss.webbeans.bootstrap.spi;
 
 import java.lang.reflect.Method;
-import java.util.Iterator;
 
 /**
  * EJB metadata from the EJB descriptor
@@ -30,23 +29,6 @@
 public interface EjbDescriptor<T>
 {
    
-   public interface BusinessInterfaceDescriptor 
-   {
-   
-      /**
-       * Gets the business interface class
-       */
-      public Class<?> getInterface();
-   
-      /**
-       * Gets the JNDI name under which the EJB is registered
-       * 
-       * @return The JNDI name
-       */
-      public String getJndiName();
-      
-   }
-   
    /**
     * Gets the EJB type
     * 
@@ -59,30 +41,50 @@
     * 
     * @return An iterator over the local business interfaces
     */
-   public Iterator<BusinessInterfaceDescriptor> getLocalBusinessInterfaces();
+   public Iterable<BusinessInterfaceDescriptor<?>> getLocalBusinessInterfaces();
    
    /**
     * Gets the remote business interfaces of the EJB
     * 
     * @return An iterator over the remote business interfaces
     */
-   public Iterator<BusinessInterfaceDescriptor> getRemoteBusinessInterfaces();
+   public Iterable<BusinessInterfaceDescriptor<?>> getRemoteBusinessInterfaces();
    
    /**
     * Get the remove methods of the EJB
     * 
     * @return An iterator the remove methods
     */
-   public Iterator<Method> getRemoveMethods();
+   public Iterable<Method> getRemoveMethods();
 
+   /**
+    * The type of EJB
+    * @return true if the bean is stateless
+    */
    public boolean isStateless();
 
+   /**
+    * The type of EJB
+    * @return true if the bean is an EJB 3.1 singleton
+    */
    public boolean isSingleton();
 
+   /**
+    * The type of EJB
+    * @return true if the bean is stateful
+    */
    public boolean isStateful();
 
+   /**
+    * The type of EJB
+    * @return true if the bean is an MDB
+    */
    public boolean isMessageDriven();
 
+   /**
+    * 
+    * @return The ejbName
+    */
    public String getEjbName();
    
 }

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bootstrap/spi/WebBeanDiscovery.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bootstrap/spi/WebBeanDiscovery.java	2008-12-16 07:36:02 UTC (rev 532)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bootstrap/spi/WebBeanDiscovery.java	2008-12-16 18:09:58 UTC (rev 533)
@@ -18,7 +18,6 @@
 package org.jboss.webbeans.bootstrap.spi;
 
 import java.net.URL;
-import java.util.Map;
 
 /**
  * A container should implement this interface to allow the Web Beans RI to
@@ -44,10 +43,10 @@
    public Iterable<URL> discoverWebBeansXml();
    
    /**
-    * Gets a Map of EJB descriptors, keyed by the EJB bean class
+    * Gets a descriptor for each EJB in the application
     * 
     * @return The bean class to descriptor map 
     */
-   public Map<String, EjbDescriptor<?>> discoverEjbs();
+   public Iterable<EjbDescriptor<?>> discoverEjbs();
    
 }

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ejb/EJB.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ejb/EJB.java	2008-12-16 07:36:02 UTC (rev 532)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ejb/EJB.java	2008-12-16 18:09:58 UTC (rev 533)
@@ -17,25 +17,16 @@
 
 package org.jboss.webbeans.ejb;
 
-import java.lang.annotation.Annotation;
-
 import org.jboss.webbeans.util.ApiAbstraction;
 
 /**
- * Utility class for EJB annotations etc
+ * Utility class for EJB classes etc. EJB metadata should NOT be inspected here
  * 
  * @author Pete Muir
  */
 public class EJB extends ApiAbstraction
 {
 
-   // Annotation instances
-   public static final Class<? extends Annotation> STATELESS_ANNOTATION;
-   public static final Class<? extends Annotation> STATEFUL_ANNOTATION;
-   public static final Class<? extends Annotation> MESSAGE_DRIVEN_ANNOTATION;
-   public static final Class<? extends Annotation> FAKE_MESSAGE_DRIVEN_ANNOTATION;
-   public static final Class<? extends Annotation> SINGLETON_ANNOTATION;
-   public static final Class<? extends Annotation> REMOVE_ANNOTATION;
    public static final Class<?> ENTERPRISE_BEAN_CLASS;
 
    /**
@@ -43,22 +34,7 @@
     */
    static
    {
-      STATELESS_ANNOTATION = annotationTypeForName("javax.ejb.Stateless");
-      STATEFUL_ANNOTATION = annotationTypeForName("javax.ejb.Stateful");
-      MESSAGE_DRIVEN_ANNOTATION = annotationTypeForName("javax.ejb.MessageDriven");
-      // Fake MDB for tests
-      FAKE_MESSAGE_DRIVEN_ANNOTATION = annotationTypeForName("org.jboss.webbeans.test.annotations.MessageDriven");
-      // TODO Faking singleton for tests
-      SINGLETON_ANNOTATION = annotationTypeForName("org.jboss.webbeans.test.annotations.Singleton");
-      // SINGLETON_ANNOTATION = classForName("javax.ejb.Singleton");
-      REMOVE_ANNOTATION = annotationTypeForName("javax.ejb.Remove");
       ENTERPRISE_BEAN_CLASS = classForName("javax.ejb.EnterpriseBean");
    }
-   
-   public static boolean isEjb(Class<?> clazz)
-   {
-      return clazz.isAnnotationPresent(STATEFUL_ANNOTATION) || clazz.isAnnotationPresent(STATELESS_ANNOTATION) || clazz.isAnnotationPresent(SINGLETON_ANNOTATION);
-   }
 
-
 }

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ejb/EjbDescriptorCache.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ejb/EjbDescriptorCache.java	2008-12-16 07:36:02 UTC (rev 532)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ejb/EjbDescriptorCache.java	2008-12-16 18:09:58 UTC (rev 533)
@@ -1,14 +1,12 @@
 package org.jboss.webbeans.ejb;
 
-import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.CopyOnWriteArraySet;
 
 import org.jboss.webbeans.bootstrap.spi.EjbDescriptor;
-import org.jboss.webbeans.test.mock.MockEjbDescriptor;
-import org.jboss.webbeans.util.Strings;
 
-import com.google.common.collect.ForwardingMap;
-
 public class EjbDescriptorCache
 {
    private static EjbDescriptorCache instance;
@@ -23,43 +21,48 @@
       instance = new EjbDescriptorCache();
    }
 
-   private class EjbDescriptorMap extends ForwardingMap<String, EjbDescriptor<?>>
-   {
-      private Map<String, EjbDescriptor<?>> delegate;
+   private ConcurrentMap<String, EjbDescriptor<?>> ejbsByName;
+   private ConcurrentMap<Class<?>, Set<EjbDescriptor<?>>> ejbsByBeanClass;
 
-      public EjbDescriptorMap()
-      {
-         delegate = new ConcurrentHashMap<String, EjbDescriptor<?>>();
-      }
-
-      @Override
-      protected Map<String, EjbDescriptor<?>> delegate()
-      {
-         return delegate;
-      }
-
-      @Override
-      public String toString()
-      {
-         return Strings.mapToString("EjbMetaDataMap (EJB name -> metadata): ", delegate);
-      }
-   }
-
-   private EjbDescriptorMap ejbDescriptorMap = new EjbDescriptorMap();
-
-   public void setEjbDescriptors(Map<String, EjbDescriptor<?>> ejbDescriptorMap)
+   public EjbDescriptorCache()
    {
-      ejbDescriptorMap.putAll(ejbDescriptorMap);
+      this.ejbsByName = new ConcurrentHashMap<String, EjbDescriptor<?>>();
+      this.ejbsByBeanClass = new ConcurrentHashMap<Class<?>, Set<EjbDescriptor<?>>>();
    }
 
    public EjbDescriptor<?> get(String ejbName)
    {
-      return ejbDescriptorMap.get(ejbName);
+      return ejbsByName.get(ejbName);
    }
+   
+   public Iterable<EjbDescriptor<?>> get(Class<?> beanClass)
+   {
+      return ejbsByBeanClass.get(beanClass);
+   }
 
-   public void addEjbDescriptor(String ejbName, EjbDescriptor<?> ejbDescriptor)
+   public void add(EjbDescriptor<?> ejbDescriptor)
    {
-      ejbDescriptorMap.put(ejbName, ejbDescriptor);
+      ejbsByName.put(ejbDescriptor.getEjbName(), ejbDescriptor);
+      ejbsByBeanClass.putIfAbsent(ejbDescriptor.getType(), new CopyOnWriteArraySet<EjbDescriptor<?>>());
+      ejbsByBeanClass.get(ejbDescriptor.getType()).add(ejbDescriptor);
    }
+   
+   public boolean containsKey(String ejbName)
+   {
+      return ejbsByName.containsKey(ejbName);
+   }
+   
+   public boolean containsKey(Class<?> beanClass)
+   {
+      return ejbsByBeanClass.containsKey(beanClass);
+   }
+   
+   public void addAll(Iterable<EjbDescriptor<?>> ejbDescriptors)
+   {
+      for (EjbDescriptor<?> ejbDescriptor : ejbDescriptors)
+      {
+         add(ejbDescriptor);
+      }
+   }
 
 }

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/Reflections.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/Reflections.java	2008-12-16 07:36:02 UTC (rev 532)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/Reflections.java	2008-12-16 18:09:58 UTC (rev 533)
@@ -54,9 +54,21 @@
     */
    public static Class<?> classForName(String name) throws ClassNotFoundException
    {
+      return classForName(name, Thread.currentThread().getContextClassLoader());
+   }
+   
+   /**
+    * Creates an instance from a class name
+    * 
+    * @param name The class name
+    * @return The instance
+    * @throws ClassNotFoundException If the class if not found
+    */
+   public static Class<?> classForName(String name, ClassLoader classLoader) throws ClassNotFoundException
+   {
       try
       {
-         return Thread.currentThread().getContextClassLoader().loadClass(name);
+         return classLoader.loadClass(name);
       }
       catch (Exception e)
       {

Modified: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/AbstractTest.java
===================================================================
--- ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/AbstractTest.java	2008-12-16 07:36:02 UTC (rev 532)
+++ ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/AbstractTest.java	2008-12-16 18:09:58 UTC (rev 533)
@@ -31,8 +31,8 @@
       manager.addContext(SessionContext.INSTANCE);
       ApplicationContext.INSTANCE.setBeanMap(new SimpleBeanMap());
       manager.addContext(ApplicationContext.INSTANCE);
-      // Load the build in beans
-      webBeansBootstrap.registerBeans();
+      // Load the built in beans
+      webBeansBootstrap.registerStandardBeans();
       init();
    }
    

Modified: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/BoostrapTest.java
===================================================================
--- ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/BoostrapTest.java	2008-12-16 07:36:02 UTC (rev 532)
+++ ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/BoostrapTest.java	2008-12-16 18:09:58 UTC (rev 533)
@@ -3,8 +3,8 @@
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Map;
-import java.util.Set;
 
 import javax.webbeans.manager.Bean;
 
@@ -36,12 +36,16 @@
    @Test(groups="bootstrap")
    public void testSingleSimpleBean()
    {
-      Set<AbstractBean<?, ?>> beans = webBeansBootstrap.createBeans(Tuna.class);
+      webBeansBootstrap.boot(new MockWebBeanDiscovery(Tuna.class));
+      List<Bean<?>> beans = manager.getBeans();
+      Map<Class<?>, Bean<?>> classes = new HashMap<Class<?>, Bean<?>>();
       assert beans.size() == 1 + MockManagerImpl.BUILT_IN_BEANS;
-      Map<Class<?>, Bean<?>> classes = new HashMap<Class<?>, Bean<?>>();
-      for (AbstractBean<?, ?> bean : beans)
+      for (Bean<?> bean : beans)
       {
-         classes.put(bean.getType(), bean);
+         if (bean instanceof AbstractBean)
+         {
+            classes.put(((AbstractBean<?, ?>) bean).getType(), bean);
+         }
       }
       assert classes.containsKey(Tuna.class);
    }
@@ -49,12 +53,16 @@
    @Test(groups="bootstrap")
    public void testSingleEnterpriseBean()
    {
-      Set<AbstractBean<?, ?>> beans = webBeansBootstrap.createBeans(Hound.class);
+      webBeansBootstrap.boot(new MockWebBeanDiscovery(Hound.class));
+      List<Bean<?>> beans = manager.getBeans();
       assert beans.size() == 1 + MockManagerImpl.BUILT_IN_BEANS;
       Map<Class<?>, Bean<?>> classes = new HashMap<Class<?>, Bean<?>>();
-      for (AbstractBean<?, ?> bean : beans)
+      for (Bean<?> bean : beans)
       {
-         classes.put(bean.getType(), bean);
+         if (bean instanceof AbstractBean)
+         {
+            classes.put(((AbstractBean<?, ?>) bean).getType(), bean);
+         }
       }
       assert classes.containsKey(Hound.class);
    }
@@ -62,12 +70,16 @@
    @Test(groups="bootstrap")
    public void testMultipleSimpleBean()
    {
-      Set<AbstractBean<?, ?>> beans = webBeansBootstrap.createBeans(Tuna.class, Salmon.class, SeaBass.class, Sole.class);
+      webBeansBootstrap.boot(new MockWebBeanDiscovery(Tuna.class, Salmon.class, SeaBass.class, Sole.class));
+      List<Bean<?>> beans = manager.getBeans();
       assert beans.size() == 4 + MockManagerImpl.BUILT_IN_BEANS;
       Map<Class<?>, Bean<?>> classes = new HashMap<Class<?>, Bean<?>>();
-      for (AbstractBean<?, ?> bean : beans)
+      for (Bean<?> bean : beans)
       {
-         classes.put(bean.getType(), bean);
+         if (bean instanceof AbstractBean)
+         {
+            classes.put(((AbstractBean<?, ?>) bean).getType(), bean);
+         }
       }
       assert classes.containsKey(Tuna.class);
       assert classes.containsKey(Salmon.class);
@@ -83,12 +95,16 @@
    @Test(groups="bootstrap")
    public void testProducerMethodBean()
    {
-      Set<AbstractBean<?, ?>> beans = webBeansBootstrap.createBeans(TarantulaProducer.class);
+      webBeansBootstrap.boot(new MockWebBeanDiscovery(TarantulaProducer.class));
+      List<Bean<?>> beans = manager.getBeans();
       assert beans.size() == 2 + MockManagerImpl.BUILT_IN_BEANS;
       Map<Class<?>, Bean<?>> classes = new HashMap<Class<?>, Bean<?>>();
-      for (AbstractBean<?, ?> bean : beans)
+      for (Bean<?> bean : beans)
       {
-         classes.put(bean.getType(), bean);
+         if (bean instanceof AbstractBean)
+         {
+            classes.put(((AbstractBean<?, ?>) bean).getType(), bean);
+         }
       }
       assert classes.containsKey(TarantulaProducer.class);
       assert classes.containsKey(Tarantula.class);
@@ -100,12 +116,16 @@
    @Test(groups="bootstrap")
    public void testMultipleEnterpriseBean()
    {
-      Set<AbstractBean<?, ?>> beans = webBeansBootstrap.createBeans(Hound.class, Elephant.class, Panther.class, Tiger.class);
+      webBeansBootstrap.boot(new MockWebBeanDiscovery(Hound.class, Elephant.class, Panther.class, Tiger.class));
+      List<Bean<?>> beans = manager.getBeans();
       assert beans.size() == 4 + MockManagerImpl.BUILT_IN_BEANS;
       Map<Class<?>, Bean<?>> classes = new HashMap<Class<?>, Bean<?>>();
-      for (AbstractBean<?, ?> bean : beans)
+      for (Bean<?> bean : beans)
       {
-         classes.put(bean.getType(), bean);
+         if (bean instanceof AbstractBean)
+         {
+            classes.put(((AbstractBean<?, ?>) bean).getType(), bean);
+         }
       }
       assert classes.containsKey(Hound.class);
       assert classes.containsKey(Elephant.class);
@@ -121,12 +141,16 @@
    @Test(groups="bootstrap")
    public void testMultipleEnterpriseAndSimpleBean()
    {
-      Set<AbstractBean<?, ?>> beans = webBeansBootstrap.createBeans(Hound.class, Elephant.class, Panther.class, Tiger.class, Tuna.class, Salmon.class, SeaBass.class, Sole.class);
+      webBeansBootstrap.boot(new MockWebBeanDiscovery(Hound.class, Elephant.class, Panther.class, Tiger.class, Tuna.class, Salmon.class, SeaBass.class, Sole.class));
+      List<Bean<?>> beans = manager.getBeans();
       assert beans.size() == 8 + MockManagerImpl.BUILT_IN_BEANS;
       Map<Class<?>, Bean<?>> classes = new HashMap<Class<?>, Bean<?>>();
-      for (AbstractBean<?, ?> bean : beans)
+      for (Bean<?> bean : beans)
       {
-         classes.put(bean.getType(), bean);
+         if (bean instanceof AbstractBean)
+         {
+            classes.put(((AbstractBean<?, ?>) bean).getType(), bean);
+         }
       }
       assert classes.containsKey(Hound.class);
       assert classes.containsKey(Elephant.class);
@@ -150,7 +174,7 @@
    @Test(groups="bootstrap")
    public void testRegisterProducerMethodBean()
    {
-      webBeansBootstrap.registerBeans(TarantulaProducer.class);
+      webBeansBootstrap.boot(new MockWebBeanDiscovery(TarantulaProducer.class));
       assert manager.getBeans().size() == 2 + MockManagerImpl.BUILT_IN_BEANS;
       Map<Class<?>, Bean<?>> classes = new HashMap<Class<?>, Bean<?>>();
       for (Bean<?> bean : manager.getBeans())
@@ -171,7 +195,7 @@
    @Test(groups="bootstrap")
    public void testRegisterMultipleEnterpriseAndSimpleBean()
    {
-      webBeansBootstrap.registerBeans(Hound.class, Elephant.class, Panther.class, Tiger.class, Tuna.class, Salmon.class, SeaBass.class, Sole.class);
+      webBeansBootstrap.boot(new MockWebBeanDiscovery(Hound.class, Elephant.class, Panther.class, Tiger.class, Tuna.class, Salmon.class, SeaBass.class, Sole.class));
       assert manager.getBeans().size() == 8 + MockManagerImpl.BUILT_IN_BEANS;
       Map<Class<?>, Bean<?>> classes = new HashMap<Class<?>, Bean<?>>();
       for (Bean<?> bean : manager.getBeans())

Modified: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/NewEventTest.java
===================================================================
--- ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/NewEventTest.java	2008-12-16 07:36:02 UTC (rev 532)
+++ ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/NewEventTest.java	2008-12-16 18:09:58 UTC (rev 533)
@@ -1,6 +1,7 @@
 package org.jboss.webbeans.test;
 
 import java.lang.annotation.Annotation;
+import java.util.List;
 import java.util.Set;
 
 import javax.webbeans.DefinitionException;
@@ -10,8 +11,8 @@
 import javax.webbeans.Observer;
 import javax.webbeans.ObserverException;
 import javax.webbeans.TypeLiteral;
+import javax.webbeans.manager.Bean;
 
-import org.jboss.webbeans.bean.AbstractBean;
 import org.jboss.webbeans.bean.BeanFactory;
 import org.jboss.webbeans.bean.EventBean;
 import org.jboss.webbeans.bean.SimpleBean;
@@ -35,6 +36,7 @@
 import org.jboss.webbeans.test.ejb.valid.BullTerrier;
 import org.jboss.webbeans.test.ejb.valid.Pomeranian;
 import org.jboss.webbeans.test.mock.MockManagerImpl;
+import org.jboss.webbeans.test.mock.MockWebBeanDiscovery;
 import org.testng.annotations.Test;
 
 /**
@@ -336,7 +338,8 @@
    @SpecAssertion(section = "8.5")
    public void testObserverMethodOnEnterpriseBeanIsBusinessMethodOrStatic()
    {
-      Set<AbstractBean<?, ?>> beans = webBeansBootstrap.createBeans(Pomeranian.class);
+      webBeansBootstrap.boot(new MockWebBeanDiscovery(Pomeranian.class));
+      List<Bean<?>> beans = manager.getBeans();
       assert beans.size() == 1 + MockManagerImpl.BUILT_IN_BEANS;
       Set<Observer<MockManagerImpl>> observers = manager.resolveObservers(manager, new InitializedBinding());
       assert observers.size() == 2;
@@ -346,7 +349,8 @@
    @SpecAssertion(section = "8.5")
    public void testObserverMethodOnEnterpriseBeanNotBusinessMethodOrStaticFails()
    {
-      Set<AbstractBean<?, ?>> beans = webBeansBootstrap.createBeans(TibetanTerrier.class);
+      webBeansBootstrap.boot(new MockWebBeanDiscovery(TibetanTerrier.class));
+      List<Bean<?>> beans = manager.getBeans();
       assert beans.size() == 1 + MockManagerImpl.BUILT_IN_BEANS;
       Set<Observer<MockManagerImpl>> observers = manager.resolveObservers(manager, new InitializedBinding());
       assert observers.size() == 1;
@@ -366,7 +370,8 @@
    @SpecAssertion(section = { "8.5.1", "8.5.2" })
    public void testObserverMethodMustHaveOnlyOneEventParameter()
    {
-      Set<AbstractBean<?, ?>> beans = webBeansBootstrap.createBeans(YorkshireTerrier.class);
+      webBeansBootstrap.boot(new MockWebBeanDiscovery(YorkshireTerrier.class));
+      List<Bean<?>> beans = manager.getBeans();
       assert beans != null;
    }
 
@@ -374,7 +379,8 @@
    @SpecAssertion(section = "8.5.1")
    public void testObserverMethodCannotObserveParameterizedEvents()
    {
-      Set<AbstractBean<?, ?>> beans = webBeansBootstrap.createBeans(BostonTerrier.class);
+      webBeansBootstrap.boot(new MockWebBeanDiscovery(BostonTerrier.class));
+      List<Bean<?>> beans = manager.getBeans();
       assert beans != null;
    }
 
@@ -383,7 +389,8 @@
    public void testObserverMethodWithoutBindingTypesObservesEventsWithoutBindingTypes()
    {
       // This observer has no binding types specified
-      Set<AbstractBean<?, ?>> beans = webBeansBootstrap.createBeans(Pomeranian.class);
+      webBeansBootstrap.boot(new MockWebBeanDiscovery(Pomeranian.class));
+      List<Bean<?>> beans = manager.getBeans();
       assert beans.size() == 1 + MockManagerImpl.BUILT_IN_BEANS;
 
       // Resolve registered observers with an event containing no binding types
@@ -396,7 +403,8 @@
    @SpecAssertion(section = "8.5.2")
    public void testObserverMethodAnnotatedProducesFails()
    {
-      Set<AbstractBean<?, ?>> beans = webBeansBootstrap.createBeans(BorderTerrier.class);
+      webBeansBootstrap.boot(new MockWebBeanDiscovery(BorderTerrier.class));
+      List<Bean<?>> beans = manager.getBeans();
       assert beans != null;
    }
 
@@ -404,7 +412,8 @@
    @SpecAssertion(section = "8.5.2")
    public void testObserverMethodAnnotatedInitializerFails()
    {
-      Set<AbstractBean<?, ?>> beans = webBeansBootstrap.createBeans(AustralianTerrier.class);
+      webBeansBootstrap.boot(new MockWebBeanDiscovery(AustralianTerrier.class));
+      List<Bean<?>> beans = manager.getBeans();
       assert beans != null;
    }
 
@@ -412,7 +421,8 @@
    @SpecAssertion(section = "8.5.2")
    public void testObserverMethodAnnotatedDestructorFails()
    {
-      Set<AbstractBean<?, ?>> beans = webBeansBootstrap.createBeans(CairnsTerrier.class);
+      webBeansBootstrap.boot(new MockWebBeanDiscovery(CairnsTerrier.class));
+      List<Bean<?>> beans = manager.getBeans();
       assert beans != null;
    }
 
@@ -420,7 +430,8 @@
    @SpecAssertion(section = "8.5.2")
    public void testObserverMethodWithDisposesParamFails()
    {
-      Set<AbstractBean<?, ?>> beans = webBeansBootstrap.createBeans(FoxTerrier.class);
+      webBeansBootstrap.boot(new MockWebBeanDiscovery(FoxTerrier.class));
+      List<Bean<?>> beans = manager.getBeans();
       assert beans != null;
    }
 
@@ -428,7 +439,8 @@
    @SpecAssertion(section = "8.5.2")
    public void testObserverMethodMayHaveMultipleBindingTypes()
    {
-      Set<AbstractBean<?, ?>> beans = webBeansBootstrap.createBeans(BullTerrier.class);
+      webBeansBootstrap.boot(new MockWebBeanDiscovery(BullTerrier.class));
+      List<Bean<?>> beans = manager.getBeans();
       assert beans != null;
       // If we can resolve the observer with the two binding types,
       // then it worked
@@ -456,7 +468,8 @@
    @SpecAssertion(section = "8.5.4")
    public void testObserverMethodReceivesInjectionsOnNonObservesParameters()
    {
-      Set<AbstractBean<?, ?>> beans = webBeansBootstrap.createBeans(BananaSpider.class);
+      webBeansBootstrap.boot(new MockWebBeanDiscovery(BananaSpider.class));
+      List<Bean<?>> beans = manager.getBeans();
       assert beans != null;
    }
 
@@ -470,7 +483,7 @@
    @SpecAssertion(section = "8.5.5")
    public void testConditionalObserver()
    {
-      webBeansBootstrap.registerBeans(RecluseSpider.class);
+      webBeansBootstrap.boot(new MockWebBeanDiscovery(RecluseSpider.class));
 
       manager.fireEvent("New string event");
       // Should not be notified since bean is not instantiated yet
@@ -534,7 +547,8 @@
    @SpecAssertion(section = "8.5.7")
    public void testEnterpriseBeanObserverMethodCalledWithCallerContext()
    {
-      Set<AbstractBean<?, ?>> beans = webBeansBootstrap.createBeans(Pomeranian.class);
+      webBeansBootstrap.boot(new MockWebBeanDiscovery(Pomeranian.class));
+      List<Bean<?>> beans = manager.getBeans();
       assert beans.size() == 1;
       String event = "A new event";
       Set<Observer<String>> observers = manager.resolveObservers(event);
@@ -555,7 +569,8 @@
    @SpecAssertion(section = "8.5.7")
    public void testNonTransactionalObserverThrownNonCheckedExceptionIsRethrown()
    {
-      Set<AbstractBean<?, ?>> beans = webBeansBootstrap.createBeans(TeaCupPomeranian.class);
+      webBeansBootstrap.boot(new MockWebBeanDiscovery(TeaCupPomeranian.class));
+      List<Bean<?>> beans = manager.getBeans();
       assert beans.size() == 1 + MockManagerImpl.BUILT_IN_BEANS;
       manager.fireEvent("Another event");
    }
@@ -564,7 +579,8 @@
    @SpecAssertion(section = "8.5.7")
    public void testNonTransactionalObserverThrownCheckedExceptionIsWrappedAndRethrown()
    {
-      Set<AbstractBean<?, ?>> beans = webBeansBootstrap.createBeans(TeaCupPomeranian.class);
+      webBeansBootstrap.boot(new MockWebBeanDiscovery(TeaCupPomeranian.class));
+      List<Bean<?>> beans = manager.getBeans();
       assert beans.size() == 1 + MockManagerImpl.BUILT_IN_BEANS;
       manager.fireEvent(new Integer(1));
    }
@@ -573,7 +589,7 @@
    @SpecAssertion(section = "8.6")
    public void testDuplicateBindingsToFireFails()
    {
-      webBeansBootstrap.registerBeans(SweeWaxbill.class);
+      webBeansBootstrap.boot(new MockWebBeanDiscovery(SweeWaxbill.class));
       try
       {
          DependentContext.INSTANCE.setActive(true);
@@ -590,7 +606,7 @@
    @SpecAssertion(section = "8.6")
    public void testDuplicateBindingsToObservesFails()
    {
-      webBeansBootstrap.registerBeans(SweeWaxbill.class);
+      webBeansBootstrap.boot(new MockWebBeanDiscovery(SweeWaxbill.class));
       try
       {
          DependentContext.INSTANCE.setActive(true);

Modified: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/mock/MockBootstrap.java
===================================================================
--- ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/mock/MockBootstrap.java	2008-12-16 07:36:02 UTC (rev 532)
+++ ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/mock/MockBootstrap.java	2008-12-16 18:09:58 UTC (rev 533)
@@ -1,14 +1,7 @@
 package org.jboss.webbeans.test.mock;
 
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Set;
-
 import org.jboss.webbeans.ManagerImpl;
-import org.jboss.webbeans.bean.AbstractBean;
 import org.jboss.webbeans.bootstrap.WebBeansBootstrap;
-import org.jboss.webbeans.ejb.EJB;
-import org.jboss.webbeans.ejb.EjbDescriptorCache;
 
 public class MockBootstrap extends WebBeansBootstrap
 { 
@@ -18,24 +11,9 @@
       super(manager);
    }
    
-   /**
-    * Discover any beans defined by the provided classes
-    * 
-    * Beans discovered are not registered with the manager
-    * 
-    * @param classes The classes to create Web Beans from
-    * @return A set of Web Beans that represents the classes
-    */
-   @SuppressWarnings("unchecked")
-   public Set<AbstractBean<?, ?>> createBeans(Class<?>... classes)
+   public void registerStandardBeans()
    {
-      for (Class<?> clazz : classes) {
-         if (EJB.isEjb(clazz)) {
-            String ejbName = clazz.getSimpleName() + "/local";
-            EjbDescriptorCache.instance().addEjbDescriptor(ejbName, new MockEjbDescriptor(ejbName, clazz));
-         }
-      }
-      return createBeans(new HashSet<Class<?>>(Arrays.asList(classes)));
+      manager.setBeans(createStandardBeans());
    }
    
 }

Modified: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/mock/MockEjbDescriptor.java
===================================================================
--- ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/mock/MockEjbDescriptor.java	2008-12-16 07:36:02 UTC (rev 532)
+++ ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/mock/MockEjbDescriptor.java	2008-12-16 18:09:58 UTC (rev 533)
@@ -2,21 +2,27 @@
 
 import java.lang.reflect.Method;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.HashSet;
-import java.util.Iterator;
 
+import javax.ejb.MessageDriven;
+import javax.ejb.Remove;
+import javax.ejb.Singleton;
+import javax.ejb.Stateful;
+import javax.ejb.Stateless;
+
+import org.jboss.webbeans.bootstrap.spi.BusinessInterfaceDescriptor;
 import org.jboss.webbeans.bootstrap.spi.EjbDescriptor;
-import org.jboss.webbeans.ejb.EJB;
 
 public class MockEjbDescriptor<T> implements EjbDescriptor<T>
 {
    private Class<T> type;
    private String ejbName;
 
-   public MockEjbDescriptor(String ejbName, Class<T> type)
+   public MockEjbDescriptor(Class<T> type)
    {
-      this.ejbName = ejbName;
       this.type = type;
+      this.ejbName = type.getSimpleName() + "/local";
    }
 
    public String getEjbName()
@@ -24,27 +30,27 @@
       return ejbName;
    }
 
-   public Iterator<BusinessInterfaceDescriptor> getLocalBusinessInterfaces()
+   public Iterable<BusinessInterfaceDescriptor<?>> getLocalBusinessInterfaces()
    {
-      return new HashSet<BusinessInterfaceDescriptor>().iterator();
+      return Collections.emptyList();
    }
-
-   public Iterator<BusinessInterfaceDescriptor> getRemoteBusinessInterfaces()
+   
+   public Iterable<BusinessInterfaceDescriptor<?>> getRemoteBusinessInterfaces()
    {
-      return new HashSet<BusinessInterfaceDescriptor>().iterator();
+      return Collections.emptyList();
    }
 
-   public Iterator<Method> getRemoveMethods()
+   public Iterable<Method> getRemoveMethods()
    {
       Collection<Method> removeMethods = new HashSet<Method>();
       for (Method method : type.getMethods())
       {
-         if (method.isAnnotationPresent(EJB.REMOVE_ANNOTATION))
+         if (method.isAnnotationPresent(Remove.class))
          {
             removeMethods.add(method);
          }
       }
-      return removeMethods.iterator();
+      return removeMethods;
    }
 
    public Class<T> getType()
@@ -54,22 +60,22 @@
 
    public boolean isMessageDriven()
    {
-      return type.isAnnotationPresent(EJB.MESSAGE_DRIVEN_ANNOTATION);
+      return type.isAnnotationPresent(MessageDriven.class);
    }
 
    public boolean isSingleton()
    {
-      return type.isAnnotationPresent(EJB.SINGLETON_ANNOTATION);
+      return type.isAnnotationPresent(Singleton.class);
    }
 
    public boolean isStateful()
    {
-      return type.isAnnotationPresent(EJB.STATEFUL_ANNOTATION);
+      return type.isAnnotationPresent(Stateful.class);
    }
 
    public boolean isStateless()
    {
-      return type.isAnnotationPresent(EJB.STATELESS_ANNOTATION);
+      return type.isAnnotationPresent(Stateless.class);
    }
 
 }

Modified: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/mock/MockWebBeanDiscovery.java
===================================================================
--- ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/mock/MockWebBeanDiscovery.java	2008-12-16 07:36:02 UTC (rev 532)
+++ ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/mock/MockWebBeanDiscovery.java	2008-12-16 18:09:58 UTC (rev 533)
@@ -1,56 +1,82 @@
 package org.jboss.webbeans.test.mock;
 
 import java.net.URL;
-import java.util.HashMap;
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashSet;
-import java.util.Map;
+import java.util.List;
 import java.util.Set;
 
+import javax.ejb.MessageDriven;
+import javax.ejb.Singleton;
+import javax.ejb.Stateful;
+import javax.ejb.Stateless;
+
 import org.jboss.webbeans.bootstrap.spi.EjbDescriptor;
 import org.jboss.webbeans.bootstrap.spi.WebBeanDiscovery;
 
 public class MockWebBeanDiscovery implements WebBeanDiscovery
 {
 
-   private Set<Class<?>> webBeanClasses = new HashSet<Class<?>>();
+   private Iterable<Class<?>> webBeanClasses = new HashSet<Class<?>>();
 
-   private Set<URL> webBeansXmlFiles = new HashSet<URL>();
+   private Iterable<URL> webBeansXmlFiles = new HashSet<URL>();
 
-   private Map<String, EjbDescriptor<?>> ejbs = new HashMap<String, EjbDescriptor<?>>();
+   private List<EjbDescriptor<?>> ejbs = new ArrayList<EjbDescriptor<?>>();
 
+   /**
+    * Simple constructor that auto discovers EJBs
+    * @param webBeanClasses
+    */
+   public MockWebBeanDiscovery(Class<?>... webBeanClasses)
+   {
+      this(Arrays.asList(webBeanClasses));
+   }
+   
+   public MockWebBeanDiscovery(Iterable<Class<?>> webBeanClasses)
+   {
+      this(webBeanClasses, null, discoverEjbs(webBeanClasses));
+   }
+   
    @SuppressWarnings("unchecked")
-   public MockWebBeanDiscovery(Set<Class<?>> webBeanClasses, Set<URL> webBeansXmlFiles, Set<Class<?>> ejbs)
+   public MockWebBeanDiscovery(Iterable<Class<?>> webBeanClasses, Iterable<URL> webBeansXmlFiles, Iterable<Class<?>> ejbs)
    {
       super();
       this.webBeanClasses = webBeanClasses;
       this.webBeansXmlFiles = webBeansXmlFiles;
-      this.ejbs = new HashMap<String, EjbDescriptor<?>>();
-      for (Class<?> ejb : ejbs)
+      this.ejbs = new ArrayList<EjbDescriptor<?>>();
+      for (Class<?> ejbClass : ejbs)
       {
-         String ejbName = getEjbName(ejb);
-         this.ejbs.put(ejbName, new MockEjbDescriptor(ejbName, ejb));
+         this.ejbs.add(new MockEjbDescriptor(ejbClass));
       }
    }
 
-   private String getEjbName(Class<?> clazz)
-   {
-      return clazz.getSimpleName() + "/local";
-   }
-
    public Iterable<Class<?>> discoverWebBeanClasses()
    {
       return webBeanClasses;
    }
 
-   public Map<String, EjbDescriptor<?>> discoverEjbs()
+   public Iterable<EjbDescriptor<?>> discoverEjbs()
    {
-      // TODO Auto-generated method stub
-      return new HashMap<String, EjbDescriptor<?>>();
+      return ejbs;
    }
 
    public Iterable<URL> discoverWebBeansXml()
    {
       return webBeansXmlFiles;
    }
+   
+   protected static Iterable<Class<?>> discoverEjbs(Iterable<Class<?>> webBeanClasses)
+   {
+      Set<Class<?>> ejbs = new HashSet<Class<?>>();
+      for (Class<?> clazz : webBeanClasses)
+      {
+         if (clazz.isAnnotationPresent(Stateless.class) || clazz.isAnnotationPresent(Stateful.class) || clazz.isAnnotationPresent(MessageDriven.class) || clazz.isAnnotationPresent(Singleton.class)) 
+         {
+            ejbs.add(clazz);
+         }
+      }
+      return ejbs;
+   }
 
 }




More information about the weld-commits mailing list