假设我有一个简单的名为db-utils的库,它有一个CrudService CDI bean(requestScoped),我的Web应用程序使用它来执行CRUD操作。EJB无状态会话Bean中的CDI bean生产者
我也有一个名为grad-db的EJB项目,它具有从数据库映射的实体。 Grad-db也有生产者用来在db-utils的CrudService中设置entityManager。
我已经试过了,显然它工作正常。我的问题是:这是一个不好的做法?在无状态会话bean中生成CDI bean并将EJB无状态bean作为参数传递给CrudService会有什么后果吗?
我的代码:
EJB豆(研究生-DB):
@Stateless
public class CrudServiceCae extends AbstractCrud implements Serializable {
private static final long serialVersionUID = 1L;
@PersistenceContext(unitName = "cae-pu")
EntityManager em;
@Override
public EntityManager getEntityManager() {
return em;
}
@Produces
@Database(Schema.CAE)
public CrudService createCrudServiceCou() {
return new CrudService(this);
}
}
CrudService(DB-utils的):
@Named("crudService")
public class CrudService implements Serializable {
private static final long serialVersionUID = -2607003150201349553L;
private AbstractCrud crud;
public CrudService(AbstractCrud abstractCrud) {
this.crud = abstractCrud;
}
...
}
编辑: 其实它的工作只为查询。当我试图插入数据时,我得到了javax.persistence.TransactionRequiredException。显然,在这种情况下,我将不得不使用继承而不是CDI。