title: SQL Error: 0, SQLState: 08S01 Communications link failure
body: <p>I am getting this error (not so frequently):</p>
  
  <pre><code>2013-05-08 16:44:35,786  WARN (JDBCExceptionReporter.java:100) [org.hibernate.util.JDBCExceptionReporter, logExceptions] - SQL Error: 0, SQLState: 08S01
  2013-05-08 16:44:35,786 ERROR (JDBCExceptionReporter.java:101) [org.hibernate.util.JDBCExceptionReporter, logExceptions] - Communications link failure
  
  The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
  2013-05-08 16:44:35,833 ERROR (AdminDaoImpl.java:297) [com.myapp.admin.db.AdminDaoImpl, createFilePackage] - data-upload: Exception while adding new file package
  org.hibernate.exception.JDBCConnectionException: Cannot open connection
      at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:97) [hibernate-core-3.3.2.GA.jar:3.3.2.GA]
      at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) [hibernate-core-3.3.2.GA.jar:3.3.2.GA]
      at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:52) [hibernate-core-3.3.2.GA.jar:3.3.2.GA]
      at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:449) [hibernate-core-3.3.2.GA.jar:3.3.2.GA]
      at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167) [hibernate-core-3.3.2.GA.jar:3.3.2.GA]
      at org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:142) [hibernate-core-3.3.2.GA.jar:3.3.2.GA]
      at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:85) [hibernate-core-3.3.2.GA.jar:3.3.2.GA]
      at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1354) [hibernate-core-3.3.2.GA.jar:3.3.2.GA]
      at com.myapp.admin.db.AdminDaoImpl. createFilePackage(AdminDaoImpl.java:182) [AdminDaoImpl.class:na]
      at com.myapp.admin.ctrl.UploadController.processUploadZip(UploadController.java:217) [UploadController.class:na]
      at sun.reflect.GeneratedMethodAccessor106.invoke(Unknown Source) [na:na]
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [na:1.6.0_35]
      at java.lang.reflect.Method.invoke(Method.java:597) [na:1.6.0_35]
      at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:212) [spring-web-3.1.0.RELEASE.jar:3.1.0.RELEASE]
      at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:126) [spring-web-3.1.0.RELEASE.jar:3.1.0.RELEASE]
      at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96) [spring-webmvc-3.1.0.RELEASE.jar:3.1.0.RELEASE]
      at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617) [spring-webmvc-3.1.0.RELEASE.jar:3.1.0.RELEASE]
      at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578) [spring-webmvc-3.1.0.RELEASE.jar:3.1.0.RELEASE]
      at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80) [spring-webmvc-3.1.0.RELEASE.jar:3.1.0.RELEASE]
      at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:900) [spring-webmvc-3.1.0.RELEASE.jar:3.1.0.RELEASE]
      at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:827) [spring-webmvc-3.1.0.RELEASE.jar:3.1.0.RELEASE]
      at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882) [spring-webmvc-3.1.0.RELEASE.jar:3.1.0.RELEASE]
      at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789) [spring-webmvc-3.1.0.RELEASE.jar:3.1.0.RELEASE]
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:647) [servlet-api.jar:na]
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) [servlet-api.jar:na]
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) [catalina.jar:7.0.35]
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) [catalina.jar:7.0.35]
      at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) [catalina.jar:7.0.35]
      at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) [catalina.jar:7.0.35]
      at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) [catalina.jar:7.0.35]
      at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) [catalina.jar:7.0.35]
      at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) [catalina.jar:7.0.35]
      at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) [catalina.jar:7.0.35]
      at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) [catalina.jar:7.0.35]
      at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:200) [tomcat-coyote.jar:7.0.35]
      at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) [tomcat-coyote.jar:7.0.35]
      at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310) [tomcat-coyote.jar:7.0.35]
      at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [na:1.6.0_35]
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [na:1.6.0_35]
      at java.lang.Thread.run(Thread.java:662) [na:1.6.0_35]
  Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
  </code></pre>
  
  <p>I have two web (spring mvc + hibernate + mysql) applications hosted on shared server:</p>
  
  <p>1) main app to show files for download (which is inserted through admin app)</p>
  
  <p>2) admin app with CRUD operations</p>
  
  <p>This error appears sometime, when I am using "admin" application to upload files for "main" app, lets say may be after successfully uploading/processing around 100-120 files/requests and on each request hitting database with 10-20 insert/update queries.</p>
  
  <p>Hosting Details:</p>
  
  <pre><code>Private tomcat hosting
  java 1.6.0_35-b10
  tomcat 7.0.35
  heap size 288MB
  MySQL Server 5
  commons-dbcp 1.2.2
  mysql-connector-java 5.1.9
  </code></pre>
  
  <p>Database + Hibernate + DBCP properties:</p>
  
  <pre><code>&lt;bean id="dbDataSource" class="org.apache.commons.dbcp.BasicDataSource"&gt;
      &lt;property name="driverClassName" value="com.mysql.jdbc.Driver" /&gt;
      &lt;property name="username" value="test" /&gt;
      &lt;property name="password" value="test" /&gt;
      &lt;property name="url" value="jdbc:mysql://localhost/my_database?useUnicode=yes&amp;characterEncoding=UTF-8" /&gt;
  
      &lt;!-- DBCP Connection Pool Settings --&gt;
      &lt;property name="defaultAutoCommit" value="true" /&gt;
      &lt;property name="initialSize" value="10" /&gt;
      &lt;property name="maxActive" value="500" /&gt;
      &lt;property name="maxIdle" value="8" /&gt;
      &lt;property name="minIdle" value="0" /&gt;
      &lt;property name="maxWait" value="30000" /&gt;
      &lt;property name="validationQuery" value="SELECT 1" /&gt;
      &lt;property name="testOnBorrow" value="true" /&gt;
      &lt;property name="testOnReturn" value="false" /&gt;
      &lt;property name="testWhileIdle" value="false" /&gt;
      &lt;property name="timeBetweenEvictionRunsMillis" value="-1" /&gt;
      &lt;property name="numTestsPerEvictionRun" value="3" /&gt;
      &lt;property name="minEvictableIdleTimeMillis" value="180000" /&gt;
      &lt;property name="poolPreparedStatements" value="true" /&gt;
      &lt;property name="maxOpenPreparedStatements" value="25" /&gt;
      &lt;property name="accessToUnderlyingConnectionAllowed" value="false" /&gt;
      &lt;property name="removeAbandoned" value="false" /&gt;
      &lt;property name="removeAbandonedTimeout" value="300" /&gt;
      &lt;property name="logAbandoned" value="false" /&gt;
  &lt;/bean&gt;
  
  hibernate.dialect=org.hibernate.dialect.MySQLDialect
  hibernate.hbm2ddl.auto=none
  hibernate.jdbc.batch_size=100
  hibernate.show_sql=false
  hibernate.format_sql=false
  hibernate.cache.use_second_level_cache=true
  hibernate.cache.use_query_cache=false
  hibernate.cache.provider_class=org.hibernate.cache.NoCacheProvider
  hibernate.current_session_context_class=thread
  </code></pre>
  
  <p>Concerned Code:</p>
  
  <pre><code>public String createFilePackage(FilePackage package) {
      String message = "";
  
      Session session = getSessionFactory().openSession();
      Transaction tx = null;
      try {
          tx = session.beginTransaction();
  
          // handling package, around 10-14 DB insert, 10 SELECT and 5 update queries on same session
  
          tx.commit();
  
      } catch(Exception e) {
          logger.error("file-upload: Exception while adding new font package", e);
          if(tx != null) { tx.rollback(); }
      } finally {
          session.close();
      }
      return message;
  }
  </code></pre>
  
  <p>any advise how to solve this issue?</p>