title: odd SQLException - Could not retrieve transation read-only status server
body: <p>I have a <a href="http://quartz-scheduler.org/" rel="nofollow noreferrer">Quartz</a> Job that executes a Stored Procedure in my MySQL database once every 5 minutes, and for some reason, 1 out of 3 executions fails and gives this weird exception. I have searched and searched for what this exception means, but I could not find a solution. Here is the full stack trace:</p>
  
  <pre><code>java.sql.SQLException: Could not retrieve transation read-only status server
      at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078)
      at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
      at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:975)
      at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:920)
      at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:951)
      at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:941)
      at com.mysql.jdbc.ConnectionImpl.isReadOnly(ConnectionImpl.java:3939)
      at com.mysql.jdbc.ConnectionImpl.isReadOnly(ConnectionImpl.java:3910)
      at com.mysql.jdbc.PreparedStatement.checkReadOnlySafeStatement(PreparedStatement.java:1258)
      at com.mysql.jdbc.CallableStatement.checkReadOnlySafeStatement(CallableStatement.java:2656)
      at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1278)
      at com.mysql.jdbc.CallableStatement.execute(CallableStatement.java:920)
      at com.mchange.v2.c3p0.impl.NewProxyCallableStatement.execute(NewProxyCallableStatement.java:3044)
      at org.deadmandungeons.website.tasks.RankUpdateTask.execute(RankUpdateTask.java:30)
      at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
      at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)
  Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
  
  The last packet successfully received from the server was 1,198,219 milliseconds ago.  The last packet sent successfully to the server was 950,420 milliseconds ago.
      at sun.reflect.GeneratedConstructorAccessor43.newInstance(Unknown Source)
      at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
      at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
      at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
      at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1121)
      at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3673)
      at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3562)
      at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4113)
      at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2570)
      at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2731)
      at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2812)
      at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2761)
      at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1612)
      at com.mysql.jdbc.ConnectionImpl.isReadOnly(ConnectionImpl.java:3933)
      ... 9 more
  Caused by: java.net.SocketException: Connection timed out
      at java.net.SocketInputStream.socketRead0(Native Method)
      at java.net.SocketInputStream.read(SocketInputStream.java:150)
      at java.net.SocketInputStream.read(SocketInputStream.java:121)
      at com.mysql.jdbc.util.ReadAheadInputStream.fill(ReadAheadInputStream.java:114)
      at com.mysql.jdbc.util.ReadAheadInputStream.readFromUnderlyingStreamIfNecessary(ReadAheadInputStream.java:161)
      at com.mysql.jdbc.util.ReadAheadInputStream.read(ReadAheadInputStream.java:189)
      at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:3116)
      at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3573)
      ... 17 more</code></pre>
  
  <p>So I figured it is timing out because it thinks the MySQL server is in read-only status?
  This only happens for this quartz job, and not any other time when I communicate with the database. This execution is of course happening in another thread, but I don't think that would have anything to do with it. 
  Why would it think the server was in read-only mode?</p>
  
  <p>Also, I don't think "transation" is a word, so there's that...</p>