+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.
>> 
>> 
>

Reply via email to