假設我有一個簡單的名爲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。