我的问题基于不能在EJB上获得SessionContext,我想将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 |信息| glassfish3.1.2 | javax.enterprise.system.std.com.sun.enterprise.server.logging |_ThreadID = 15; _ThreadName =线程2 ;|-----------> ejbContext是零* | #):之前如果你有什么建议,我很乐意尝试一下。
您不能通过调用它们的构造函数来访问EJB会话bean或CDI bean。下面两个都可以:
-
使用CDI注入(或CDI- ejb集成)
@Inject private EjbContextTest test;
-
使用纯EJB注释注入
@EJB private EjbContextTest test;
则可以调用test.getEjbContext()。
这样,@Resource注释就被处理了。
希望有所帮助
对于那些将来仍然需要…
注入使用:
@Resource
private SessionContext ejbContext;
或
@Resource(mappedName = "java:comp/EJBContext") // adding 'mappedName' with JNDI name
private EJBContext ejbContext;