我有一个 web 模块和一个 ejb 模块打包到一个 EAR 中。
我有 JSF 支持 bean 成功地从 ejb 模块注入会话 EJB,这些模块能够从数据库中提取数据,例如
@RequestScoped
public class CarController {
@EJB
private CarService carService;
为了支持 Primefaces LazyDataModel,会话 EJB 将其 EntityManager 暴露给 LazyDataModel:
@PostConstruct
public void init() {
MyLazyDataModel<Car> myLazyDataModel = new MyLazyDataModel<Car>();
myLazyDataModel.setEntityManager(carService.getEntityManager());
super.setMyLazyDataModel(myLazyDataModel);
}
这会导致以下异常:
java.lang.IllegalStateException: Unable to retrieve EntityManagerFactory for unitName null
at com.sun.enterprise.container.common.impl.EntityManagerWrapper.init(EntityManagerWrapper.java:132)
at com.sun.enterprise.container.common.impl.EntityManagerWrapper._getDelegate(EntityManagerWrapper.java:173)
at com.sun.enterprise.container.common.impl.EntityManagerWrapper.getCriteriaBuilder(EntityManagerWrapper.java:895)
at com.cars.web.controller.MyLazyDataModel.load(MyLazyDataModel.java:154)
at org.primefaces.component.datatable.DataTable.loadLazyData(DataTable.java:731)
这是否不起作用,因为 PersistenceContext 只是在 ejb 模块中传递的有效 bean?