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 -->