2个EJB是否互相称错了?

时间:2016-05-24 14:48:57

标签: java ejb ejb-3.1

我有以下两个无状态EJB,你可以看到它们引用了另一个。

@Stateless
public class EjbA {

    @Inject
    private EjbB b;

}

@Stateless
public class EjbB {

    @Inject
    private EjbA a;

}

这是一种不好的做法吗?这会导致内存泄漏吗?

修改

如果EJB中的一个是有状态的,那是相同的行为吗?

3 个答案:

答案 0 :(得分:0)

不,这不是一个坏习惯。

如果您想要更改transactionnal上下文,这是建议的方法,因为您应该知道在容器中没有捕获调用EJB中的方法,因此不会修改transactionnal属性。

但请注意,如果自身注入EJB X,则会创建一个新实例。

我不知道Statefull EJB会发生什么

答案 1 :(得分:0)

考虑没有任何EJB特定注释的代码:

public class EjbA {

    private EjbB b;
}

public class EjbB {

    private EjbA a;
}

这里有两个类之间的循环依赖关系。一般来说,在代码中保留这种关系是一种不好的做法。将这两个类标记为EJB,可以为它们提供额外的功能(例如,事务,依赖注入,实例池)。然而,循环关系的问题仍然存在。为了消除进一步的潜在问题,尽量避免这种设计。

答案 2 :(得分:0)

只有当两个EJB都是@stateful时才有意义:你有2个不同的对象,它们在双重可见性之间相关。如果不是没有意义,因为de @stateless将始终在每次调用中重置@stateful,或者您可以使用静态方法调用提供@stateless方法。