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