18 votos

com.mysql.jdbc.excepciones.jdbc4.MySQLNonTransientConnectionException: No hay operaciones permitido después de la conexión cerrada

He creado una aplicación de e implementados localmente ... y estaba funcionando perfectamente. He implementado en un servidor remoto y empezó a llegar la excepción que se menciona en la línea de asunto. No es a causa de cualquier problema de firewall.

He cambiado mi hibernate.xml a conectarse a través de mi dirección IP en lugar de localhost y ahora tengo la misma tiempos de espera en mi localmente aplicación implementada. Me sale este error al mantener la aplicación en ejecución por más de un día.

Yo no soy de llevar a cabo operaciones después de la confirmación de las transacciones o la clausura de las sesiones de mí mismo. Yo estoy usando las propiedades siguientes en hibernate.cfg.xml

<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://myremotehost:3306/akp</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">root</property>
        <property name="hibernate.show_sql">false</property>
        <property name="hibernate.current_session_context_class">thread</property>
        <property name="hibernate.query.factory_class">org.hibernate.hql.ast.ASTQueryTranslatorFactory</property>

Causado por: com.mysql.jdbc.excepciones.jdbc4.MySQLNonTransientConnectionException: Ninguna de las operaciones permitidas después de la conexión se cierra.La conexión fue finalizada por el conductor.

Información detallada:

 Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed.Connection was implicitly closed by the driver.
      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.Util.getInstance(Util.java:384)
      at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1015)
      at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
      at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:984)
      at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:929)
      at com.mysql.jdbc.ConnectionImpl.throwConnectionClosedException(ConnectionImpl.java:1193)
      at com.mysql.jdbc.ConnectionImpl.checkClosed(ConnectionImpl.java:1180)
      at com.mysql.jdbc.ConnectionImpl.prepareStatement(ConnectionImpl.java:4137)
      at com.mysql.jdbc.ConnectionImpl.prepareStatement(ConnectionImpl.java:4103)
      at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:505)
      at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:423)
      at org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:139)
      at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1547)
      at org.hibernate.loader.Loader.doQuery(Loader.java:673)
      at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
      at org.hibernate.loader.Loader.doList(Loader.java:2220)
      ... 36 more
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was 34,247,052 milliseconds ago.  The last packet sent successfully to the server was 34,247,052 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:1118)
      at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3321)
      at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1940)
      at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2113)
      at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2568)
      at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2113)
      at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2275)
      at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186)
      at org.hibernate.loader.Loader.getResultSet(Loader.java:1787)
      at org.hibernate.loader.Loader.doQuery(Loader.java:674)
      at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
      at org.hibernate.loader.Loader.doList(Loader.java:2220)
      at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
      at org.hibernate.loader.Loader.list(Loader.java:2099)
      at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:94)
      at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1569)
      at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283)
      at com.xyz.abc.DAO.GenericHibernateDAO.findByField(GenericHibernateDAO.java:119)
      at com.xyz.abc.DAO.JobDAO.getJobsByLdap(JobDAO.java:115)
      at com.xyz.abc.business.Jcr.getMyruns(Jcr.java:272)
      at com.xyz.abc.business.abcService.getMyruns(abcService.java:54)
      at sun.reflect.GeneratedMethodAccessor139.invoke(Unknown Source)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      at java.lang.reflect.Method.invoke(Method.java:597)
      at org.apache.axis2.rpc.receivers.RPCUtil.invokeServiceClass(RPCUtil.java:194)
      at org.apache.axis2.rpc.receivers.RPCMessageReceiver.invokeBusinessLogic(RPCMessageReceiver.java:102)
      at org.apache.axis2.receivers.AbstractInOutMessageReceiver.invokeBusinessLogic(AbstractInOutMessageReceiver.java:40)
      at org.apache.axis2.receivers.AbstractMessageReceiver.receive(AbstractMessageReceiver.java:114)
      at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:173)
      at org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:173)
      at org.apache.axis2.transport.http.AxisServlet.doPost(AxisServlet.java:142)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
      at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
      at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:203)
      at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
      at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:108)
      at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
      at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:379)
      at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:242)
      at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:259)
      at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:237)
      ... 4 more
Caused by: java.net.SocketException: Software caused connection abort: socket write error

¿Alguien tiene alguna idea de lo que podría causar este comportamiento?

EDITAR: Ahora estoy usando folloing en mi hibernate.cfg.xml archivo.Es correcto?

<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/xyz</property>
    <property name="hibernate.connection.username">root</property>
    <property name="hibernate.connection.password">root</property>
    <property name="hibernate.show_sql">false</property>
    <property name="hibernate.current_session_context_class">thread</property>
    <property name="hibernate.query.factory_class">org.hibernate.hql.ast.ASTQueryTranslatorFactory</property>
    <property name="hibernate.c3p0.min_size">5</property>
    <property name="hibernate.c3p0.max_size">20</property>
