Я попробовал несколько путей в бобе сессии, как:
@Resource
private SessionContext ctx;
ИЛИ
private SessionContext ctx;
@Resource
private void setSessionContext(SessionContext ctx) {
this.sctx = ctx;
}
ИЛИ
InitialContext ic = new InitialContext();
SessionContext ctx = (SessionContext) ic.lookup("java:comp/env/sessionContext");
Ни один из них не работал, differnet исключения произошел в JBOSS.
Я действительно рассердился об этом. Любой мог сказать мне что случилось. Большое спасибо!
Первые два решения (инъекция поля и инъекция метода сеттера) выглядят хорошо и должны работать .
У меня есть сомнения по поводу третьего (поисковый подход), так как вы не показали соответствующую @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. Пожалуйста, предоставьте полную трассировку стека исключения, которое вы получите, если они этого не сделают.
.