我正在尝试将 DataSource 注入 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 手动查找 DataSource 时,我也会在查找时出错。例如,这是我的示例过滤器:
@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]
我能做些什么?我一直在研究如何解决我的问题,我看到的很多都是泽西岛特定的解决方案。但是,我使用 TomEE,它的 JAX-RS 实现是 Apache CXF 1。因此,除非我更改 JAX-RS 实现,否则球衣解决方案将不起作用,但这对于琐事来说似乎有点过头了。
任何帮助将不胜感激。
谢谢。