You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by rh...@apache.org on 2006/03/24 16:16:20 UTC
svn commit: r388558 - in
/db/derby/code/trunk/java/client/org/apache/derby/client:
am/SQLExceptionFactory.java am/SQLExceptionFactory40.java
am/SqlException.java net/ClientJDBCObjectFactoryImpl40.java
Author: rhillegas
Date: Fri Mar 24 07:16:17 2006
New Revision: 388558
URL: http://svn.apache.org/viewcvs?rev=388558&view=rev
Log:
Committing rev 2 of Anurag's patch for DERBY-1140: JDBC4 SQLException triage for the network client.
Added:
db/derby/code/trunk/java/client/org/apache/derby/client/am/SQLExceptionFactory40.java (with props)
Modified:
db/derby/code/trunk/java/client/org/apache/derby/client/am/SQLExceptionFactory.java
db/derby/code/trunk/java/client/org/apache/derby/client/am/SqlException.java
db/derby/code/trunk/java/client/org/apache/derby/client/net/ClientJDBCObjectFactoryImpl40.java
Modified: db/derby/code/trunk/java/client/org/apache/derby/client/am/SQLExceptionFactory.java
URL: http://svn.apache.org/viewcvs/db/derby/code/trunk/java/client/org/apache/derby/client/am/SQLExceptionFactory.java?rev=388558&r1=388557&r2=388558&view=diff
==============================================================================
--- db/derby/code/trunk/java/client/org/apache/derby/client/am/SQLExceptionFactory.java (original)
+++ db/derby/code/trunk/java/client/org/apache/derby/client/am/SQLExceptionFactory.java Fri Mar 24 07:16:17 2006
@@ -35,4 +35,20 @@
return sqlException.getSQLException();
}
+ /**
+ * creates SQLException initialized with all the params received from the
+ * caller. This method will be overwritten to support jdbc version specific
+ * exception class.
+ * @param message
+ * @param sqlState SQL
+ * @param errCode derby error code
+ * @param next next excewption for chaining
+ * @param cause root cause of the exception
+ * @return SQLException
+ */
+ public SQLException getSQLException (String message, String sqlState,
+ int errCode) {
+ return new SQLException (message, sqlState, errCode);
+ }
}
+
Added: db/derby/code/trunk/java/client/org/apache/derby/client/am/SQLExceptionFactory40.java
URL: http://svn.apache.org/viewcvs/db/derby/code/trunk/java/client/org/apache/derby/client/am/SQLExceptionFactory40.java?rev=388558&view=auto
==============================================================================
--- db/derby/code/trunk/java/client/org/apache/derby/client/am/SQLExceptionFactory40.java (added)
+++ db/derby/code/trunk/java/client/org/apache/derby/client/am/SQLExceptionFactory40.java Fri Mar 24 07:16:17 2006
@@ -0,0 +1,82 @@
+/*
+
+ Derby - Class org.apache.derby.client.am.SQLExceptionFactory40
+
+ Copyright (c) 2006 The Apache Software Foundation or its licensors, where applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+*/
+package org.apache.derby.client.am;
+
+import java.sql.SQLDataException;
+import java.sql.SQLException;
+import java.sql.SQLFeatureNotSupportedException;
+import java.sql.SQLIntegrityConstraintViolationException;
+import java.sql.SQLInvalidAuthorizationSpecException;
+import java.sql.SQLSyntaxErrorException;
+import java.sql.SQLTransactionRollbackException;
+import java.sql.SQLTransientConnectionException;
+
+/**
+ * SQLException factory class to create jdbc 40 exception classes
+ */
+
+public class SQLExceptionFactory40 extends SQLExceptionFactory {
+
+ /**
+ * creates jdbc4.0 SQLException and its subclass based on sql state
+ * 0A java.sql.SQLFeatureNotSupportedException
+ * 08 java.sql.SQLTransientConnectionException
+ * 22 java.sql.SQLDataException
+ * 28 java.sql.SQLInvalidAuthorizationSpecException
+ * 40 java.sql.SQLTransactionRollbackException
+ * 42 java.sql.SQLSyntaxErrorException
+ *
+ * @param message description of the
+ * @param sqlState
+ * @param errCode derby error code
+ * @param cause root cause of the exception
+ * @return SQLException
+ */
+ public SQLException getSQLException (String message, String sqlState,
+ int errCode) {
+ SQLException ex = null;
+ if (sqlState == null) {
+ ex = new SQLException(message, sqlState, errCode);
+ } else if (sqlState.startsWith("08")) {
+ //none of the sqlstate supported by derby belongs to
+ //NonTransientConnectionException
+ ex = new SQLTransientConnectionException(message, sqlState, errCode);
+ } else if (sqlState.startsWith("22")) {
+ ex = new SQLDataException(message, sqlState, errCode);
+ } else if (sqlState.startsWith("23")) {
+ ex = new SQLIntegrityConstraintViolationException(message, sqlState,
+ errCode);
+ } else if (sqlState.startsWith("28")) {
+ ex = new SQLInvalidAuthorizationSpecException(message, sqlState,
+ errCode);
+ } else if (sqlState.startsWith("40")) {
+ ex = new SQLTransactionRollbackException(message, sqlState,
+ errCode);
+ } else if (sqlState.startsWith("42")) {
+ ex = new SQLSyntaxErrorException(message, sqlState, errCode);
+ } else if (sqlState.startsWith ("0A")) {
+ ex = new SQLFeatureNotSupportedException(message, sqlState,
+ errCode);
+ } else {
+ ex = new SQLException(message, sqlState, errCode);
+ }
+ return ex;
+ }
+}
Propchange: db/derby/code/trunk/java/client/org/apache/derby/client/am/SQLExceptionFactory40.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: db/derby/code/trunk/java/client/org/apache/derby/client/am/SqlException.java
URL: http://svn.apache.org/viewcvs/db/derby/code/trunk/java/client/org/apache/derby/client/am/SqlException.java?rev=388558&r1=388557&r2=388558&view=diff
==============================================================================
--- db/derby/code/trunk/java/client/org/apache/derby/client/am/SqlException.java (original)
+++ db/derby/code/trunk/java/client/org/apache/derby/client/am/SqlException.java Fri Mar 24 07:16:17 2006
@@ -85,6 +85,11 @@
public static String CLIENT_MESSAGE_RESOURCE_NAME =
"org.apache.derby.loc.clientmessages";
+ //SQLException factory initialised with default factory
+ //It will be over written by the SQLException factory of the
+ //supported jdbc version
+ protected static SQLExceptionFactory
+ exceptionFactory = new SQLExceptionFactory ();
/**
* The message utility instance we use to find messages
@@ -290,7 +295,7 @@
// When we have support for JDBC 4 SQLException subclasses, this is
// where we decide which exception to create
- SQLException sqle = new SQLException(getMessage(), getSQLState(),
+ SQLException sqle = exceptionFactory.getSQLException(getMessage(), getSQLState(),
getErrorCode());
// If we're in a runtime that supports chained exceptions, set the cause
@@ -431,6 +436,14 @@
} else {
return new SqlException(logWriter, getMessage(), getSQLState(), getErrorCode()); // client error
}
+ }
+
+ /**
+ * Sets the exceptionFactory to be used for creating SQLException
+ * @param factory SQLExceptionFactory
+ */
+ public static void setExceptionFactory (SQLExceptionFactory factory) {
+ exceptionFactory = factory;
}
}
Modified: db/derby/code/trunk/java/client/org/apache/derby/client/net/ClientJDBCObjectFactoryImpl40.java
URL: http://svn.apache.org/viewcvs/db/derby/code/trunk/java/client/org/apache/derby/client/net/ClientJDBCObjectFactoryImpl40.java?rev=388558&r1=388557&r2=388558&view=diff
==============================================================================
--- db/derby/code/trunk/java/client/org/apache/derby/client/net/ClientJDBCObjectFactoryImpl40.java (original)
+++ db/derby/code/trunk/java/client/org/apache/derby/client/net/ClientJDBCObjectFactoryImpl40.java Fri Mar 24 07:16:17 2006
@@ -29,6 +29,7 @@
import org.apache.derby.client.am.PreparedStatement40;
import org.apache.derby.client.am.LogWriter;
import org.apache.derby.client.am.Agent;
+import org.apache.derby.client.am.SQLExceptionFactory40;
import org.apache.derby.client.am.Section;
import org.apache.derby.client.am.SqlException;
import org.apache.derby.client.am.Cursor;
@@ -40,6 +41,14 @@
* and returns the JDBC4.0 specific classes
*/
public class ClientJDBCObjectFactoryImpl40 implements ClientJDBCObjectFactory{
+
+ /**
+ * Sets SQLExceptionFactpry40 om SqlException to make sure jdbc40
+ * exception and sub classes are thrown when running with jdbc4.0 support
+ */
+ public ClientJDBCObjectFactoryImpl40 () {
+ SqlException.setExceptionFactory (new SQLExceptionFactory40 ());
+ }
/**
* Returns an instance of org.apache.derby.client.ClientPooledConnection40
*/