0

我有一个工厂模式实现。

 class FactoryValidator {
    @EJB
    FieldValidator fv;

    @EJB
    MethodValidator mv;

    public Validator getValidator(VType type){
        Validator v = null

        switch(type) {
        case FIELD:
            v = fv; break;
        case METHOD:
            v = mv;break;
        }

        return v;
    }
 }

可以像上面那样返回 EJB 引用吗?或者有没有更好的方法来处理这个?我知道您可以直接从 case 语句返回 EJB。但我想这不是一个好习惯。

想法?

4

1 回答 1

0

请注意,您正在返回对存根的引用,它不是直接指向 EJB bean 对象,而是指向 JNDI 树上的一个元素。在我看来,这不是一个坏习惯,但你必须小心,因为:

  1. 在 SFSB 的情况下,对该工厂的所有调用都将引用相同的 bean 实例,可以随时丢弃(在异常情况下,或调用 @Remove 方法)
  2. EJB 存根仅在 JNDI 上下文有效时才起作用,我记得它是绑定到线程的。

当我在 CDI 服务中需要 EJB 计时器时,我使用了这种解决方案,并且效果很好。

于 2013-07-02T22:11:58.997 回答