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 ka...@apache.org on 2007/05/28 16:01:02 UTC
svn commit: r542232 -
/db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/TransactionResourceImpl.java
Author: kahatlen
Date: Mon May 28 07:01:01 2007
New Revision: 542232
URL: http://svn.apache.org/viewvc?view=rev&rev=542232
Log:
DERBY-1440: jdk 1.6 client driver omits SQLStates and chained
exceptions in error messages
Follow-up patch which simplifies wrapInSQLException() and improves the
comments.
Modified:
db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/TransactionResourceImpl.java
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/TransactionResourceImpl.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/TransactionResourceImpl.java?view=diff&rev=542232&r1=542231&r2=542232
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/TransactionResourceImpl.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/TransactionResourceImpl.java Mon May 28 07:01:01 2007
@@ -101,6 +101,7 @@
* | (EmbedStatement) | | (EmbedResultSet) | | (...) |
* |======================| |======================| |======================|
*
+ * </PRE>
* <P>A plain local connection <B>must</B> be attached (doubly linked with) to a
* TransactionResource at all times. A detachable connection can be without a
* TransactionResource, and a TransactionResource for an XATransaction
@@ -127,7 +128,7 @@
protected Database database;
protected LanguageConnectionContext lcc;
- /*
+ /**
* create a brand new connection for a brand new transaction
*/
TransactionResourceImpl(
@@ -159,7 +160,7 @@
cm = csf.newContextManager();
}
- /*
+ /**
* Called only in EmbedConnection construtor.
* The Local Connection sets up the database in its constructor and sets it
* here.
@@ -187,7 +188,7 @@
lcc = database.setupConnection(cm, username, drdaID, dbname);
}
- /*
+ /**
* Return instance variables to EmbedConnection. RESOLVE: given time, we
* should perhaps stop giving out reference to these things but instead use
* the transaction resource itself.
@@ -199,7 +200,7 @@
return csf;
}
- /*
+ /**
* need to be public because it is in the XATransactionResource interface
*/
ContextManager getContextManager() {
@@ -225,7 +226,7 @@
return se;
}
- /*
+ /**
* local transaction demarcation - note that global or xa transaction
* cannot commit thru the connection, they can only commit thru the
* XAResource, which uses the xa_commit or xa_rollback interface as a
@@ -284,7 +285,7 @@
* exception handling
*/
- /*
+ /**
* clean up the error and wrap the real exception in some SQLException.
*/
final SQLException handleException(Throwable thrownException,
@@ -360,37 +361,46 @@
}
}
-
+
+ /**
+ * Wrap a <code>Throwable</code> in an <code>SQLException</code>.
+ *
+ * @param thrownException a <code>Throwable</code>
+ * @return <code>thrownException</code>, if it is an
+ * <code>SQLException</code>; otherwise, an <code>SQLException</code> which
+ * wraps <code>thrownException</code>
+ */
public static SQLException wrapInSQLException(Throwable thrownException) {
if (thrownException == null)
return null;
- SQLException nextSQLException;
-
if (thrownException instanceof SQLException) {
-
- // server side JDBC can end up with a SQLException in the nested stack
- nextSQLException = (SQLException) thrownException;
+ // Server side JDBC can end up with a SQLException in the nested
+ // stack. Return the exception with no wrapper.
+ return (SQLException) thrownException;
}
- else if (thrownException instanceof StandardException) {
+
+ if (thrownException instanceof StandardException) {
StandardException se = (StandardException) thrownException;
if (se.getCause() == null) {
- nextSQLException = Util.generateCsSQLException(se);
- } else {
- nextSQLException = Util.seeNextException(se.getMessageId(),
- se.getArguments(), wrapInSQLException(se.getCause()));
+ // se is a single, unchained exception. Just convert it to an
+ // SQLException.
+ return Util.generateCsSQLException(se);
}
- } else {
-
- nextSQLException = Util.javaException(thrownException);
-
- }
+ // se contains a non-empty exception chain. We want to put all of
+ // the exceptions (including Java exceptions) in the next-exception
+ // chain. Therefore, call wrapInSQLException() recursively to
+ // convert the cause chain into a chain of SQLExceptions.
+ return Util.seeNextException(se.getMessageId(),
+ se.getArguments(), wrapInSQLException(se.getCause()));
+ }
- return nextSQLException;
+ // thrownException is a Java exception
+ return Util.javaException(thrownException);
}
/*