如何在JBOSS中获取SessionContext

如何在JBOSS中获取SessionContext,jboss,ejb,Jboss,Ejb,我在会话bean中尝试了几种方法,如: @Resource private SessionContext ctx; 或 或 它们都不起作用,JBOSS中出现了不同的异常 我真的很生气。任何人都可以告诉我怎么了。非常感谢 前两种解决方案(现场注入和setter方法注入)看起来不错,应该可以工作 我对第三种方法(查找方法)有疑问,因为您没有显示相应的@Resource(name=“sessionContext”)注释,但如果使用得当,它也应该可以运行 第四个选项是查找标准名称java:comp/E

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

@Resource
private SessionContext ctx;

它们都不起作用,JBOSS中出现了不同的异常

我真的很生气。任何人都可以告诉我怎么了。非常感谢

前两种解决方案(现场注入和setter方法注入)看起来不错,应该可以工作

我对第三种方法(查找方法)有疑问,因为您没有显示相应的
@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);
    }
  }
}

这四种方法都是EJB3兼容的,应该可以与任何JavaEE5应用服务器一起使用,如中所述。如果没有异常,请提供异常的完整堆栈跟踪。

您可以使用以下代码列出这些绑定,它将显示上下文中可用的内容。(这使用groovy代码对枚举进行迭代(每次迭代)

取决于此代码是否在ejb上下文或web上下文中运行,您将看到不同的输出

InitialContext ic = new InitialContext();
SessionContext ctx = (SessionContext) ic.lookup("java:comp/env/sessionContext");
@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);
    }
  }
}
Context initCtx = new InitialContext();
Context context = initCtx.lookup("java:comp") as Context
context.listBindings("").each {
   println it
}