| 

.NET C# Java Javascript Exception

java.net.SocketException nach langer Inaktivität

Dies ist das Archiv des ehemaligen Forums zum Thema Groovy, Grails, Griffon und Bean Scripting Framework, welches unter groovy-forum.de existierte. Die neue Adresse des Groovy-Forums ist: http://codekicker.de/fragen/themen/groovy.


java.net.SocketException nach langer Inaktivität

slyfox1972 - 26.04.2010 10:27
Hallo!

Nach langer Inaktivität tritt eine Exception auf:

java.net.SocketException: Broken pipe
	at java.net.SocketOutputStream.socketWrite0(Native Method)
	at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:109)
	at java.net.SocketOutputStream.write(SocketOutputStream.java:153)
	at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
	at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)
	at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3298)
	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1941)
	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2114)

Ich vermute mal, es liegt daran, dass die DB-Verbindung nach der langen Inaktivität geschlossen wurde.
Die Vermutung bestätigt sich dadurch, dass, wenn ich den MySQL-Dienst beende und neu starte, die Exception ebenfalls auftritt.

Normalerweise müsste eine SQL-Verbindung jedesmal vor dem Senden eines SQL-Befehls geprüft werden, ob diese noch aktiv ist, ist dies nicht der Fall, muss diese neu aufgebaut werden.
Leider wird diese erst nach Auftreten der Exception wieder hergestellt.

Kann man dieses Problem irgendwie beheben?

Viele Grüße

Egon Schmid


Re: java.net.SocketException nach langer Inaktivität

milkyman - 26.04.2010 12:39
Ich denke das ist ein allgemeines MySQL-Hibernate Problem und hat nicht direkt mit Grails zu tun. Hatten wir zumindest schon in Java-Projekten mit MySQL, Spring und Hibernate. Vielleicht helfen dir die Links/Infos weiter. Keine Ahnung, an welchen Schrauben man da bei Grails drehen muss.

http://www.codefin.net/2007/05/hibernate-and-mysql-connection-timeouts.html

	<bean id="123" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
     <property name="driverClass" value="${jdbc.driverClassName.bk}" />
       <property name="jdbcUrl" value="${jdbc.url.bk}"/>
       <property name="idleConnectionTestPeriod" value="300"/>                             
       <property name="preferredTestQuery"><value>select 1</value></property>
       <property name="properties">
       <props>
           <prop key="user">${xxxx}</prop>
           <prop key="password">${yyyyy}</prop>                  
           <prop key="c3p0.acquire_increment">5</prop>
           <prop key="c3p0.min_size">10</prop>
           <prop key="c3p0.max_size">120</prop>
           <prop key="c3p0.max_statements">0</prop>
           <!--  
           <prop key="c3p0.preferredTestQuery">select 1</prop>
           <prop key="c3p0.idle_test_period">60</prop>
           <prop key="c3p0.idleConnectionTestPeriod">60</prop> 
           -->
           <prop key="com.mchange.v2.log.MLog">com.mchange.v2.log.log4j.Log4jMLog</prop>
       </props>
       </property>
   </bean>
     <!-- Hibernate SessionFactory -->
   <bean id="abc" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
       <property name="dataSource"><ref local="def"/></property>
       <property name="mappingResources">
           <list>
           ...
           </list>
       </property>
       <property name="hibernateProperties">
           <props>
               <prop key="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</prop>
               <!--  <prop key="hibernate.c3p0.preferredTestQuery">select 1</prop>-->                              
               <prop key="hibernate.dialect">${hibernate.dialect.bk}</prop>
               <prop key="hibernate.hbm2ddl.auto">update</prop>
               <!-- Print SQL all statements -->
               <prop key="hibernate.show_sql">false</prop>
               <prop key="hibernate.format_sql">false</prop>
               <prop key="hibernate.use_sql_comments">false</prop>
               <!-- Use the C3P0 connection pool -->
               <prop key="hibernate.c3p0.min_size">10</prop>
                 <prop key="hibernate.c3p0.max_size">120</prop>
                  <prop key="hibernate.c3p0.minPoolSize">10</prop>
                  <prop key="hibernate.c3p0.maxPoolSize">120</prop>
               <prop key="hibernate.c3p0.timeout">1800</prop>
               <prop key="hibernate.c3p0.max_statements">0</prop>
                  <prop key="hibernate.cache.use_query_cache">false</prop>
                  <!--  <prop key="hibernate.c3p0.idle_test_period">60</prop>
                  <prop key="hibernate.c3p0.idleTestPeriod">60</prop>
                  <prop key="hibernate.c3p0.idleConnectionTestPeriod">60</prop>
                  <prop key="com.mchange.v2.log.MLog">com.mchange.v2.log.log4j.Log4jMLog</prop>-->
           </props>
       </property>
   </bean>

Bye,
Horst


Stelle deine Groovy-Frage jetzt!


Diese Seite zeigt den Thread "java.net.SocketException nach langer Inaktivität" der ehemaligen Webseite groovy-forum.de, welche durch einen Serverunfall zerstört wurde. codekicker.de hat viele Konversationen über die beliebte Programmiersprache Groovy und zugehörige Frameworks wie das Grails-Framework retten können.

Hast Du eine Frage zum Thema Groovy, Grails oder allgemein Java? Viele ehemalige groovy-forum.de Mitglieder beantworten dir auf codekicker.de deine Frage! Stelle jetzt eine Frage!

Viele weitere Diskussionen zu Grails und Groovy befinden sich auf der Threadübersicht des alten groovy-forum.de.