Author: dblevins
Date: Thu Jul  7 03:51:40 2011
New Revision: 1143645

URL: http://svn.apache.org/viewvc?rev=1143645&view=rev
Log:
OWB-591: EJB @Specializes inheritance

Modified:
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java?rev=1143645&r1=1143644&r2=1143645&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java
 Thu Jul  7 03:51:40 2011
@@ -2126,8 +2126,34 @@ public final class WebBeansUtil
 
     public static Bean<?> getMostSpecializedBean(BeanManager manager, Bean<?> 
component)
     {
-        Set<Bean<?>> beans = manager.getBeans(component.getBeanClass(),
-                
AnnotationUtil.getAnnotationsFromSet(component.getQualifiers()));
+         Set<Bean<?>> beans;
+
+         if (component instanceof EnterpriseBeanMarker)
+         {
+             beans = new HashSet<Bean<?>>();
+             Set<Bean<?>> allBeans = 
((BeanManagerImpl)(manager)).getBeans(Object.class, 
AnnotationUtil.getAnnotationsFromSet(component.getQualifiers()));
+
+             for(Bean<?> candidateBean : allBeans)
+             {
+                 if (candidateBean instanceof EnterpriseBeanMarker)
+                 {
+                     /*
+                      * If a bean class of a session bean X is annotated 
@Specializes, then the bean class of X must directly extend
+                      * the bean class of another session bean Y. Then X 
directly specializes Y, as defined in Section 4.3, ‚"Specialization".
+                      */
+                     Class<?> candidateSuperClass = 
candidateBean.getBeanClass().getSuperclass();
+                     if (candidateSuperClass.equals(component.getBeanClass()))
+                     {
+                         beans.add(candidateBean);
+                     }
+                 }
+             }
+         }
+         else
+         {
+             beans = manager.getBeans(component.getBeanClass(),
+                     
AnnotationUtil.getAnnotationsFromSet(component.getQualifiers()));
+         }
 
         for(Bean<?> bean : beans)
         {


Reply via email to