Java Glassfish 4:如何为JNDI设置应用程序或模块名称

Java Glassfish 4:如何为JNDI设置应用程序或模块名称,java,jakarta-ee,glassfish,jndi,glassfish-4,Java,Jakarta Ee,Glassfish,Jndi,Glassfish 4,我在OSGi包中使用EJB。现在,当我需要获取EJB时,我有很长的jndi,例如: bean = (InterfaceName) ctx.lookup("java:global/longBundleName_version/OrganizationDirBean!and.plus.path.and.InterfaceName"); 我想更改此部分: longBundleName_version 我的意思是,当我部署bundle时,必须从[glassfish-]application.xml或

我在OSGi包中使用EJB。现在,当我需要获取EJB时,我有很长的jndi,例如:

bean = (InterfaceName) ctx.lookup("java:global/longBundleName_version/OrganizationDirBean!and.plus.path.and.InterfaceName");
我想更改此部分:

longBundleName_version
我的意思是,当我部署bundle时,必须从[glassfish-]application.xml或[glassfish-]-ejb-jar.xml或任何其他xml描述符设置此部分。我希望ejb的jndi名称如下:

java:global/newBundleNameWithoutVersion/etc
问题是我在这些文件中找不到我必须设置的内容。我在互联网上找到的一切都不再受支持,我自己尝试的一切都不起作用。你能帮我吗

请不要提供mappedName,因为它只能用于远程bean(!)。我使用的bean同时是本地和远程的。


如果有人参与了玻璃鱼的开发,你能至少指出我必须检查哪些包才能自己找到问题吗?我将非常感激。

您应该这样注释您的
EJB

@Remote(value = YourInterface.class)
@Stateless(mappedName = "java:global/fancy")
在那之后,
GF
logs说:

EJB5182:Glassfish-specific (Non-portable) JNDI names for EJB YourInterfaceImpl: [java:global/fancy, java:global/fancy!com.example.YourInterface]]]
至少我能像这样注射:

<!-- language:java -->

@EJB(lookup="java:global/fancy")

@EJB(lookup=“java:global/fancy”)

所以我认为手动查找也应该起作用。

谢谢您抽出时间。问题是您提供的不是可移植的JNDI名称。第二个问题是mappedName只用于远程bean,但我有本地和远程两种,这可能是不可能的。如果有可能,并且您将部署两次应用程序,那么哪些资源将映射到您的自定义JNDI?这是可能的。请参阅我提供的链接。Glassfish是开源的,不是吗?为什么不阅读相关代码以了解是否可能或如何可能?@b谢谢您的想法!我会试试看,尽管考虑到它包含大量代码,我认为这并不容易,而且我从未使用过它的代码。说实话,恐怕我没有足够的经验。