我的问题基于 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());
}
将bundle部署到glassfish 3.1.2时,我无法获得EJBContext的实例:
2013-03-29 17:11:20,547|INFO|glassfish3.1.2|javax.enterprise.system.std.com.sun.enterprise.server.logging| _ThreadID=15;_ThreadName=Thread-2;|-----------> ejbContext is: null*|#]
如果您有任何建议,我将很乐意尝试。
答案 0 :(得分:0)
您无法通过调用其构造函数来访问EJB会话Bean或CDI bean。 以下两个中的任何一个都应该起作用:
使用CDI(或CDI-EJB集成)
进行注入@Inject
private EjbContextTest test;
使用纯EJB注释进行注入
@EJB
private EjbContextTest test;
然后你可以调用test.getEjbContext()。
这样,就会处理@Resource注释。
希望有所帮助
答案 1 :(得分:0)
对于那些将来仍然需要的人......
注射器使用:
@Resource
private SessionContext ejbContext;
或
@Resource(mappedName = "java:comp/EJBContext") // adding 'mappedName' with JNDI name
private EJBContext ejbContext;