实际上,我正在将一个应用程序从 javaee6 迁移到 javaee7,该应用程序具有带有一些 CDI 组件和所有业务逻辑的 ejb 模块。
一般来说,我有一个接口来使用实体制作 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 似乎有一些规范无法实现我的实现。有谁知道这个问题或可以帮助我解决?
非常感谢,对不起我糟糕的英语......