在bean中注入多个远程EJB

问题描述 投票:0回答:1

在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将具有MetaService的2种实现。

我希望远程Bean具有类似的功能。

所以说,我具有上面的接口和实现,但是包装不同。

base.jar中,我具有MetaService接口。此文件将打包在下面提到的所有后续应用程序中。

[在a.ear中,我具有Service1MetaService实现,而在b.ear中,我具有Service2MetaService实现;在c.war中,我具有View类,它们想使用这些实现。

但是,正如您所期望的,注入的Instance为空(不是空值)。即使这些实现在单独的应用程序中,也可以在注入的Instance实例中找到远程bean引用吗?

[重要的是,在View类中,我不知道,也不在乎这些实现的数量,也不在乎它们部署在其中的应用程序的名称。因此,我无法使用特定的JNDI字符串来获取这些引用。

P.S .:我应该尝试使用像JMS这样的技术吗?因此,我在JMS代理上调用方法add,该代理发出请求并等待实现该接口的所有应用程序的答复?

P.S .:明确起见,我之所以需要这样做,实际上是为了我可以获取应用程序服务器上正在运行的服务的数据。我更新了示例界面和实现,以便更加清晰。另外,如果可以同步获取这些元数据也很好,因此不必优先选择JMS,但是我可以使它工作。

java jakarta-ee ejb
1个回答
0
投票

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

原因是我可以按需广播对我需要数据的其他服务的请求,使我能够检查新服务是否联机或服务失败。

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

© www.soinside.com 2019 - 2024. All rights reserved.