2

我在 JBoss-AS-7.1 服务器上部署了几个服务作为 EJB。许多应用程序通过执行如下查找来使用这些 EJB:

@EJB(lookup = "java:global/FooService/FooBean!com.xyz.FooBeanRemote")
private FooBeanRemote fooBeanRemote;

问题是查找字符串在源代码中是硬编码的。我希望能够在运行时更改此查找 - 无需重新编译 - 因为 FooService 可能会在未来某个时间更新,并且可能有不同的实现。此外,ejb 还可以移动到不同的服务器实例。

实现这一目标的最佳方法是什么?

4

1 回答 1

2
  1. 使用 ejb-jar.xml 代替注释(在这里查看
  2. 在您的代码中使用 InitialContext 来查找 bean 并将 bean 名称移动到属性文件
  3. 在单独的 jar 中实现 CDI 生产者方法

--编辑---关于最后一点的快速指南:

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 文件)。您还可以使用生产者方法而不是字段,并以编程方式访问 ejb。

于 2013-10-01T20:55:12.373 回答