no uso do metodo Close() que contém
public void Close() {
manager.close();
factory.close();
}
mas quando uso em um for que quero incluir varios registros ao mesmo tempo me dá erro
for (int w=1;w<3;w++){
dao = new UserDao();
user = new User();
user.setName("New Company "+w);
dao.persist(company);
}
o primeiro inclui mas o segundo da o erro abaixo ::::::
java.lang.IllegalStateException: EntityManager is closed
o meu DAO extends AbstractBaseDao e não estou usando Spring …
public class DATAS {
protected String bDatabase = "banco";
protected EntityManagerFactory factory = Persistence.createEntityManagerFactory(bDatabase);
protected EntityManager manager = factory.createEntityManager();
private EntityTransaction transaction = null;
private static DATAS instance = new DATAS();
private DATAS(){
}
public static DATAS getInstance() {
return instance;
}
public EntityManager getManager() {
return this.manager;
}
public void BeginTransaction()
{
transaction = manager.getTransaction();
transaction.begin();
}
public void CommitTransaction()
{
transaction.commit();
}
public void RollBackTransaction() {
transaction.rollback();
}
public void Close() {
manager.close();
factory.close();
}
}
------
public abstract class AbstractBaseDao<T extends Entity, ID extends Serializable> extends JpaDaoSupport implements BaseDao<T, ID> {
protected DATAS mDATAS = null;
public AbstractBaseDao() {
mDATAS = DATAS.getInstance();
}
/* Classe que representa o objeto de domínio gerenciado pelo DAO. */
protected Class<T> domainClass = getDomainClass();
/* Retorna a classe do objeto de domínio gerenciado pelo DAO. */
@SuppressWarnings("unchecked")
protected Class<T> getDomainClass() {
if (domainClass == null) {
ParameterizedType thisType = (ParameterizedType) getClass().getGenericSuperclass();
domainClass = (Class<T>) thisType.getActualTypeArguments()[0];
}
return domainClass;
}
/**
* @see BaseDao#persist(ID) BaseDao.persist(T t)
*/
public void persist(T t) throws DaoException {
try {
mDATAS.BeginTransaction();
mDATAS.getManager().persist(t);
mDATAS.getManager().flush();
mDATAS.CommitTransaction();
} catch(Exception e) {
throw new DaoException(getErrorCode(METHOD_PERSIST), "Can not insert", e);
}finally{
mDATAS.Close();
}
}
}