如何在运行时查找提供给EJB的jndi名称

时间:2013-06-06 14:48:46

标签: ejb-3.0 glassfish-3 java-ee-6

我有一个需要查找EJB实例的静态方法。问题是JNDI名称取决于JEB接口所在的JAR的名称。我正在尝试做的是弄清楚在运行时给该接口的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);
    }
}

这是容器给出的名称:

EJB RevisionContextLBean的可移植JNDI名称:

  • 的java:全球/ GRP_UFMS_EAR /礼堂的EJB-1.0-SNAPSHOT / RevisionContextLBean br.ufms.nti.infra.entidade.audit.IRevisionContext
  • 的java:全球/ GRP_UFMS_EAR /礼堂的EJB-1.0-SNAPSHOT / RevisionContextLBean

您还可以建议更好的方法。

谢谢!

1 个答案:

答案 0 :(得分:0)

要确定正在运行的应用程序,请使用lookup("java:app/AppName") 要确定正在运行的模块,请使用lookup("java:module/ModuleName")。无法确定您是否在独立模块中运行,但作为启发式,您可以检查appName.equals(moduleName)。无法确定EJB名称,但根据您正在执行的操作,您可能能够对EJB名称(和接口名称)进行硬编码,或使用Context.list在可用EJB之间进行选择。