[cdi-dev] [JBoss JIRA] (CDI-456) fix Bean#getBeanClass() definition

Jozef Hartinger (JIRA) issues at jboss.org
Thu Sep 4 04:38:59 EDT 2014

    [ https://issues.jboss.org/browse/CDI-456?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12998713#comment-12998713 ] 

Jozef Hartinger commented on CDI-456:

The reason why getBeanClass() is defined as it is is modularity. In CDI the concept of "bean class" is used to determine whether a bean in module A is visible to a different bean in module B or not. For producer methods and fields it is the declaring class that determines this, not the return type. 

If you for example have an EAR with multiple wars and one of them defines Foo.class:
public class Foo {
   String foo() {
      return "foo";

You want to use Foo.class (the declaring class) to determine visibility of the producer method, not String.class (the return type) as otherwise your producer would be visible from all the other WARs! This is especially the case for custom beans where you have no knowledge if the custom bean represents a producer field/method or not. See section 5.1. Modularity for details.

> fix Bean#getBeanClass() definition
> ----------------------------------
>                 Key: CDI-456
>                 URL: https://issues.jboss.org/browse/CDI-456
>             Project: CDI Specification Issues
>          Issue Type: Bug
>          Components: Beans
>            Reporter: Mark Struberg
> currently Bean#getBeanClass() is defined to return the class of the bean it produces but has one important exception: in case of a producer method or field it must return the class of the owner bean of this method or field.
> Imo this only causes troubles and doesn't add any benefit. 
> * At the time when 'using' the Bean (create and destroy) we always ONLY need the type which is to be created.
> * At the time we create interceptors we ONLY need the type which is to be created;
> * At the time we create the normalscoping proxies we ONLY need the type which is to be created;
> In fact the only time we need the ownerBean is when scanning the methods and fields in it. And for creating we really need the owner-Bean and not it's bean-class!
> In OWB we worked around this by having our own method getReturnType() which consistently returns the type which gets created.

This message was sent by Atlassian JIRA

More information about the cdi-dev mailing list