双耳相同的无状态豆

时间:2014-07-31 15:16:07

标签: ejb ejb-3.0 jndi websphere-7

我有一个相同的EJB模块,其中一个bean位于服务器端的EAR中,另一个是客户端的EAR。 我可以有这种情况吗?

ERAs

因为我收到此错误http://justpaste.it/gfs3 不明白如何解决它。

2 个答案:

答案 0 :(得分:1)

您已在堆栈跟踪中回答:

The short-form default binding 'com.demo.view.RitornaPersonaRemote' 
is ambiguous because multiple beans implement the interface : 
[RitornaPersonaSenzaClientEAR#RitornaPersonaSenzaClient.jar#RitornaPersona, 
RitornaPersonaWebSenzaClientEAR#RitornaPersonaSenzaClient.jar#RitornaPersona]. 
Provide an interface specific binding or use the long-form default binding on lookup.]

如果您在询问是否可能在多个项目中使用相同的EJB jar - 答案是肯定的。但是在部署期间,您必须使用长格式JNDI,为其他模块中的bean提供不同的JNDI名称或禁用短名称。您不能以相同的名称注册两个bean。

长名称的格式为RitornaPersonaSenzaClientEAR#RitornaPersonaSenzaClient.jar#com.demo.view.RitornaPersonaRemote

请在此处查看详细信息 - EJB 3.0 and EJB 3.1 application bindings overview

<强>更新

要禁用短名称,请执行以下步骤:

  • 转到Application servers > server1 > Process definition > Java Virtual Machine > Custom properties
  • 使用值com.ibm.websphere.ejbcontainer.disableShortDefaultBindings定义新的自定义属性*以禁用所有应用的短绑定,或AppName1|AppName2仅禁用所选应用中的短绑定。

示例默认绑定显示在SystemOut.log中:

The binding location is: ejblocal:JPADepEar/JPADepEJB.jar/TableTester#ejb.TableTester
The binding location is: ejblocal:ejb.TableTester
The binding location is: java:global/JPADepEar/JPADepEJB/TableTester!ejb.TableTester

如果设置了disableShortDefaultBindings属性,则没有简短形式:

The binding location is: ejblocal:JPADepEar/JPADepEJB.jar/TableTester#ejb.TableTester
The binding location is: java:global/JPADepEar/JPADepEJB/TableTester!ejb.TableTester

文档中存在错误,正确的属性是 com.ibm.websphere.ejbcontainer.disableShortDefaultBindings 而不是 com.ibm.websphere.ejbcontainer.disableShortFormBinding

答案 1 :(得分:0)

在我的情况下:-我确实安装了abc.ear和xyz.ear,这两个耳朵是相互独立的,相互依赖。

我使用客户端查找功能呼叫abc.ear,但这给了我

com.ibm.websphere.naming.CannotInstantiateObjectException:JNDI NamingManager在处理javax.naming.Reference对象时发生异常。 [根本例外是com.ibm.websphere.ejbcontainer.AmbiguousEJBReferenceException:简短格式的默认绑定 “ com.ejb.abc”是模棱两可的,因为多个bean实现了该接口: [xyz-ear#rabc-ejb-1.0.jar#abcInrerfaceImpl,rabc-ear#rabc-ejb-1.0.jar

abcInrerfaceImpl]。提供特定于接口的绑定或在查找时使用长格式的默认绑定。]

我的解决方法是:-

我删除了另一个应用程序(xyz.ear)内的abc.jar C:\ Program Files \ IBM \ WebSphere \ AppServer \ profiles \ AppSrv01 \ wstemp \ 92668751 \ workspace \ cells \ mypc00Node01Cell \ applications \ xyz-ear.ear '

然后解决方案客户端查找正常。

为避免将来发生这种情况,更好的做法是在IBM-WAS服务器上创建单独的节点,然后将两个应用程序安装在不同的节点上。

因此两个应用程序组件都不会混乱。