Inject resource in jax-rs ContainerRequestFilter
mcwolfmm Oct 25, 2016 2:37 AMHi,
I try to inject javax.sql.DataSource into ContainerRequestFilter. Whatever I do, however I can not get a reference to the correct resource. The reference I get is always WrapperDataSource with jndiName = "java:jboss/datasources/ExampleDS". The only option that I get the right resource is passing through @Singleton EJB.
This is a working production:
@Singleton public class DataSourceProvider { @Resource(name = "DataSource") private DataSource dataSource; @Produces @Lock(LockType.READ) public DataSource getDataSource() { return dataSource; } }
@Provider @Secure @Priority(Priorities.AUTHENTICATION) public class AuthenticationFilter implements ContainerRequestFilter { @Inject private DataSource dataSource; @Override public void filter(ContainerRequestContext requestContext) throws IOException { } }
and web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"> <session-config> <session-timeout>60</session-timeout> </session-config> <resource-ref> <res-ref-name>DataSource</res-ref-name> <res-type>javax.sql.DataSource</res-type> <jndi-name>java:jboss/datasources/ERP</jndi-name> </resource-ref> </web-app>
But I want to get rid of EJB
@Dependent public class TestBean { @Resource(name = "DataSource") private DataSource dataSource; }
@Provider @Secure @Priority(Priorities.AUTHENTICATION) public class AuthenticationFilter implements ContainerRequestFilter { @Inject private TestBean bean; @Override public void filter(ContainerRequestContext requestContext) throws IOException { } }
But this option TestBean::dataSource is jndiName = "java:jboss/datasources/ExampleDS" from default standalone-full.xml
I use wildfly 10.1