Не удается получить EJBContext после развертывания пакета в Glassfish

Мой вопрос основан на Не могу получить SessionContext на EJB, я хочу ввести EJBContext в мой код

Мой код:

import javax.ws.rs.core.Context;

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

У меня есть простое тестирование в активаторе, просто хочу проверить, могу ли я получить EJBContext с помощью CDI:

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 is: null*|#]

Пожалуйста, если у вас есть предложения, я буду рад их попробовать.

2 ответа

Для тех, кто еще нуждается в будущем...

Инжектор работает с использованием:

@Resource
private SessionContext ejbContext;

или же

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

Вы не можете получить доступ к сессионным компонентам EJB или компонентам CDI, вызвав их конструкторы. Любой из следующих двух должен работать:

  1. Внедрение с использованием CDI (или интеграция CDI-EJB)

    @Inject
    private EjbContextTest test;
    
  2. Внедрить, используя чистую аннотацию EJB

    @EJB
    private EjbContextTest test;
    

тогда вы можете вызвать test.getEjbContext().

Таким образом, аннотации @Resource обрабатываются.

Надеюсь, поможет

Другие вопросы по тегам