我们正在尝试构建一个系统,该系统根据登录用户(多租户类型)“生成”一个实体管理器。因此,我们实现了一个这样的无状态 ejb:
@Stateless
@TransactionAttribute(TransactionAttributeType.SUPPORTS)
public class CustomEntityManagerFactory {
@PersistenceContext(unitName = "EM1")
private EntityManager em1;
@PersistenceContext(unitName = "EM2")
private EntityManager em2;
@Produces
@RequestScoped
public EntityManager getEntityManager() {
// check which entitymanager to return
}
}
实体管理器是这样注入的:
@Stateless
public class EmployeeService {
@Inject
private EntityManager em;
...
}
只要只需要一个没有扩展持久性上下文的实体管理器(在无状态 ejb 中),这个生产者就可以工作。不幸的是,我们也有一些有状态的 ejb,它们需要扩展的持久性上下文。有没有办法为此目的实现 CDI 生产者,或者这种方法仅适用于带有事务实体管理器的无状态 ejb?