我在JBoss-AS-7.1服务器上部署了几个作为EJB的服务。许多应用程序通过执行以下查找来使用这些EJB:
@EJB(lookup = "java:global/FooService/FooBean!com.xyz.FooBeanRemote")
private FooBeanRemote fooBeanRemote;
问题是查找字符串在源代码中是硬编码的。我希望能够在运行时更改此查找 - 无需重新编译 - 因为FooService可能会在将来的某个时间更新,并且可能具有不同的实现。此外,ejb还可以移动到不同的服务器实例。
实现这一目标的最佳方式是什么?
答案 0 :(得分:2)
- 编辑--- 关于最后一点的快速HOWTO:
<强> 1。创建限定符
@Qualifier
@Retention(RUNTIME)
@Target({FIELD, TYPE, METHOD})
public @interface FooService {
}
<强> 2。创建生产者方法
public class EJBProducer {
@Produces
@FooService
@EJB(lookup = "java:global/FooService/FooBean!com.xyz.FooBeanRemote")
private FooBeanRemote fooBeanRemote;
}
第3。在代码中使用
@Inject @FooService
private FooBeanRemote fooBeanRemote;
两个第一点可能在另一个jar存档中(记得要包含META-INF / beans.xml文件)。您也可以使用producer方法而不是field,并以编程方式访问ejb。