如何在JBOSS中获取SessionContext

时间:2009-12-21 06:26:13

标签: jboss ejb

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

@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 个答案:

答案 0 :(得分: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);
    }
  }
}

这四种方法都符合EJB 3标准,并且绝对适用于4 Ways to Get EJBContext in EJB 3中提醒的任何Java EE 5应用服务器。如果没有,请提供完整的异常堆栈跟踪。

答案 1 :(得分:0)

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

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

如果此代码在ejb上下文或Web上下文中运行,则会看到不同的输出。