【发布时间】:2014-09-18 09:20:03
【问题描述】:
我们目前正在开发一个用于部署在 WebSphere 服务器上的应用程序。应用程序应该使用内部服务提供者,它提供对作为远程 EJB 实现的服务的访问。 Service Provider bean 有一些硬编码的 jndi 名称可供使用。
现在在开发过程中,我们正在使用 Tomee,总的来说一切都很好。除了一件事: ServiceProvider 对“cell/persistent/configService”进行 jndi 查找。现在我尝试为这些服务创建一个包含模拟 EJB 的模拟耳朵。我能够部署它们,并且可以使用 jndi 名称从应用程序中访问它们,例如:“java:global/framework-mock-ear-1.0.0-SNAPSHOT/framework-mock-impl/ConfigServiceMock”但是它似乎不可能使用 jndi 查找来访问它们:“cell/persistent/configService”......现在我在我的模拟实现中添加了一个 openejb-jar.xml 文件,其中包含:
<openejb-jar>
<ejb-deployment ejb-name="ConfigServiceMock">
<jndi name="cell/persistent/configService"
interface="de.thecompany.common.services.config.ConfigService"/>
</ejb-deployment>
</openejb-jar>
而且我可以在启动过程中看到,bean 似乎以该名称正确注册:
INFORMATION: Jndi(name=cell/persistent/configService) --> Ejb(deployment-id=ConfigServiceMock)
但我现在知道如何让另一只耳朵能够使用该名称访问此 bean。
Service Provider 部分已给出,我们根本无法更改,因此请不要建议更改硬编码的 jndi 名称。我们当然愿意这样做,但无法改变任何事情。
【问题讨论】:
-
尝试使用 {deploymentId}/{interfaceClassName} 作为 jndi 名称,看看是否可以查找 bean
-
是的,确实有效,但正如我在帖子中所写,我无法更改名称,因为它们是我必须使用的已编译库的一部分。
-
我的意思是在您的客户端/您的 EJB 中使用该名称进行查找。您在哪里进行查找?
-
好吧,我让 Tomee 将 EJB 绑定到该名称(如您所见它输出绑定),但是当使用 JNDI 查找 bean 时,InitialContext 似乎只能找到具有前缀“java:”。但我找到了一个可行的解决方案,并将其作为答案发布。
标签: ejb-3.0 jndi apache-tomee