使用@ejb注释进行远程查找

时间:2013-05-13 05:37:07

标签: java ejb

我有两个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,初始上下文属性?

3 个答案:

答案 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