[weld-issues] [JBoss JIRA] (WELD-1027) @Inject'ed protected base class member access problem

Brendan Healey (Created) (JIRA) jira-events at lists.jboss.org
Tue Dec 13 06:51:09 EST 2011


@Inject'ed protected base class member access problem
-----------------------------------------------------

                 Key: WELD-1027
                 URL: https://issues.jboss.org/browse/WELD-1027
             Project: Weld
          Issue Type: Bug
    Affects Versions: 1.1.2.Final
         Environment: Glassfish 3.1.1 Chrome browser.
            Reporter: Brendan Healey


In the following code I'm trying to inject a SessionScoped bean into a stateless EJB,
but I want to do the @Inject in an abstract base class of the EJB. According to the
CDI spec it seems to suggest that this should work:

"4.2. Inheritance of member-level metadata 

Suppose a class X is extended directly or indirectly by the bean class of a managed bean or session bean Y. 

If X declares an injected field x then Y inherits x." 

What happens is that I can access the inherited protected member sessionView from TestEjb,
but not from code within the base class. When I say "can access", I mean that the injected
member is accessible at runtime and is not null.

@Named 
@ViewAccessScoped 
public class JsfBean extends implements Serializable { 
  @Inject private TestEjb ejb; 

  SessionView s1 = ejb.getSessionViewChild();  // sessionView injected ok 
  SessionView s2 = ejb.getSessionViewBase();   // s2 is null
} 

@Named 
@SessionScoped 
public class SessionView implements Serializable {} 

@Stateless 
public class TestEjb extends BaseClass implements Serializable { 

  public SessionView getSessionViewChild() { 
    return sessionView; 
  } 
} 

public abstract class BaseClass implements Serializable { 
    @Inject 
    protected SessionView sessionView; 

    public SessionView getSessionViewBase() { 
      return sessionView; 
  } 
} 

What happens is that s1 is a valid SessionView reference, but s2 is null. It now
turns out that if I change the access of sessionView in BaseClass to private, it
works, but only if I clean & build before re-deployment. It will then consistently
work - unless I change it back to protected, in which case it will consistently not
work. 

I am using MyFaces CODI 1.0.1 in conjunction with Weld from Glassfish 3.1.1
(v20110404-1554). I am also using JDK 7u1. I reported this on the MyFaces mailing
list but Gerhard said this looked like a weld issue.

Thanks.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.jboss.org/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the weld-issues mailing list