2013-06-06 1 views
1

У меня есть статический метод, который нужно искать для экземпляра EJB. Проблема в том, что имя JNDI зависит от имени JAR, где расположен интерфейс для JEB. То, что я пытаюсь сделать, - это указать имя, указанное экземпляру EJB этого интерфейса во время выполнения.Как найти в runtime имя jndi, которое было присвоено моему EJB

Возможно ли это?

Вот код:

private static String JNDI_NAME; 

private IRevisionContext getRevisionContext() { 
    try { 
     if (JNDI_NAME == null) { 
      //TODO: find the jndi name for IRevisionContext 
     } 

     InitialContext ctx = new InitialContext(); 
     IRevisionContext revisionContext = (IRevisionContext) ctx.lookup(JNDI_NAME); 
     return revisionContext; 
    } catch (Exception e) { 
     throw new RuntimeException(e); 
    } 
} 

Это название дано в контейнере:

Переносные имен JNDI для EJB RevisionContextLBean:

  • Java: глобальный/GRP_UFMS_EAR/auditoria- ejb-1.0-SNAPSHOT/RevisionContextLBean! br.ufms.nti.infra.entidade.audit.IRevisionContext
  • java: global/GRP_UFMS_EAR/auditoria-ejb-1.0 -SNAPSHOT/RevisionContextLBean

Вы также можете предложить лучший способ сделать это.

Спасибо!

ответ

0

Для определения используемого приложения используйте lookup("java:app/AppName") Для определения работающего модуля используйте lookup("java:module/ModuleName"). Невозможно определить, работаете ли вы в автономном модуле, но в качестве эвристики вы можете проверить, есть ли appName.equals (moduleName). Невозможно определить имя EJB, хотя в зависимости от того, что вы делаете, вы можете жестко закодировать имя EJB (и имя интерфейса) или использовать Context.list для выбора между доступными EJB.