我有一个需要查找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名称:
您还可以建议更好的方法。
谢谢!
答案 0 :(得分:0)
要确定正在运行的应用程序,请使用lookup("java:app/AppName")
要确定正在运行的模块,请使用lookup("java:module/ModuleName")
。无法确定您是否在独立模块中运行,但作为启发式,您可以检查appName.equals(moduleName)。无法确定EJB名称,但根据您正在执行的操作,您可能能够对EJB名称(和接口名称)进行硬编码,或使用Context.list在可用EJB之间进行选择。