我正在尝试将数据源注入(inject) TomEE [Apache Tomcat (TomEE)/9.0.20 (8.0.0-M3] 中的 ContainerRequestFilter。但是,无论我做什么,我都会收到错误。
我看到 JNDI 名称正在 TomEE 中注册:
org.apache.openejb.assembler.classic.Assembler.createRecipe Creating Resource(id=jdbc/auth/ReadDataSource)
但即使当我通过 InitialContext 手动查找数据源时,我也会在查找时遇到错误。例如,这是我的示例过滤器:
@Provider
@PreMatching
public class MyFilter implements ContainerRequestFilter {
DataSource dataSource;
@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
try {
InitialContext initialContext = new InitialContext();
dataSource = (DataSource)initialContext.lookup("jdbc/auth/ReadDataSource");
} catch (NullPointerException | NamingException e) {
Response response = Response
.status(Status.INTERNAL_SERVER_ERROR)
.entity(e.getMessage())
.build();
requestContext.abortWith(response);
}
}
}
不幸的是,我收到以下错误:
Name [jdbc/auth/ReadDataSource] is not bound in this Context. Unable to find [jdbc]
我能做什么?我一直在研究如何解决我的问题,我看到的很多都是 Jersey 特定的解决方案。但是,我使用 TomEE 及其 JAX-RS 实现是 Apache CXF 1 。因此,除非我更改 JAX-RS 实现,否则 Jersey 解决方案将不起作用,但这对于一些琐事来说似乎有点过分了。
任何帮助将不胜感激。
谢谢。
最佳答案
将 java:comp/env/
前缀添加到您的 JNDI 名称:
... initialContext.lookup("java:comp/env/jdbc/auth/ReadDataSource");
关于java - 在 TomEE 8 中的 javax.ws.rs.container.ContainerRequestFilter 中注入(inject)资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57938877/