1

我有一个需要查找 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:global/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

您还可以建议一个更好的方法来做到这一点。

谢谢!

4

1 回答 1

0

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

于 2013-06-07T14:42:05.550 回答