0
所有EJB我有一组由多个供应商提供的数据。由于它们各自有各自的访问方式,它们都有独立的EJB,尽管它们都实现了相同的接口。找到实现接口
有没有办法让所有他们注入?所以我最终得到某种List<MyInterface>
?标准注射似乎给出了任何一个,或者模棱两可的错误。
所有EJB我有一组由多个供应商提供的数据。由于它们各自有各自的访问方式,它们都有独立的EJB,尽管它们都实现了相同的接口。找到实现接口
有没有办法让所有他们注入?所以我最终得到某种List<MyInterface>
?标准注射似乎给出了任何一个,或者模棱两可的错误。
随着CDI的整合,根据您组织项目的方式,您有两种选择。
如果提供者相同的模块中定义的,即,喷射相同战争EJB的定义范围内,或在相同的EJB JAR如在注射点的声明,则:
public class MyService {
@Inject
@Any
private Instance<MyProvider> providers;
public void notifyProviders() {
//Because there may be multiple implementation, do not use providers.get(), it is ambigous.
//The Instance object implements Iterable, so you can iterate over it using the for loop.
for(final MyProvider provider : providers) {
provider.notify();
}
}
}
但是,如果您有这些ejb的远程定义,那么您需要解决使用@Producer,因为您可以使用上述实例注入,因为CDI无法注入远程ejb bean。因此:
@Stateless
public class MyProviderContext {
@EJB
private MyProvider1 provider1;
@EJB
private MyProvider2 provider2;
//... More declarations.
@Produces
public MyProvider provider1() {return provider1;}
@Produces
public MyProvider provider2() {return provider2;}
//... More producers.
}