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.

Reply via email to