Jakarta ee 从.ear文件中使用的java:app JNDI名称是否需要moduleName组件?

Jakarta ee 从.ear文件中使用的java:app JNDI名称是否需要moduleName组件?,jakarta-ee,jndi,Jakarta Ee,Jndi,我在.ear文件中打包了一个EJB 此EJB需要在同一.ear文件中查找对另一个打包在不同.jar文件中的EJB的引用 调用EJB的EJB不知道目标EJB所在的模块 通过阅读JavaEE规范,这似乎正是Java:app名称空间的用途。我认为我可以这样做: final Frobnicator f = (Frobnicator)context.lookup("java:app/FrobnicatorBean"); …但在GlassFish 3.1.2.2中找不到该bean名称 我可以看到bean已

我在
.ear
文件中打包了一个EJB

此EJB需要在同一
.ear
文件中查找对另一个打包在不同
.jar
文件中的EJB的引用

调用EJB的EJB不知道目标EJB所在的模块

通过阅读JavaEE规范,这似乎正是
Java:app
名称空间的用途。我认为我可以这样做:

final Frobnicator f = (Frobnicator)context.lookup("java:app/FrobnicatorBean");
…但在GlassFish 3.1.2.2中找不到该bean名称

我可以看到bean已成功部署,并获得了分配给它的全局JNDI名称,因此它存在,并且上面的bean名称(
FrobnitorBean
)是正确的

我是否误读了说明书?我必须同时指定模块名吗?如果是这样的话,
java:app
名称空间有什么好处

我必须同时指定模块名吗? 如果是这样,java:app名称空间有什么好处

根据规范:

4.4全局JNDI访问->4.4.1.1 java:app

java:app前缀允许在JavaEE应用程序中执行的组件访问特定于应用程序的命名空间

生成的语法是:

java:app/[!]
请注意,这是语法的必需部分。。。
1)您可以获得jndi资源树的句柄并打印所有ejb资源名称。我在embedded glassfish中添加了以下代码:



打印树列表后,可以在查找操作期间使用相同的名称。 2) 如果上述解决方案无法实现,那么您可以使用ear应用程序的自定义名称代替“app”进行尝试。比如,如果部署的应用程序名为“ln”,那么查找字符串将变成“java:ln/frobnitorbean”

谢谢;指示模块名称是可选的。可爱。此外,模块名称对于环境条目之类的内容是可选的,这可能是我和教程混淆的地方。
String command = "list-jdbc-resources";
CommandRunner commandRunner = glassfish.getCommandRunner();
    CommandResult commandResult = commandRunner.run(command);
    System.out.println("jdbc resources=" + commandResult.getOutput());
    Logger.getLogger(this.getClass().getName()).log(Level.INFO,"jdbc resources=" +commandResult.getOutput());