java - 在 TomEE 8 中的 javax.ws.rs.container.ContainerRequestFilter 中注入(inject)资源

标签 java jakarta-ee jax-rs apache-tomee tomee-8

我正在尝试将数据源注入(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/

相关文章:

java - 本地接口(interface)和 REST Web 服务

debugging - 无法在 Java 堆栈跟踪中看到 java 源文件

java - hibernate 错误: "java.lang.Integer cannot be cast to java.lang.String" and so on

java - 如何使用左外连接创建jpql

java - MySQL jdbc驱动和Eclipse问题

java - JAX-RS HATEOAS 使用 Jersey,JSON 中不需要的链接属性

java - AngularJS $http.post 方法将 null 参数传递给 JAX-RS API

java - JPA、REST、解码元素列表

java - 甲骨文 11g 11.2.0.1 : No more data to read from socket

java - 为什么 Java 类型推断选择了错误的重载?