0

我的问题基于Can't get SessionContext on EJB,我想注入EJBContext我的代码

我的代码是:

import javax.ws.rs.core.Context;

public class EjbContextTest {
    @Resource
    private EJBContext ejbContext;
    @Resource
    private SessionContext sessionContext;
    ......
}

我在激活器中有一个简单的测试,只是想验证是否可以使用 CDI 获得 EJBContext:

public void start(BundleContext context) throws Exception {

    EjbContextTest test = new EjbContextTest();

    if (test.getEjbContext() == null) {
       System.out.println("ejbContext is: null" );
    } else
       System.out.println("ejbContext rollback only is: " + 
           test.getEjbContext().getRollbackOnly());
    }

将包部署到 glassfish 3.1.2 时,我无法获得 EJBContext 的实例:

2013-03-29 17:11:20,547|信息|glassfish3.1.2|javax.enterprise.system.std.com.sun.enterprise.server.logging|
_ThreadID=15;_ThreadName=Thread-2;|-----------> ejbContext 为:null*|#]

拜托,如果您有任何建议,我很乐意尝试。

4

2 回答 2

0

您不能通过调用它们的构造函数来访问 EJB 会话 bean 或 CDI bean。以下两个中的任何一个都应该起作用:

  1. 使用 CDI(或 CDI-EJB 集成)注入

    @Inject
    private EjbContextTest test;
    
  2. 使用纯 EJB 注解注入

    @EJB
    private EjbContextTest test;
    

然后你可以调用 test.getEjbContext()。

这样,@Resource 注释就被处理了。

希望能帮助到你

于 2013-06-19T13:20:49.193 回答
0

对于那些将来仍然需要...

注射使用:

@Resource
private SessionContext ejbContext;

或者

@Resource(mappedName = "java:comp/EJBContext") // adding 'mappedName' with JNDI name
private EJBContext ejbContext;
于 2015-06-24T14:04:53.007 回答