JPA/Hibernate melhor pratica no uso EntityManager/Factory em WEB?

0 respostas
P

Olá,

crie uma classe onde faz o acesso ao arquivo xml e retorna EntityManager conforme abaixo.
A aplicação que estou trabalhando vai ser web mas o controle de transação já ser local via JPA/Hibernate
usando pool de conexão cp3 (conforme abaixo).

Minha duvida se estou usando certo pois conforme main abaixo ao acessar EntityManager uso essa instancia
e ao termino uso o close() …Pensando no futuro e se essa aplicação vá para um container (JBOSS,TOMCAT,WEBSPHERE,etc)
dessa forma vai funcionar ou terei que alterar ???

se alguém puder me ajudar …agradeceria …

EntityManager        manager;
		manager = PersistenceServiceFactory.getInstance().getManager();
		
		I...Dao dao = new I...Dao(manager);
		try{
			
			manager.getTransaction().begin();
			I....R ro =dao.find(4L);
			
			System.out.println("Id ="+ro.getId());
			System.out.println("Name ="+ro.getName());
			System.out.println("________________________________________");
	            manager.getTransaction().commit();
	        
		} catch (Exception e) {
			manager.getTransaction().rollback();
			System.out.println("Erro  ="+e);
			e.printStackTrace();
		}finally{
			manager.close();
		}
public class PersistenceServiceFactory {
	
	/* EntityManagerFactory */
	private static EntityManagerFactory emf ;
	
	/* EntityManager */
	private EntityManager        em  ;
	
	/* Singleton PersistenceServiceFactory */
	private static PersistenceServiceFactory instance = new PersistenceServiceFactory ();
	
	private PersistenceServiceFactory(){
	}
    public static PersistenceServiceFactory getInstance() {
		return instance;
	}

public static EntityManagerFactory create() {
    	try{
    		if (emf == null)
    		    emf = Persistence.createEntityManagerFactory("banco");
    	}catch(Exception e){
    		System.out.println("Não conseguiu acesar o Banco no metodo create() "+e);
    	}
    	return emf;	
    }

public EntityManager getManager() {
    	try{
    		emf = create();
    		em  = emf.createEntityManager();
    	}catch(Exception e){
    		System.out.println("Não conseguiu acesar o Banco no metodo getManager() "+e);
    	}
    	return em;	
    }
<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/banco"/>
         <property name="hibernate.connection.username" value="root"/>
         <property name="hibernate.connection.password" value="root"/>
         <property name="hibernate.show_sql" value="true" />  
  
         <!-- Foi incluido para testar o Pool de Conexão  -->
         <!-- property name="hibernate.connection.pool_size " value="10" /-->  

         
         <!--  Inicio Configuração do Pool de Conexão  -->
         <!-- Número minimo de um pool de conexões  vai manter, em qualquer momento -->
         <property name="hibernate.c3p0.min_size" value="0"/>
         <!-- Número máximo de um pool de conexões  vai manter, em qualquer momento -->
         <property name="hibernate.c3p0.max_size" value="10"/>
         <!-- Segundos uma conexão pode permanecer inativa, mas não utilizadas antes de serem descartadas. Zero significa ocioso conexões nunca expiram -->
         <property name="hibernate.c3p0.timeout" value="1000"/>
         <!-- Indica que no máximo de 50 declarações irá para o cache..isso melhora a performance com Hibernate  -->
         <property name="hibernate.c3p0.max_statements" value="50"/>
         <!--Se este é um número maior que 0, c3p0 irá testar todos os ocioso, mas pooled Unchecked-out ligações, este número de segundos de cada-->
         <property name="hibernate.c3p0.idle_test_period" value="3000"/>
         <!--Determina quantas conexões em um momento c3p0 irá tentar adquirir quando o pool estiver esgotado -->
         <property name="hibernate.c3p0.acquire_increment" value="2"/>         
         <!--  Fim Configuração do Pool de Conexão  -->
Criado 14 de janeiro de 2009
Respostas 0
Participantes 1