<!-- <property name="hibernate.c3p0.max_size">1800</property>-->
    <property name="hibernate.c3p0.max_statements">50</property>

    <property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
    <property name="c3p0.max_statements">0</property>
    <property name="c3p0.maxIdleTimeExcessConnections">3600</property>
    <property name="c3p0.idleConnectionTestPeriod">3600</property> 
    <property name="c3p0.maxIdleTime">3600</property>

6voto

frictionlesspulley Puntos 3416

Como @swanliu señaló que es debido a una mala conexión.
Sin embargo, antes de ajustar el servidor de sincronización y el tiempo de espera de cliente , en primer lugar, tratar y utilizar una conexión mejor estrategia de puesta en común.

La Agrupación De Conexiones

Hibernate sí mismo admite que su agrupación estrategia es mínima

Hibernate propia agrupación algoritmo es, sin embargo, bastante rudimentaria. Está pensado para ayudarle a empezar y no es diseñado para uso en un sistema de producción, o incluso para el rendimiento pruebas. Usted debe usar una tercera parte de la piscina para un mejor rendimiento y estabilidad. Basta con sustituir la hibernación.conexión.pool_size propiedad con grupo de conexión de la configuración específica. Este se apagará Hibernate piscina interior. Por ejemplo, usted podría usar c3p0.
Como se indicó en Referencia : http://docs.jboss.org/hibernate/core/3.3/reference/en/html/session-configuration.html

Yo personalmente uso C3P0. sin embargo, hay otras alternativas disponibles, incluyendo DBCP.
Echa un vistazo

A continuación es una configuración mínima de C3P0 utilizada en mi aplicación:

<property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<property name="c3p0.acquire_increment">1</property> 
<property name="c3p0.idle_test_period">100</property> <!-- seconds --> 
<property name="c3p0.max_size">100</property> 
<property name="c3p0.max_statements">0</property> 
<property name="c3p0.min_size">10</property> 
<property name="c3p0.timeout">1800</property> <!-- seconds --> 

De forma predeterminada, las piscinas no caducará nunca Conexiones. Si usted desea Las conexiones caducado a lo largo del tiempo en el fin de mantener la "frescura", conjunto de maxIdleTime y/o maxConnectionAge. maxIdleTime define cuántas segundos que una Conexión se debería permitir que no se haya utilizado antes de ser extraídos de la piscina. maxConnectionAge las fuerzas de la piscina para descartar cualquier Las conexiones que se han adquirido a partir de la base de datos más que en el conjunto de número de segundos en el pasado.
Como se indicó en Referencia : http://www.mchange.com/projects/c3p0/index.html#managing_pool_size

Editar:
He actualizado el archivo de configuración (de Referencia), como yo acababa de copiado y pegado el uno para mi proyecto anterior. El tiempo de espera debería idealmente resolver el problema, Si eso no funciona para usted hay una solución cara , que creo que se podría echar un vistazo a:


Crear un archivo "c3p0.propiedades" que debe estar en la raíz del classpath (es decir, no hay manera de sustituir a determinadas partes de la aplicación). (Referencia)

# c3p0.properties
c3p0.testConnectionOnCheckout=true

Con esta configuración, cada conexión es probado antes de ser utilizado. No obstante, puede afectar al rendimiento del sitio.

5voto

swanliu Puntos 500

mysql implícitamente se cierra la conexión db debido a la conexión db ha sido inactivo demasiado tiempo ( 34,247,052 milisegundos ).así que prgram recuperar una mala conexión de la conexión de la piscina, y que la causa de la 'MySQLNonTransientConnectionException: No hay operaciones permitido después de la conexión cerrada'

mysql sugiere 'Usted debe considerar cualquiera de caducar y/o pruebas de conexión de validez antes de su uso en su aplicación, aumentando el servidor configurado los valores de los tiempos de espera del cliente, o mediante el Connector/J conexión de la propiedad 'autoReconnect=true' para evitar este problema.'

0voto

1.5 Puntos 11

Si no desea utilizar la conexión de la piscina (que seguro, que su aplicación tiene sólo una conexión), usted puede hacer esto - si la conexión se cae, debe establecer un método de llamada .openSession() en su lugar .getCurrentSession()

Por ejemplo:

SessionFactory sf = null;
// get session factory
// ...
//
Session session = null;
try {
        session = sessionFactory.getCurrentSession();
} catch (HibernateException ex) {
        session = sessionFactory.openSession();
}

Si el uso de Mysql, se puede establecer autoReconnect de la propiedad:

    <property name="hibernate.connection.url">jdbc:mysql://127.0.0.1/database?autoReconnect=true</property>

Espero que esto ayude.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by: