Два первых решения (полевая инжекция и инжекция метода сеттера) выглядят хорошо, и должно работать .
У меня есть сомнения по поводу третьего (подход поиска), так как вы не показали соответствующую аннотацию @Resource(name="sessionContext")
, но она также должна работать при правильном использовании.
Четвертый вариант - поискать стандартное имя java:comp/EJBContext
@Stateless
public class HelloBean implements com.foo.ejb.HelloRemote {
public void hello() {
try {
InitialContext ic = new InitialContext();
SessionContext sctxLookup =
(SessionContext) ic.lookup("java:comp/EJBContext");
System.out.println("look up EJBContext by standard name: " + sctxLookup);
} catch (NamingException ex) {
throw new IllegalStateException(ex);
}
}
}
Все эти четыре подхода совместимы с EJB 3 и должны определенно работать с любым сервером приложений Java EE 5, как указано в 4 Способах получить EJBContext в EJB 3 . Пожалуйста, предоставьте полную трассировку стека исключения, которое вы получите, если они этого не делают.