在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,但是我可以使它工作。
我设法说服自己脱离了远程EJB。好吧,这也要感谢@ chrylis-onstrike-,但是,我将为此选择使用JMS。
原因是我可以按需广播对我需要数据的其他服务的请求,使我能够检查新服务是否联机或服务失败。
感谢所有花时间尝试帮助我的人。