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

时间:2014-06-10 20:46:06

标签: java java-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或[glassfish - ] - ejb-jar.xml或任何其他xml描述符设置此部分。我希望我的ejb的jndi名称如下:

java:global/newBundleNameWithoutVersion/etc

我无法找到我必须在这些文件中设置的问题。我在互联网上找到的所有variants都不再受支持了,我尝试过的所有工作都没有。你能帮帮我吗?

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

如果有人参与玻璃鱼的开发,您是否至少可以指出我必须检查哪些捆绑包以自行查找问题?我将非常感激。

1 个答案:

答案 0 :(得分:3)

您应该像这样注释EJB

@Remote(value = YourInterface.class)
@Stateless(mappedName = "java:global/fancy")

之后,GF日志说:

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")

所以我认为手动查询也应该有效。