Не удается получить 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, вызвав их конструкторы. Любой из следующих двух должен работать:
Внедрение с использованием CDI (или интеграция CDI-EJB)
@Inject private EjbContextTest test;
Внедрить, используя чистую аннотацию EJB
@EJB private EjbContextTest test;
тогда вы можете вызвать test.getEjbContext().
Таким образом, аннотации @Resource обрабатываются.
Надеюсь, поможет