JPA ...duvida no uso metodo close

Olá,

peguei alguns exemplos na internet que na hora de fazer insert,update,delete,select,etc

não utiliza o metodo close() para fechar EntityManager o correto é fechar ou não ???

Ou existe uma forma dele fazer esse controle ???

Se alguém puder me ajudar agradeceria …

abs

-- inclusão
try {
			DATAS.BeginTransaction();
			dao.persist(user);
			DATAS.CommitTransaction();
			
		} catch (DaoException e) {
			DATAS.RollBackTransaction();
			Long id = e.getId();
			e.printStackTrace();
		}
		finally{
			DATAS.Close();
		}

----alteração

try {
			DATAS.BeginTransaction();
			dao.merge(user);
			DATAS.CommitTransaction();
			
		} catch (DaoException e) {
			DATAS.RollBackTransaction();
			Long id = e.getId();
			e.printStackTrace();
		}
		finally{
			DATAS.Close();
		}
-- consulta

--consulta
try {
			DATAS.BeginTransaction();
			StringBuffer jhl = new StringBuffer();
			jhl.append("SELECT distinct(us) FROM usuario us ");
                  usuariosdoctos = DATAS.getManager().createQuery(jhl.toString()).setFirstResult       (inicio).setMaxResults(fim).getResultList();
			DATAS.CommitTransaction();
			
		} catch (DaoException e) {
			DATAS.RollBackTransaction();
			Long id = e.getId();
			e.printStackTrace();
		}
		finally{
			DATAS.Close();
		}


public class DATAS {
    protected EntityManagerFactory factory = null;
    protected EntityManager manager = null;
    private EntityTransaction transaction = null;

    protected String nDatabase = "banco";

    private static DATAS instance = new DATAS();   
    public static DATAS getInstance() {   
    	return instance;   
    }   
    
    public void initialize(boolean in_pool) {
        factory = Persistence.createEntityManagerFactory(nDatabase);
        manager = factory.createEntityManager();
    }

    public void finalize() {
    	
    }

    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();
	}    
}

Se você estiver utilizando o contexto de persistência extendido (aplicação stand-alone), o correto é fechar.

Você está utilizando o Spring na sua aplicação não é?

Obrigado pelo retorno,

mais uma duvida como sou iniciante com JPA esse termo aplicação stand-alone
seria o uso do arquivo persistence.xml puro pois não estou usando Spring …seria isso?

se puder me ajudar …


<persistence-unit name="banco">
      <provider>org.hibernate.ejb.HibernatePersistence</provider>
      <properties>
         <!-- Only scan and detect annotated entities -->
         <property name="hibernate.archive.autodetection" value="class"/>

         <!-- property name="hibernate.hbm2ddl.auto" value="create"/ -->

         
         <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
         <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
         <property name="hibernate.connection.url" value="jdbc:mysql://localhost/local"/>
         <property name="hibernate.connection.username" value="root"/>
         <property name="hibernate.connection.password" value="root"/>
         <property name="hibernate.show_sql" value="true" />  
         
         <property name="hibernate.c3p0.min_size" value="0"/>
         <property name="hibernate.c3p0.max_size" value="10"/>
         <property name="hibernate.c3p0.timeout" value="1000"/>
         <property name="hibernate.c3p0.max_statements" value="50"/>
         <property name="hibernate.c3p0.idle_test_period" value="3000"/>
      </properties>

Stand-alone é uma aplicação sem um container.

Como você está utilizando o Tomcat, você pode configurar um DataSource (mas mesmo assim você deverá fechar as conexões).

mas uma duvida no metodo Close criado

posso fechar assim :

manager.close();
factory.close()

É correto ???


 factory = Persistence.createEntityManagerFactory(nDatabase);   
        manager = factory.createEntityManager();   

Isso.

valeu obrigado…