Ivn Lahav created WFLY-5369:
-------------------------------
Summary: Wildfly doesn't handle @Resource name attribute
Key: WFLY-5369
URL:
https://issues.jboss.org/browse/WFLY-5369
Project: WildFly
Issue Type: Bug
Affects Versions: 9.0.1.Final
Reporter: Ivn Lahav
Assignee: Jason Greene
When using {{@Resource}} with {{name}} attribute to inject an object from environment
naming context (ENC) into a servlet or EJB, Wildfly is producing an error.
Here is an example from injecting into Servlet (the same is with injecting into EJBs).
First the part that does work:
{code}
@WebServlet(loadOnStartup=1)
@Resource(name="db1", lookup="java:jboss/datasources/ExampleDS",
type=DataSource.class)
public class Servlet1 extends HttpServlet {
@PostConstruct
public void init0() throws Exception {
System.out.println("___________db1: " +
InitialContext.doLookup("java:comp/env/db1"));
}
}
{code}
So we can see that the ENC entry {{db1}} is properly defined and can be looked up.
Now we add a field to the above class and use {{@Resource}} injection:
{code}
@Resource(name='db1')
DataSource ds;
{code}
we get the this error:
{code}
Caused by: java.lang.IllegalArgumentException: WFLYEE0047: Incompatible conflicting
binding at java:module/env/db1 source: lookup (java:jboss/datasources/ExampleDS)
at
org.jboss.as.ee.component.deployers.ModuleJndiBindingProcessor.addJndiBinding(ModuleJndiBindingProcessor.java:221)
at
org.jboss.as.ee.component.deployers.ModuleJndiBindingProcessor$1.handle(ModuleJndiBindingProcessor.java:183)
at
org.jboss.as.ee.component.ClassDescriptionTraversal.run(ClassDescriptionTraversal.java:54)
at
org.jboss.as.ee.component.deployers.ModuleJndiBindingProcessor.processClassConfigurations(ModuleJndiBindingProcessor.java:187)
at
org.jboss.as.ee.component.deployers.ModuleJndiBindingProcessor.deploy(ModuleJndiBindingProcessor.java:144)
at
org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:156)
... 5 more
{code}
Interestingly, if I change the data type of a field from {{DataSource}} to {{Object}},
things start working.
This is a very basic functionality of Java EE and we are using it extensively to produce
vendor independent deployment units that directly reference only logical ENC entries and
not physical vendor specific JNDI names. Then during deployment the administrator would
customize the mapping to match the application server and a specific environment.
--
This message was sent by Atlassian JIRA
(v6.4.11#64026)