Issue Details (XML | Word | Printable)

Key: DBCP-143
Type: Bug Bug
Status: Open Open
Priority: Major Major
Assignee: Unassigned
Reporter: Andreas Krüger
Votes: 0
Watchers: 0
Operations

If you were logged in you would be able to see more operations.
Commons Dbcp

[dbcp] SQLNestedException thrown by server causes client ClassNotFoundException.

Created: 20/Oct/05 08:18 PM   Updated: Saturday 08:00 PM
Return to search
Component/s: None
Affects Version/s: None
Fix Version/s: 2.0

Time Tracking:
Not Specified

File Attachments:
  Size
Text File Licensed for inclusion in ASF works DBCP-143.patch 2007-07-23 10:54 PM Dain Sundstrom 24 kB
Environment:
Operating System: other
Platform: Other
Issue Links:
Reference
 

Bugzilla Id: 37181


 Description  « Hide
This is a GUI client / application server / database server application.

On the GUI client side, we see java.lang.ClassNotFoundException:
org.apache.commons.dbcp.SQLNestedException.

This happens when the database server is down, DBCP cannot connect to the
database, and throws a org.apache.commons.dbcp.SQLNestedException.

Our application server code sends the java.sql.SQLException it sees to the
client via RMI.

However, on the client, we have not provided commons-dbcp.jar.

And I don't think we should - DBCP is server code.

But, when the client does not have SQLNestedException's class file, the attempt
to de-serialize it results in the ClassNotFoundException we've been seeing.

Even old http://java.sun.com/j2se/1.3/docs/api/java/sql/SQLException.html has
the facilities that SQLNestedExcepion offers: It is able to chain another
SQLException to itself. So while SQLNestedException clearly causes problems, I
don't understand what DBCP gains from it.

What would we loose if it were scratched?



 All   Comments   Work Log   Change History   Subversion Commits      Sort Order: Ascending order - Click to sort in descending order
Henri Yandell added a comment - 12/Mar/07 11:52 PM
It was there in 1.2 too.

Looking at the source, the only part of SQLNestedException used is the SQLNestedException(String,Throwable). However sometimes that latter argument is not a SQLException; which would be one reason not to use the setNextException message.

Another alternative would be to bring the minimum JDK up to 1.4 and switch to standard exception chaining.


Dain Sundstrom added a comment - 23/Jul/07 10:54 PM
This patch replaces:

new SQLNestedException(msg, e);

with:

(SQLException) new SQLException(msg).initCause(e);


Dain Sundstrom added a comment - 24/Jul/07 05:27 PM
SQLNestedException has been deprecated in 1.3 and will be removed in 1.4

Mark Thomas added a comment - 15/Mar/09 10:20 PM
Removing the SQLNestedException would be an API breaking change so it would have to wait until a DBCP 2.0 release. To be perfectly honest, I don't see a 2.0 release on the horizon right now. However, I am not closing this as WONTFIX as it is always possible that there will be a 2.0 release at some point but please be aware that this is some time (possibly years) away.

Mark Thomas added a comment - 15/Mar/09 10:23 PM
Forgot to include this:

See http://markmail.org/thread/qd2mowgifkka2gkd for further discussion on this very topic.