【问题标题】:Remote lookup using @ejb annotation使用@ejb 注解进行远程查找
【发布时间】:2013-05-07 02:20:18
【问题描述】:

我有 2 个 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 以将其绑定到客户端耳朵实例。 我如何配置 jndi 属性,即 provider_url,带有注解 @EJB 的初始上下文属性?

【问题讨论】:

    标签: java ejb


    【解决方案1】:

    我找到了一个回答您问题的论坛帖子: https://community.jboss.org/thread/228789

    在其中他指的是https://docs.jboss.org/author/display/AS71/EJB+invocations+from+a+remote+server+instance

    并使用他使用的 @EJB 注释完成 jndi 查找

    @EJB(lookup = "ejb:earname/modulename/BeanClass!fully.qualified.RemoteInterface")
    private RemoteInterface bean;
    

    【讨论】:

    【解决方案2】:

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

    那么,解决方案是什么?

    选项 1) 使用旧样式程序化 JNDI 查找

    选项 2) 根据CDI (Context Dependency Injection) 创建托管 bean 并在那里配置所有 JNDI 属性。并将@inject managed bean 加入您的客户端。

    【讨论】:

    • 许多应用服务器支持使用@EJB 注释来定位远程bean,包括JBoss(根据rodrigo 的回答)和Glassfish。
    • 但是 Rodrigo 的回答没有显示在哪里定义正在部署远程 EJB 的服务器的 IP 地址。
    • @Farah:您通过属性文件定义服务器的 IP 地址。对于 Jboss,您将 jboss-ejb-client.properties 放在源根文件夹中。例如,请参阅:github.com/akquinet/jbosscc-wildfly-examples/blob/master/…
    【解决方案3】:

    我知道这有点太晚了。包括这个以供进一步参考

    您可以使用便携式查找字符串格式 EJB 在 IIOP 上使用 RMI,并且将 EJB 体系结构标准映射到 CORBA 所以你可以通过服务器主机和端口号来查找

    @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

    【讨论】:

    • 这听起来很完美,但是当我调用远程服务时,我没有得到任何响应,也没有任何错误......它工作的唯一方法是使用抽象工厂进行查找。
    • 以示例: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) { ...; }
    猜你喜欢
    • 2018-03-14
    • 1970-01-01
    • 2012-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-01
    • 1970-01-01
    相关资源
    最近更新 更多