+1 It seems the Weld version shipping with Glassfish has quite a few problems with any 3-rd party scopes. Not only with CODI but generally with other non-spec scopes as well. E.g. a colleague experienced a complete crash when intercepting 3-rd party scoped beans. Not sure if this still applies to the latest Weld version - but we will pretty soon unravel those issues in DeltaSpike I hope.
LieGrue, strub ----- Original Message ----- > From: Gerhard Petracek <gpetra...@apache.org> > To: MyFaces Discussion <users@myfaces.apache.org> > Cc: > Sent: Saturday, December 10, 2011 11:10 PM > Subject: Re: @Inject'ed protected base class member access problem > > hi, > > please send the same mail to the weld community. codi doesn't perform the > injection itself. > > thx & regards, > gerhard > > > > 2011/12/10 oversteer <brendanhealey...@yahoo.co.uk> > >> >> 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. >> >> >