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

6
我有两个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,initial context properties?
3个回答

6

请注意,远程主机、端口和用户信息必须通过属性文件定义才能正常工作。将 jboss-ejb-client.properties 文件放置在您的根源文件夹下。这里有一个示例文件:https://github.com/akquinet/jbosscc-wildfly-examples/blob/master/ejb-remote-example/ejb-remote-example-ejb-client/src/main/resources/jboss-ejb-client.properties - gmazlami

1
我知道有点晚了。为了进一步参考,包括这个。
您可以使用便携式查找字符串格式 EJB使用RMI over IIOP,并具有将EJB架构标准映射到CORBA的映射。 因此,您可以通过服务器主机和端口号进行查找。
@EJB(lookup = "corbaname:iiop:example.com:3701#java:global/mycrud/mycrud-dss-ejb/InformeBean!com.myorg.ejb.InformeRemote")

References: https://docs.oracle.com/javase/8/docs/technotes/guides/idl/corba.html https://docs.oracle.com/javase/8/docs/technotes/guides/idl/INStutorial.html


听起来完美,但当我调用远程服务时,没有任何响应和错误...唯一的方法是通过使用抽象工厂进行查找才能使其工作。 - Henrique Fernandes Cipriano
使用示例:Properties props = new Properties(); props.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.enterprise.naming.SerialInitContextFactory"); props.setProperty("org.omg.CORBA.ORBInitialHost", "server.com"); props.setProperty("org.omg.CORBA.ORBInitialPort", "3700"); try { InitialContext ctx = new InitialContext(props); return (RemoteService) ctx.lookup("com.server.package.RemoteService"); } catch (NamingException e) { ...; } - Henrique Fernandes Cipriano

1

@EJB 注释只能在应用程序部署在同一服务器实例中时使用。如果您尝试进行跨服务器实例调用或远程服务器调用,则不会起作用。因此,在您的情况下,注释注入将不起作用。

那么,有什么解决方案吗?

选项 1) 使用旧式的 编程式 JNDI 查找

选项 2) 根据 CDI(上下文依赖注入) 创建托管 bean,并在其中配置所有 JNDI 属性。然后将 managed bean @inject 到您的客户端中。


许多应用服务器支持使用@EJB注释来定位远程bean,包括JBoss(根据Rodrigo的回答)和Glassfish。 - DavidS
但是Rodrigo的答案没有显示在部署远程EJB的服务器上定义IP地址的位置。 - Farah
@Farah:你可以通过属性文件定义服务器的IP地址。在Jboss中,你需要将 jboss-ejb-client.properties 文件放置在源代码根目录下。例如,请查看:https://github.com/akquinet/jbosscc-wildfly-examples/blob/master/ejb-remote-example/ejb-remote-example-ejb-client/src/main/resources/jboss-ejb-client.properties - gmazlami

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接