実際、いくつかの CDI コンポーネントとすべてのビジネス ロジックを備えた ejb モジュールを持つ javaee6 から javaee7 にアプリケーションを移行しています。
一般に、エンティティで CRUD を作成するためのインターフェイスがありました。
public interface StoreManager<T> {
T create(T entity) throws SystemException;
}
そして、このような実装:
public class StoreManagerImpl extends AbstractManager<Object> implements StoreManager<Object> {
@PersistenceContext(unitName="PersistUnit")
private EntityManager em;
private void setEntityManager(EntityManager em) {
this.em = em;
}
@Override
protected EntityManager getEntityManager() {
return em;
}
@Produces @Generator
public StoreManager create() {
StoreManagerImpl smImpl = new StoreManagerImpl();
smImpl.setEntityManager(em);
return smImpl;
}
}
抽象クラス AbstractManager は、作成、読み取り、更新などのすべてのメソッドが定義されている場所です。
public abstract class AbstractManager<T> {
public AbstractManager() {
}
protected abstract EntityManager getEntityManager();
public <P> P crear(P entity, Class<?> clase) throws SystemException {
try {
getEntityManager().persist(entity);
getEntityManager().flush();
getEntityManager().refresh(entity);
} catch (EntityExistsException ex) {
throw new EntityExistsException("El registro ya existe en la base de datos.");
} catch (EJBException ex) {
throw new SystemException("El registro no pudo ser guardado.");
} catch (Exception ex) {
ex.printStackTrace();
throw new SystemException("El registro no pudo ser guardado.");
}
return entity;
}
}
私の @Generator は、サービスがジェネリックを介してフィールド レベルにエンティティを渡す操作を呼び出す方法を提供する Java アノテーションです。あれは:
@Inject
@Generator
private StoreManager<Person> storeManager;
...
..
storeManager.create(person);
....
Glassfish 3 と javaee7 ではすべてが機能していますが、javaee7 には私の実装を可能にしない仕様がいくつかあるようです。誰かがこの問題について知っているか、解決するのを手伝ってくれますか?
どうもありがとう、そして私の下手な英語でごめんなさい........