JPA - EntityManagerFactory (reconectar)

3 respostas
yorgan

Bom dia pessoal,

Estou tendo problemas com o JPA no momento em que a conexão do EntityManagerFactory é perdida.
Como faço para que ele crie novamente a conexão no caso de ela ser perdida.

Segue meu persistence.xml e meu singleton de criação da factory.

<persistence-unit name="banco">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
            <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/banco" />
            <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
            <property name="hibernate.connection.username" value="****" />
            <property name="hibernate.connection.password" value="****" />
            <property name="hibernate.c3p0.min_size" value="5"/>
            <property name="hibernate.c3p0.max_size" value="20"/>
            <property name="hibernate.c3p0.timeout" value="60"/>
            <property name="hibernate.c3p0.max_statements" value="50"/>
            <property name="hibernate.c3p0.idle_test_period" value="5"/>
        </properties>
    </persistence-unit>

Singleton:

....
public static EntityManager getEntityManager() {
      if(factory == null) {
            factory = Persistence.createEntityManagerFactory("banco");
      }
      return factory.createEntityManager();
}

...

[]´s

Daniel

3 Respostas

vitenho

Porque vc está perdendo a conexao?

yorgan

Não sei. Alguma coisa está acontecendo no servidor.

Várias vezes já aconteceu isso:

Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was 59.981.391 milliseconds ago.  The last packet sent successfully to the server was 59.981.391 milliseconds ago. is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem.
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
	at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
	at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1122)
	at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3317)
	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1941)
	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2114)
	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2696)
	at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2105)
	at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2264)
	at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:208)
	at org.hibernate.loader.Loader.getResultSet(Loader.java:1808)
	at org.hibernate.loader.Loader.doQuery(Loader.java:697)
	at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)
	at org.hibernate.loader.Loader.doList(Loader.java:2228)
	... 58 more
Caused by: java.net.SocketException: Broken pipe
	at java.net.SocketOutputStream.socketWrite0(Native Method)
	at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
	at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
	at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65)
	at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123)
	at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3298)
	... 68 more

[]´s

Daniel

vitenho
or using the Connector/J connection property 'autoReconnect=true' to avoid this problem.

o mysql desconecta após 8 horas direto, se nao me engano

coloca esse param na url, q deve melhorar

jdbc:mysql://localhost/seudatabase?autoReconnect=true
Criado 25 de março de 2010
Ultima resposta 25 de mar. de 2010
Respostas 3
Participantes 2