将捆绑包部署到glassfish后无法获取EJBContext

时间:2013-04-01 07:18:08

标签: java ejb osgi glassfish-3

我的问题基于 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*|#]

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

2 个答案:

答案 0 :(得分:0)

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

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

    进行注入
    @Inject
    private EjbContextTest test;
    
  2. 使用纯EJB注释进行注入

    @EJB
    private EjbContextTest test;
    
  3. 然后你可以调用test.getEjbContext()。

    这样,就会处理@Resource注释。

    希望有所帮助

答案 1 :(得分:0)

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

注射器使用:

@Resource
private SessionContext ejbContext;

@Resource(mappedName = "java:comp/EJBContext") // adding 'mappedName' with JNDI name
private EJBContext ejbContext;