You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by db...@apache.org on 2011/07/07 05:51:40 UTC

svn commit: r1143645 - /openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java

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)
         {