首页 > 解决方案 > 在 bean 中注入多个远程 EJB

问题描述

在 Java EE 中,如果我有一个接口:

@Remote
public interface MetaService {
    ServiceData get();
}

我有,在耳朵 2 实现:

@Stateless
public class Service1MetaService implements Calculator {
    @Override
    public ServiceData get() {...}
}
@Stateless
public class Service2MetaService implements Calculator {
    @Override
    public ServiceData get() {...}
}

我可以创建一个bean,其中:

@Stateless
public class View {
    @Inject
    private Instance<MetaService> metaServices;

    ...
}

在 中View,该字段metaServices将有 2 个实现MetaService

我想要远程 bean 的类似功能。

所以比方说,我有上面的接口和实现,只是封装不同。

base.jar我有MetaService界面。这将打包下面提到的所有后续应用程序。

a.ear我有Service1MetaService实现时,在b.ear我有Service2MetaService实现时,在c.war我有View想要使用这些实现的类。

但正如您所料,注入Instance的是空的(不是空的)。有没有办法在我注入的Instance实例中找到远程 bean 引用,即使这些实现在不同的应用程序中?

一件重要的事情是,在View课堂上我不知道也不关心这些实现的数量,也不关心它们部署的应用程序的名称。所以我没有办法使用特定的 JNDI 字符串来获取这些参考资料。

PS:我应该尝试使用 JMS 之类的技术吗?所以我add在 JMS 代理上调用该方法,它发送请求并等待所有实现所述接口的应用程序的答案?

PS:澄清一下,我需要这个的原因实际上是为了我可以在我的应用程序服务器上获取正在运行的服务的数据。我更新了示例接口和实现,使其更加清晰。此外,如果我可以同步获取这些元数据,那就太好了,所以不一定首选 JMS,但我可能可以让它工作。

标签: javajakarta-eeejb

解决方案


我设法说服自己远离远程 EJB。好吧,这也要感谢@chrylis-onstrike-,但是,我将为此目的选择使用JMS。

原因是我可以广播对不同服务的请求,我需要点播数据,使我能够检查新服务上线或服务失败。

感谢所有花时间帮助我的人。


推荐阅读