[
https://issues.jboss.org/browse/WELD-1027?page=com.atlassian.jira.plugin....
]
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