我在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的(!)。我确实使用同时本地和远程的豆子。
如果有人参与玻璃鱼的开发,您是否至少可以指出我必须检查哪些捆绑包以自行查找问题?我将非常感激。
答案 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")
所以我认为手动查询也应该有效。