2

有没有办法让我的无状态 EJBs JNDI 路径?假设我写了一个这样的 EJB:

@Stateless
public class BookBean implements IBookBeanLocal {

 @Resource SessionContext sctx;

 ....

 @PostConstruct
 public void afterInit(){
    // sctx??
 }

}

有没有办法在初始化期间发现 BookBeans JNDI 路径?我需要这个在初始化期间将某些 bean 自动订阅到全局注册表。还有其他方法吗?

4

2 回答 2

1

在 Java EE 6 中,JNDI 路径被标准化并记录在https://docs.oracle.com/javaee/6/tutorial/doc/gipjf.html

因此,假设您只在一只耳朵内进行 JNDI 调用:

@Stateless
public class BookBean implements IBookBeanLocal {

    @Resource(lookup = "java:module/ModuleName")
    private String moduleName;

    @PostConstruct
    public void afterInit() {
        String jndi = "java:app/" + moduleName + "/" + getClass().getSimpleName();
    }
}

或通过以下方式获取模块名称lookup

@Stateless
public class BookBean implements IBookBeanLocal {
    @PostConstruct
    public void afterInit() {
        Context ctx = new InitialContext();
        String jndi = "java:app/" + ctx.lookup("java:module/ModuleName") + "/" + getClass().getSimpleName();
    }
}
于 2015-08-17T10:00:50.983 回答
0

您可以在 @Stateless 注释或 xml ejb 配置中编写所需的 jndi 路径,并在运行时读取它。

找出自动生成的 jndi 路径很麻烦。

于 2009-05-10T19:05:16.967 回答