Author: bergmark
Date: Thu Nov 11 19:48:46 2010
New Revision: 1034079

URL: http://svn.apache.org/viewvc?rev=1034079&view=rev
Log:
[OWB-489] Added support for AnnotatedTypes added by Extensions in 
BeforeBeanDiscovery.addAnnotatedType

Added:
    
openwebbeans/branches/owb_1.0.x/webbeans-impl/src/test/java/org/apache/webbeans/newtests/portable/BeforeBeanDiscoveryTest.java
      - copied unchanged from r1034025, 
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/portable/BeforeBeanDiscoveryTest.java
    
openwebbeans/branches/owb_1.0.x/webbeans-impl/src/test/java/org/apache/webbeans/newtests/portable/addannotated/
      - copied from r1034025, 
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/portable/addannotated/
    
openwebbeans/branches/owb_1.0.x/webbeans-impl/src/test/java/org/apache/webbeans/newtests/portable/addannotated/extension/
      - copied from r1034025, 
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/portable/addannotated/extension/
    
openwebbeans/branches/owb_1.0.x/webbeans-impl/src/test/java/org/apache/webbeans/newtests/portable/addannotated/extension/AddAdditionalAnnotatedTypeExtension.java
      - copied unchanged from r1034025, 
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/portable/addannotated/extension/AddAdditionalAnnotatedTypeExtension.java
Modified:
    openwebbeans/branches/owb_1.0.x/webbeans-impl/   (props changed)
    
openwebbeans/branches/owb_1.0.x/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java
    
openwebbeans/branches/owb_1.0.x/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java

Propchange: openwebbeans/branches/owb_1.0.x/webbeans-impl/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Nov 11 19:48:46 2010
@@ -1 +1 @@
-/openwebbeans/trunk/webbeans-impl:1021872
+/openwebbeans/trunk/webbeans-impl:1021872,1034025

Modified: 
openwebbeans/branches/owb_1.0.x/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/branches/owb_1.0.x/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java?rev=1034079&r1=1034078&r2=1034079&view=diff
==============================================================================
--- 
openwebbeans/branches/owb_1.0.x/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java
 (original)
+++ 
openwebbeans/branches/owb_1.0.x/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java
 Thu Nov 11 19:48:46 2010
@@ -22,10 +22,11 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.lang.annotation.Annotation;
 import java.net.URL;
+import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Set;
-import java.util.ArrayList;
 import java.util.Stack;
 
 import javax.enterprise.inject.Model;
@@ -169,6 +170,9 @@ public class BeansDeployer
                 //Discover classpath classes
                 deployFromClassPath(scanner);
                 
+                //Deploy additional Annotated Types
+                deployAdditionalAnnotatedTypes();
+                
                 //Check Specialization
                 checkSpecializations(scanner);
                 
@@ -471,27 +475,19 @@ public class BeansDeployer
                 //Define annotation type
                 AnnotatedType<?> annotatedType = 
AnnotatedElementFactory.getInstance().newAnnotatedType(implClass);
                 
-                //Fires ProcessAnnotatedType
-                ProcessAnnotatedTypeImpl<?> processAnnotatedEvent = 
WebBeansUtil.fireProcessAnnotatedTypeEvent(annotatedType);     
-                
-                //if veto() is called
-                if(processAnnotatedEvent.isVeto())
+                if (null != annotatedType)
                 {
-                    continue;
-                }
-                
-                //Try class is Managed Bean
-                boolean isDefined = 
defineManagedBean((Class<Object>)implClass, 
(ProcessAnnotatedTypeImpl<Object>)processAnnotatedEvent);
-                
-                //Try class is EJB bean
-                if(!isDefined && this.discoverEjb)
-                {                    
-                    if(EJBWebBeansConfigurator.isSessionBean(implClass))
+                    deploySingleAnnotatedType(implClass, annotatedType);
+                } 
+                else
+                {
+                    if (logger.wblWillLogDebug())
                     {
-                        logger.debug("Found Enterprise Bean with class name : 
[{0}]", implClass.getName());
-                        defineEnterpriseWebBean((Class<Object>)implClass, 
(ProcessAnnotatedTypeImpl<Object>)processAnnotatedEvent);                       
 
+                        logger.debug("Error creating managed bean "+ 
implClass);
                     }
-                }                                     
+
+                }
+
             }
         }
 
@@ -500,6 +496,55 @@ public class BeansDeployer
     }
     
     /**
+     * Deploys any AnnotatedTypes added to the BeanManager during 
beforeBeanDiscovery.
+     */
+    private void deployAdditionalAnnotatedTypes()
+    {
+        BeanManagerImpl beanManager = BeanManagerImpl.getManager();
+        
+        List<AnnotatedType<?>> annotatedTypes = 
beanManager.getAnnotatedTypes();
+        
+        for(AnnotatedType<?> type : annotatedTypes)
+        {
+            Class implClass = type.getJavaClass();
+            
+            deploySingleAnnotatedType(implClass, type);                        
   
+        }
+    }
+    
+    /**
+     * Common helper method used to deploy annotated types discovered through
+     * scanning or during beforeBeanDiscovery.
+     * 
+     * @Param Class implClass the class of the bean to be deployed
+     * @Param AnnotatedType the AnnotatedType representing the bean to be 
deployed
+     */
+    private void deploySingleAnnotatedType(Class implClass, AnnotatedType 
annotatedType)
+    {
+        // Fires ProcessAnnotatedType
+        ProcessAnnotatedTypeImpl<?> processAnnotatedEvent = 
WebBeansUtil.fireProcessAnnotatedTypeEvent(annotatedType);
+
+        // if veto() is called
+        if (processAnnotatedEvent.isVeto())
+        {
+            return;
+        }
+
+        // Try class is Managed Bean
+        boolean isDefined = defineManagedBean((Class<Object>) implClass, 
(ProcessAnnotatedTypeImpl<Object>) processAnnotatedEvent);
+
+        // Try class is EJB bean
+        if (!isDefined && this.discoverEjb)
+        {
+            if (EJBWebBeansConfigurator.isSessionBean(implClass))
+            {
+                logger.debug("Found Enterprise Bean with class name : [{0}]", 
implClass.getName());
+                defineEnterpriseWebBean((Class<Object>) implClass, 
(ProcessAnnotatedTypeImpl<Object>) processAnnotatedEvent);
+            }
+        }
+    }
+    
+    /**
      * Discovers and deploys classes from XML.
      * 
      * NOTE : Currently XML file is just used for configuring.

Modified: 
openwebbeans/branches/owb_1.0.x/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/branches/owb_1.0.x/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java?rev=1034079&r1=1034078&r2=1034079&view=diff
==============================================================================
--- 
openwebbeans/branches/owb_1.0.x/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java
 (original)
+++ 
openwebbeans/branches/owb_1.0.x/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java
 Thu Nov 11 19:48:46 2010
@@ -1105,6 +1105,11 @@ public class BeanManagerImpl implements 
         return additionalScopes;
     }
     
+    public List<AnnotatedType<?>> getAnnotatedTypes()
+    {
+        return this.additionalAnnotatedTypes;
+    }
+    
     public void clear()
     {
         this.additionalAnnotatedTypes.clear();


Reply via email to