[ https://issues.apache.org/jira/browse/DERBY-3077?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Kathey Marsden updated DERBY-3077: ---------------------------------- Attachment: derby-3077_stat.txt derby-3077_diff.txt Attached is a patch for this issue. Per Knut's suggestion, it changes expected client side errors such as SocketExceptions and IOExceptions to throw 08006 exceptions instead of 58 class exceptions. DRDA_CONNECTION_TERMINATED SOCKET_EXCEPTION COMMUNICATION_ERROR CONNECTION_FAILED_ON_DEFERRED_RESET NET_INSUFFICIENT_DATA NET_LOB_DATA_TOO_LARGE_FOR_JVM This leaves only protocol exceptions in the 58 class. Please review. Kathey > Trying to reconnect with derby client after bringing server down throws SQL > Exception 58009 rather than 08XXX exception > ----------------------------------------------------------------------------------------------------------------------- > > Key: DERBY-3077 > URL: https://issues.apache.org/jira/browse/DERBY-3077 > Project: Derby > Issue Type: Bug > Components: JDBC > Affects Versions: 10.2.2.0 > Reporter: Kathey Marsden > Assignee: Kathey Marsden > Attachments: derby-3077_diff.txt, derby-3077_stat.txt > > > This issue was discussed in DERBY-401, because the case where the server is > brought down and an application tries to reconnect does not throw a > SQLNonTransientException. Discussion is still underway about whether 58XXX > exceptions should be SQLNonTransientExceptions, but at least for this case > changing the exception to 08006 per Knut's suggestion should correct the > problem for this case. See > https://issues.apache.org/jira/browse/DERBY-401#action_12527400 > Below is current stack and test case. > Apache Derby > got connection now sleep > now try to use the connection after you killed the nS > Exception in thread "main" java.sql.SQLException: A communications error has > been detected: Software caused connection abort: recv failed. > at org.apache.derby.client.am.SQLExceptionFactory40.getSQLException(Unknown > Source) > at org.apache.derby.client.am.SqlException.getSQLException(Unknown Source) > at org.apache.derby.client.am.Connection.prepareStatement(Unknown Source) > at org.apache.derby.client.am.LogicalConnection.prepareStatement(Unknown > Source) > at DerbyClientNonXA.main(DerbyClientNonXA.java:48) > Caused by: org.apache.derby.client.am.DisconnectException: A communications > error has been detected: Software caused connection abort: recv failed. > at org.apache.derby.client.net.NetAgent.throwCommunicationsFailure(Unknown > Source) > at org.apache.derby.client.net.Reply.fill(Unknown Source) > at org.apache.derby.client.net.Reply.ensureALayerDataInBuffer(Unknown Source) > at org.apache.derby.client.net.Reply.readDssHeader(Unknown Source) > at org.apache.derby.client.net.Reply.startSameIdChainParse(Unknown Source) > at > org.apache.derby.client.net.NetStatementReply.readPrepareDescribeOutput(Unknown > Source) > at > org.apache.derby.client.net.StatementReply.readPrepareDescribeOutput(Unknown > Source) > at > org.apache.derby.client.net.NetStatement.readPrepareDescribeOutput_(Unknown > Source) > at org.apache.derby.client.am.Statement.readPrepareDescribeOutput(Unknown > Source) > at > org.apache.derby.client.am.PreparedStatement.readPrepareDescribeInputOutput(Unknown > Source) > at > org.apache.derby.client.am.PreparedStatement.flowPrepareDescribeInputOutput(Unknown > Source) > at org.apache.derby.client.am.PreparedStatement.prepare(Unknown Source) > at org.apache.derby.client.am.Connection.prepareStatementX(Unknown Source) > ... 3 more > Caused by: java.net.SocketException: Software caused connection abort: recv > failed > at java.net.SocketInputStream.read(SocketInputStream.java:129) > ... 15 more > import java.sql.Connection; > import java.sql.DatabaseMetaData; > import java.sql.PreparedStatement; > import java.sql.SQLException; > import java.sql.Statement; > import javax.sql.PooledConnection; > public class DerbyClientNonXA > { > public static void main(String args[]) throws Exception > { > org.apache.derby.jdbc.ClientConnectionPoolDataSource40 ds = new > org.apache.derby.jdbc.ClientConnectionPoolDataSource40(); > Connection conn = null; > ds.setDatabaseName("e:\\temp\\sampl127;create=true"); > PooledConnection pooledCon = ds.getPooledConnection(); > conn = pooledCon.getConnection(); > DatabaseMetaData md = conn.getMetaData(); > System.out.println(md.getDatabaseProductVersion()); > System.out.println(md.getDatabaseProductName()); > System.out.println("got connection now sleep. Bring down network server."); > Statement st = null; > PreparedStatement ps1 = null; > st = conn.createStatement(); > try > { > st.executeUpdate("drop table TAB1"); > } > catch (SQLException x) > { > System.out.println("no table exists"); > } > Thread.sleep(15000); > System.out.println("now try to use the connection after you killed the nS"); > ps1 = conn.prepareStatement("CREATE TABLE TAB1(COL1 INT NOT NULL)"); > ps1.executeUpdate(); > conn.commit(); > System.out.println("done"); > } > } -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.