Ответ 1
Два первых решения (инъекция впрыска и инжекции впрыска) выглядят отлично, а должны работать.
У меня есть сомнения относительно третьего (подход поиска), поскольку вы не указали соответствующую аннотацию @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. Просьба предоставить полную статистику стека исключения, которое вы получаете, если они этого не делают.