Как получить SessionContext в JBOSS - PullRequest
       17

Как получить SessionContext в JBOSS

10 голосов
/ 21 декабря 2009

Я пробовал несколько способов в сессионном компоненте, например:

@Resource
private SessionContext ctx;

OR

private SessionContext ctx;

@Resource
private void setSessionContext(SessionContext ctx) {
  this.sctx = ctx;
}

OR

InitialContext ic = new InitialContext();
SessionContext ctx = (SessionContext) ic.lookup("java:comp/env/sessionContext");

Ни один из них не сработал, в JBOSS возникли различные исключения.

Я действительно злюсь на это. Любой может сказать мне, что не так. Большое спасибо!

Ответы [ 2 ]

14 голосов
/ 21 декабря 2009

Два первых решения (полевая инжекция и инжекция метода сеттера) выглядят хорошо, и должно работать .

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

0 голосов
/ 23 ноября 2016

Вы можете перечислить эти привязки, используя следующий код, он покажет вам, что доступно в контексте. (Используется код groovy для выполнения итерации (каждая) над перечислением)

Context initCtx = new InitialContext();
Context context = initCtx.lookup("java:comp") as Context
context.listBindings("").each {
   println it
}

Зависит от зависимости, если этот код выполняется в контексте ejb или в веб-контексте, вы увидите другой вывод.

...