如何在JBOSS中获取SessionContext

Rya*_*yan 10 jboss ejb

我在会话bean中尝试了几种方法,例如:

@Resource
private SessionContext ctx;
Run Code Online (Sandbox Code Playgroud)

要么

private SessionContext ctx;

@Resource
private void setSessionContext(SessionContext ctx) {
  this.sctx = ctx;
}
Run Code Online (Sandbox Code Playgroud)

要么

InitialContext ic = new InitialContext();
SessionContext ctx = (SessionContext) ic.lookup("java:comp/env/sessionContext");
Run Code Online (Sandbox Code Playgroud)

它们都没有工作,JBOSS中出现了不同的异常.

我真的生气了.任何人都可以告诉我什么是错的.非常感谢!

Pas*_*ent 14

两个第一个解决方案(现场注入和设定方法注入)看起来很好,应该可行.

我对第三个(查找方法)有疑问,因为你没有显示相应的@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);
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

这四种方法都符合EJB 3标准,并且绝对可以与任何Java EE 5应用服务器一起使用,如在EJB 3中获取EJBContext的4种方法中提醒的那样.如果不是,请提供您获得的异常的完整堆栈跟踪.