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'm not really sure what could be causing this, weld, codi, jdk7?? Thanks. -- View this message in context: http://old.nabble.com/%40Inject%27ed-protected-base-class-member-access-problem-tp32952025p32952025.html Sent from the MyFaces - Users mailing list archive at Nabble.com.