两个嵌套的EJB Bean - 只有第一个获得一个实体管理器注入

时间:2012-01-13 12:18:50

标签: java jpa ejb-3.0

我有一个有状态的和一个singelton EJB Bean。

有状态bean使用实体管理器(注入)并调用singelton bean。 singelton bean使用实体管理器(注入)。

如果我尝试从有状态bean调用singelton bean,则singelton bean不会注入实体管理器。

是否不可能同时在两个bean中获得实体管理器?

EJB Bean

@Singleton
@LocalBean
public class AllocationPlanController implements AllocationPlanControllerRemote {

@PersistenceContext
private EntityManager em;

EJB Bean二

@Stateful
@LocalBean
public class AllocationController implements AllocationControllerRemote {

@PersistenceContext
private EntityManager em;

private Allocation allocation;
private AllocationPlan allocationPlan;

AllocationPlanController allocationPlanController = new AllocationPlanController();

2 个答案:

答案 0 :(得分:3)

EntityManager未注入AllocationPlanController,因为您“手动”使用它的构造函数创建AllocationPlanController实例。您应该将AllocationPlanController注入AllocationController bean并让容器管理它的生命周期。

答案 1 :(得分:0)

不要通过其构造函数创建新的AllocationPlanController,而是尝试对其进行注释:

@EJB
AllocationPlanController allocationPlanController;

然后容器会将该bean注入您的AllocationController,并且由于容器将注入它创建的bean,它将已经注入了它的依赖项,因此您将找到{{{{ 1}}。