[
https://issues.apache.org/jira/browse/DERBY-3077?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Kathey Marsden updated DERBY-3077:
----------------------------------
Component/s: JDBC
Affects Version/s: 10.2.2.0
> 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
>
> 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.