【问题标题】:Can't get EJBContext after deploying a bundle into glassfish将包部署到 glassfish 后无法获取 EJBContext
【发布时间】:2013-04-01 07:18:08
【问题描述】:

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

我的代码是:

import javax.ws.rs.core.Context;

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

我在activator中有一个简单的测试,只是想验证我是否可以通过使用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*|#]

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

【问题讨论】:

  • 所以你无法使用@Resource 来注入上下文?
  • 嗨,kolossus,使用 @Resource 不起作用,并且在将捆绑包部署到 Glassfish 时也会出现异常
  • 嗨,alex,你知道@Resource 在 EJBContext 上不起作用的原因了吗?

标签: java ejb osgi glassfish-3


【解决方案1】:

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

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

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

    @EJB
    private EjbContextTest test;
    

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

这样处理@Resource注解。

希望对你有帮助

【讨论】:

    【解决方案2】:

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

    injecton 使用:

    @Resource
    private SessionContext ejbContext;
    

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

    【讨论】:

      猜你喜欢
      • 2012-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多