[weld-issues] [JBoss JIRA] (WELD-1027) @Inject'ed protected base class member access problem
Brendan Healey (Commented) (JIRA)
jira-events at lists.jboss.org
Wed Dec 14 05:29:09 EST 2011
[ https://issues.jboss.org/browse/WELD-1027?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12650798#comment-12650798 ]
Brendan Healey commented on WELD-1027:
--------------------------------------
I'm no longer quite so sure that my problem description is correct. At the weekend I
had only been able to get this working using private access. However when I resumed
development and testing on Monday I was getting a NullPointerException even when
using private access. After changing to protected access and doing a clean and build
it now works.
What seems to be happening is that some builds work, and some don't.
> @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