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

Brendan Healey (Commented) (JIRA) jira-events at lists.jboss.org
Wed Dec 14 05:29:09 EST 2011


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

Brendan Healey commented on WELD-1027:
--------------------------------------

I'm no longer quite so sure that my problem description is correct. At the weekend I
had only been able to get this working using private access. However when I resumed
development and testing on Monday I was getting a NullPointerException even when
using private access. After changing to protected access and doing a clean and build
it now works.

What seems to be happening is that some builds work, and some don't.
                
> @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