将EJB分配给变量并返回

时间:2013-07-02 19:57:51

标签: java methods reference ejb return

我有一个工厂模式实现。

 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。但我想这不是一个好习惯。

思想?

1 个答案:

答案 0 :(得分:0)

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

  1. 在SFSB的情况下,此工厂的所有调用都将引用相同的bean实例,可以随时丢弃(如果发生异常或调用@Remove方法)
  2. 只有当JNDI上下文有效时,EJB存根才会起作用,我记得这是绑定到线程的。
  3. 当我在CDI服务中需要EJB计时器时,我使用了这种解决方案,并且运行良好。