【发布时间】:2014-09-23 14:57:09
【问题描述】:
我有相同的 EJB 模块,其中一个 EAR 是服务器端,一个 EAR 是客户端。 我能有这种情况吗?
因为我收到此错误http://justpaste.it/gfs3 不知道如何解决它。
【问题讨论】:
标签: ejb ejb-3.0 jndi websphere-7
我有相同的 EJB 模块,其中一个 EAR 是服务器端,一个 EAR 是客户端。 我能有这种情况吗?
因为我收到此错误http://justpaste.it/gfs3 不知道如何解决它。
【问题讨论】:
标签: ejb ejb-3.0 jndi websphere-7
在我的情况下:- 我确实安装了 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
我的解决方案是:-
我删除了另一个应用程序中的 abc.jar (xyz.ear) C:\Program Files\IBM\WebSphere\AppServer\profiles\AppSrv01\wstemp\92668751\workspace\cells\mypc00Node01Cell\applications\xyz-ear.ear '
然后解决方案客户端查找工作正常。
为避免将来出现这种情况,最好在 IBM-WAS 服务器上创建单独的节点并将这两个应用程序安装在不同的节点上。
所以两个应用程序组件都不会搞砸。
【讨论】:
您在堆栈跟踪中有答案:
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
【讨论】:
com.ibm.websphere.ejbcontainer.disableShortDefaultBindings 或通过 ibm-ejb-jar-bnd.xml 文件或管理控制台应用程序 > yourApp > 为这些 bean 定义自定义名称绑定 EJB 业务,然后在每个应用上下文中更改名称。
ibm-ejb-jar-bnd.xml 的新文件并插入<session name="rp"> <interface class="com.demo.view.RitornaPersonaRemote" binding-name="RitornaPersonaSenzaClientEAR#RitornaPersonaSenzaClient.jar#com.demo.view.RitornaPersonaRemote"/> </session> ,对吗?我试过了,但我遇到了同样的错误,还有“RP”。