Как получить путь JNDI EJB без сохранения состояния? - PullRequest
2 голосов
/ 07 мая 2009

Есть ли способ получить путь JNDI моего EJB без сохранения состояния? Предположим, что я написал EJB следующим образом:

@Stateless
public class BookBean implements IBookBeanLocal {

 @Resource SessionContext sctx;

 ....

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

}

Есть ли способ обнаружить путь JNDI BookBeans во время инициализации? Это нужно для автоматической подписки определенных компонентов в глобальный реестр во время инициализации. Есть ли другие способы сделать это?

Ответы [ 2 ]

1 голос
/ 17 августа 2015

В 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();
    }
}
0 голосов
/ 10 мая 2009

Вы можете написать желаемый путь jndi в аннотации @Stateless или в конфигурации xml ejb и прочитать его во время выполнения.

Найти автоматически сгенерированный путь jndi хлопотно.

...