我有两个Jboss 5的服务器实例,每个实例都部署了两个EAR。说Client.Ear和Server.Ear。 Server Ear暴露了一些ejb。我想通过注释将其注入ClientEar。使用JNDI查找我做得很好,它的工作原理。但是使用注释我总是得到javax.naming.NamingException。 但是,当在部署工件中注入会话bean时,全局JNDI名称必须用于注入,我也使用它 @EJB(mappedName =“java:global / Server / component / ApplicationService!com.test.server.ApplicationServiceInterface”)
但似乎我没有提供远程服务器的provider_url将它绑定到客户端ear实例。 我如何使用注释@ EJB配置jndi属性,即provider_url,初始上下文属性?
答案 0 :(得分:5)
我找到了一个回答你问题的论坛帖子: https://community.jboss.org/thread/228789
在其中他指的是https://docs.jboss.org/author/display/AS71/EJB+invocations+from+a+remote+server+instance
要使用@EJB annotaion完成jndi查找,他使用
@EJB(lookup = "ejb:earname/modulename/BeanClass!fully.qualified.RemoteInterface")
private RemoteInterface bean;
答案 1 :(得分:1)
@EJB
注释。如果您尝试进行跨服务器实例调用或远程服务器调用,则@EJB
注释将不起作用。因此,在您的情况下,注释注入将不起作用。
那么,解决方案是什么?
选项1)使用旧式程序化JNDI查找
选项2)按照CDI (Context Dependency Injection)
创建托管bean,并在那里配置所有JNDI属性。并@inject
managed bean
进入您的客户。
答案 2 :(得分:1)
我知道这太晚了。包括此内容以供进一步参考
您可以使用便携式查找字符串格式 EJB在IIOP上使用RMI,并且具有到CORBA的标准映射EJB体系结构 因此,您可以按服务器主机和端口号按
进行查找@EJB(lookup = "corbaname:iiop:example.com:3701#java:global/mycrud/mycrud-dss-ejb/InformeBean!com.myorg.ejb.InformeRemote")
参考文献: https://docs.oracle.com/javase/8/docs/technotes/guides/idl/corba.html https://docs.oracle.com/javase/8/docs/technotes/guides/idl/INStutorial.html