【问题标题】:Injecting EJB into Rest Exception Handler将 EJB 注入 Rest 异常处理程序
【发布时间】:2015-11-12 13:06:44
【问题描述】:

我正在尝试将本地 @Stateless EJB 注入 Rest 异常处理程序,但出现以下错误。

javax.naming.NameNotFoundException: Name [Test] is not bound in this Context. Unable to find [Test].

maven Web 项目在 Apache-tomee-1.7.1-jaxrs 上运行。

EJB:

@Stateless(name = "Test")
public class Test {

    public void sayHello() {
        System.out.println("Hello");
    }

}

根据我的理解,我必须将其视为 EJB 的客户端的异常处理程序。

@Provider
public class TestExceptionHandler implements ExceptionMapper<Throwable> {

    @Context
    HttpServletRequest request;

    @Override
    public Response toResponse(Throwable throwable) {

        InitialContext context;
        try {
            context = new InitialContext();
            Test test = (Test) context.lookup("Test");
            test.sayHello();

        } catch (NamingException ex) {
            ex.printStackTrace();
        }        


        return Response.ok().build();
    }    

}

我还尝试执行以下查找:context.lookup("java:comp/env/Test");

http://openejb.apache.org/jndi-names.html 文档很难理解。 还尝试了以下这是我的第一次尝试。 http://blog.iadvise.eu/2015/06/01/jee-using-ejb-and-context-annotations-in-a-jax-rs-provider-class/

我是否遗漏了 tomee 服务器或我的代码中的任何配置?

【问题讨论】:

    标签: rest ejb apache-tomee


    【解决方案1】:

    java:comp/env 命名空间用于 EJB 引用,而不是 EJB。您尚未在任何地方声明 EJB 引用。

    使用lookup("java:module/Test") 直接查找EJB 可能最简单(假设EJB 被打包在war 中,否则为java:app/ejbmodname/Test),因为默认情况下JAX-RS 不支持EE 注入。要声明 EJB 引用,您需要将提供程序类设为 EJB 本身或 CDI 类(将 beans.xml 添加到模块中),然后将字段声明为 @EJB(name="Test") Test myBean;

    【讨论】:

    • 嗨,bkail,beans.xml 文件从一开始就包含在内,所有其他注入工作。我已经尝试使提供程序成为无状态 bean,但仍然没有结果,还包括 EJB 字段加上其名称为“Test”,但仍然没有。尝试了“java:module/Test”方法但得到错误:无法找到[模块]
    • @Rentius2407 您是否添加了@EJB?否则,您没有使用任何 EE 注入。另外,我不确定为什么java:module 不起作用;可能是您的应用程序服务器中的配置问题。
    • 我已经尝试过@Inject@EJB。我使用 Apache-tomee-1.7.1-jaxrs 作为我的服务器。
    • Tomee 使用 CXF 作为其余实现。简而言之,我想将EJB 注入@Provider
    • 如果您尝试过@EJB/@Inject,那么我没办法了,抱歉。
    猜你喜欢
    • 1970-01-01
    • 2013-01-02
    • 2017-11-09
    • 2018-06-29
    • 1970-01-01
    • 2015-09-03
    • 1970-01-01
    • 1970-01-01
    • 2015-06-09
    相关资源
    最近更新 更多