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

Brendan Healey (Resolved) (JIRA) jira-events at lists.jboss.org
Thu Dec 15 03:50:09 EST 2011


     [ https://issues.jboss.org/browse/WELD-1027?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Brendan Healey resolved WELD-1027.
----------------------------------

    Resolution: Incomplete Description


Further testing has shown that the problem I'm experiencing
is not well described by this bug report so I'm closing it.
It now seems that my problem is related to using
@PersistenceContext in an overloaded method in a base class.
                
> @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