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/04/18 00:18:26 UTC
svn commit: r394788 - in /db/derby/code/trunk/java:
engine/org/apache/derby/iapi/jdbc/ engine/org/apache/derby/impl/jdbc/
engine/org/apache/derby/jdbc/
testing/org/apache/derbyTesting/functionTests/suites/
testing/org/apache/derbyTesting/functionTests/...
Author: rhillegas
Date: Mon Apr 17 15:18:21 2006
New Revision: 394788
URL: http://svn.apache.org/viewcvs?rev=394788&view=rev
Log:
DERBY-941: Commit Narayanan's statementeventlisteners_embedded_v2.diff patch, implementing embedded support for JDBC4 statement event listening.
Added:
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbc4/StatementEventsTest.java (with props)
Modified:
db/derby/code/trunk/java/engine/org/apache/derby/iapi/jdbc/BrokeredConnectionControl.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedPreparedStatement.java
db/derby/code/trunk/java/engine/org/apache/derby/jdbc/EmbedPooledConnection.java
db/derby/code/trunk/java/engine/org/apache/derby/jdbc/EmbedPooledConnection40.java
db/derby/code/trunk/java/engine/org/apache/derby/jdbc/EmbedXAConnection.java
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/DerbyNetClient.exclude
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/jdbc40.runall
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/util/SQLStateConstants.java
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/util/TestUtil.java
Modified: db/derby/code/trunk/java/engine/org/apache/derby/iapi/jdbc/BrokeredConnectionControl.java
URL: http://svn.apache.org/viewcvs/db/derby/code/trunk/java/engine/org/apache/derby/iapi/jdbc/BrokeredConnectionControl.java?rev=394788&r1=394787&r2=394788&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/iapi/jdbc/BrokeredConnectionControl.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/iapi/jdbc/BrokeredConnectionControl.java Mon Apr 17 15:18:21 2006
@@ -102,4 +102,20 @@
Optionally wrap a CallableStatement with an CallableStatement.
*/
public CallableStatement wrapStatement(CallableStatement realStatement, String sql) throws SQLException;
+
+ /**
+ * Close called on the associated PreparedStatement object
+ * @param statement PreparedStatement object on which the close event
+ * occurred
+ */
+ public void onStatementClose(PreparedStatement statement);
+
+ /**
+ * Error occurred on associated PreparedStatement object
+ * @param statement PreparedStatement object on which the
+ * error occured
+ * @param sqle The SQLExeption that caused the error
+ */
+ public void onStatementErrorOccurred(PreparedStatement statement,SQLException sqle);
+
}
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedPreparedStatement.java
URL: http://svn.apache.org/viewcvs/db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedPreparedStatement.java?rev=394788&r1=394787&r2=394788&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedPreparedStatement.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedPreparedStatement.java Mon Apr 17 15:18:21 2006
@@ -68,6 +68,7 @@
import java.io.Reader;
import java.sql.Types;
+import org.apache.derby.iapi.jdbc.BrokeredConnectionControl;
/**
*
@@ -94,6 +95,8 @@
protected PreparedStatement preparedStatement;
private Activation activation;
+
+ private BrokeredConnectionControl bcc=null;
// By default a PreparedStatement is poolable when it is created
//required for jdbc4.0 methods
@@ -208,6 +211,8 @@
*/
void closeActions() throws SQLException {
+ if (bcc!=null)
+ bcc.onStatementClose(this);
//we release the resource for preparedStatement
preparedStatement = null;
@@ -246,15 +251,19 @@
* @exception SQLException thrown on failure.
*/
public final java.sql.ResultSet executeQuery() throws SQLException {
- executeStatement(activation, true, false);
-
- if (SanityManager.DEBUG) {
- if (results == null)
- SanityManager.THROWASSERT("no results returned on executeQuery()");
- }
-
- return results;
- }
+ try {
+ executeStatement(activation, true, false);
+ } catch(SQLException sqle) {
+ checkStatementValidity(sqle);
+ }
+
+ if (SanityManager.DEBUG) {
+ if (results == null)
+ SanityManager.THROWASSERT("no results returned on executeQuery()");
+ }
+
+ return results;
+ }
/**
* Execute a SQL INSERT, UPDATE or DELETE statement. In addition,
@@ -265,10 +274,14 @@
* for SQL statements that return nothing
* @exception SQLException thrown on failure.
*/
- public final int executeUpdate() throws SQLException {
- executeStatement(activation, false, true);
- return updateCount;
- }
+ public final int executeUpdate() throws SQLException {
+ try {
+ executeStatement(activation, false, true);
+ } catch(SQLException sqle) {
+ checkStatementValidity(sqle);
+ }
+ return updateCount;
+ }
/**
* Set a parameter to SQL NULL.
@@ -1107,9 +1120,15 @@
* @see java.sql.Statement#execute
* @exception SQLException thrown on failure.
*/
- public final boolean execute() throws SQLException {
- return executeStatement(activation, false, false);
- }
+ public final boolean execute() throws SQLException {
+ boolean ret=false;
+ try{
+ ret = executeStatement(activation, false, false);
+ } catch(SQLException sqle) {
+ checkStatementValidity(sqle);
+ }
+ return ret;
+ }
/**
* Set a parameter to a java.sql.Date value. The driver converts this
* to a SQL DATE value when it sends it to the database.
@@ -1433,7 +1452,49 @@
sourceType);
return se;
}
-
+ /*
+ * This method is used to initialize the BrokeredConnectionControl
+ * variable with its implementation. This method will be called in the
+ * BrokeredConnectionControl class
+ *
+ * @param control used to call the onStatementClose and
+ * onStatementErrorOccurred methods that have logic to
+ * raise StatementEvents for the close and error events
+ * on the PreparedStatement
+ *
+ */
+ public void setBrokeredConnectionControl(BrokeredConnectionControl control) {
+ bcc = control;
+ }
+
+ /*
+ * Method calls onStatementError occurred on the
+ * BrokeredConnectionControl class after checking the
+ * SQLState of the SQLException thrown.
+ */
+
+ private void checkStatementValidity(SQLException sqle) throws SQLException {
+ /*
+ * The subclass of SQLException thrown when the SQLState class value is
+ * '42'. This indicates that the in-progress query has violated SQL
+ * syntax rules.
+ *
+ * Check if the exception has occurred because the connection
+ * associated with the PreparedStatement has been closed
+ *
+ * This exception has the SQLState of 08003 which is represented
+ * by the constant SQLState.ERROR_CLOSE
+ */
+ if(bcc != null && (sqle.getSQLState().equals("08003")
+ || sqle.getSQLState().startsWith(SQLState.LSE_COMPILATION_PREFIX)) ) {
+ //call the BrokeredConnectionControl interface method
+ //onStatementErrorOccurred
+ bcc.onStatementErrorOccurred(this,sqle);
+ }
+ throw sqle;
+ }
+
+
//jdbc 4.0 methods
@@ -1518,5 +1579,4 @@
return isPoolable;
}
-
}
Modified: db/derby/code/trunk/java/engine/org/apache/derby/jdbc/EmbedPooledConnection.java
URL: http://svn.apache.org/viewcvs/db/derby/code/trunk/java/engine/org/apache/derby/jdbc/EmbedPooledConnection.java?rev=394788&r1=394787&r2=394788&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/jdbc/EmbedPooledConnection.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/jdbc/EmbedPooledConnection.java Mon Apr 17 15:18:21 2006
@@ -31,6 +31,8 @@
import org.apache.derby.iapi.jdbc.BrokeredConnection;
import org.apache.derby.iapi.jdbc.BrokeredConnectionControl;
import org.apache.derby.iapi.jdbc.EngineConnection;
+import org.apache.derby.impl.jdbc.EmbedPreparedStatement;
+import org.apache.derby.impl.jdbc.EmbedCallableStatement;
import java.sql.Connection;
@@ -88,7 +90,7 @@
*/
private final boolean requestPassword;
- private boolean isActive;
+ protected boolean isActive;
private synchronized int nextId()
{
@@ -428,16 +430,45 @@
return s;
}
/**
- No need to wrap statements for PooledConnections.
- */
+ * Call the setBrokeredConnectionControl method inside the
+ * EmbedPreparedStatement class to set the BrokeredConnectionControl
+ * variable to this instance of EmbedPooledConnection
+ * This will then be used to call the onStatementErrorOccurred
+ * and onStatementClose events when the corresponding events
+ * occur on the PreparedStatement
+ *
+ * @param ps PreparedStatment to be wrapped
+ * @param sql String
+ * @param generatedKeys Object
+ * @return returns the wrapped PreparedStatement
+ * @throws java.sql.SQLException
+ */
public PreparedStatement wrapStatement(PreparedStatement ps, String sql, Object generatedKeys) throws SQLException {
- return ps;
+ /*
+
+ */
+ EmbedPreparedStatement ps_ = (EmbedPreparedStatement)ps;
+ ps_.setBrokeredConnectionControl(this);
+ return (PreparedStatement)ps_;
}
- /**
- No need to wrap statements for PooledConnections.
- */
+
+ /**
+ * Call the setBrokeredConnectionControl method inside the
+ * EmbedCallableStatement class to set the BrokeredConnectionControl
+ * variable to this instance of EmbedPooledConnection
+ * This will then be used to call the onStatementErrorOccurred
+ * and onStatementClose events when the corresponding events
+ * occur on the CallableStatement
+ *
+ * @param cs CallableStatment to be wrapped
+ * @param sql String
+ * @return returns the wrapped CallableStatement
+ * @throws java.sql.SQLException
+ */
public CallableStatement wrapStatement(CallableStatement cs, String sql) throws SQLException {
- return cs;
+ EmbedCallableStatement cs_ = (EmbedCallableStatement)cs;
+ cs_.setBrokeredConnectionControl(this);
+ return (CallableStatement)cs_;
}
/**
@@ -468,5 +499,34 @@
return connString;
}
-
+
+ /*-----------------------------------------------------------------*/
+ /*
+ * These methods are from the BrokeredConnectionControl interface.
+ * These methods are needed to provide StatementEvent support for
+ * derby.
+ * They are actually implemented in EmbedPooledConnection40 but have
+ * a dummy implementation here so that the compilation wont fail when they
+ * are compiled with jdk1.4
+ */
+
+ /**
+ * Dummy implementation for the actual methods found in
+ * org.apache.derby.jdbc.EmbedPooledConnection40
+ * @param statement PreparedStatement
+ */
+ public void onStatementClose(PreparedStatement statement) {
+
+ }
+
+ /**
+ * Dummy implementation for the actual methods found in
+ * org.apache.derby.jdbc.EmbedPooledConnection40
+ * @param statement PreparedStatement
+ * @param sqle SQLException
+ */
+ public void onStatementErrorOccurred(PreparedStatement statement,
+ SQLException sqle) {
+
+ }
}
Modified: db/derby/code/trunk/java/engine/org/apache/derby/jdbc/EmbedPooledConnection40.java
URL: http://svn.apache.org/viewcvs/db/derby/code/trunk/java/engine/org/apache/derby/jdbc/EmbedPooledConnection40.java?rev=394788&r1=394787&r2=394788&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/jdbc/EmbedPooledConnection40.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/jdbc/EmbedPooledConnection40.java Mon Apr 17 15:18:21 2006
@@ -23,6 +23,10 @@
import java.sql.Connection;
import java.sql.SQLException;
+import java.util.Enumeration;
+import java.util.Vector;
+import java.sql.PreparedStatement;
+import javax.sql.StatementEvent;
import javax.sql.StatementEventListener;
/**
@@ -37,6 +41,11 @@
*/
class EmbedPooledConnection40 extends EmbedPooledConnection {
+
+ //using generics to avoid casting problems
+ protected final Vector<StatementEventListener> statementEventListeners =
+ new Vector<StatementEventListener>();
+
EmbedPooledConnection40 (ReferenceableDataSource ds, String user,
String password, boolean requestPassword) throws SQLException {
@@ -55,8 +64,9 @@
* @since 1.6
*/
public void removeStatementEventListener(StatementEventListener listener) {
- throw new UnsupportedOperationException (
- "addStatementEventListener(StatementEventListener listener)");
+ if (listener == null)
+ return;
+ statementEventListeners.removeElement(listener);
}
/**
@@ -75,7 +85,47 @@
* @since 1.6
*/
public void addStatementEventListener(StatementEventListener listener) {
- throw new UnsupportedOperationException (
- "addStatementEventListener(StatementEventListener listener)");
+ if (!isActive)
+ return;
+ if (listener == null)
+ return;
+ statementEventListeners.addElement(listener);
+ }
+
+ /**
+ * Raise the statementClosed event for all the listeners when the
+ * corresponding events occurs
+ * @param statement PreparedStatement
+ */
+ public void onStatementClose(PreparedStatement statement) {
+ if (!statementEventListeners.isEmpty()){
+ StatementEvent event = new StatementEvent(this,statement);
+ //synchronized block on statementEventListeners to make it thread
+ //safe
+ synchronized(statementEventListeners) {
+ for (StatementEventListener l : statementEventListeners) {
+ l.statementClosed(event);
+ }
+ }
+ }
+ }
+
+ /**
+ * Raise the statementErrorOccurred event for all the listeners when the
+ * corresponding events occurs
+ * @param statement PreparedStatement
+ * @param sqle SQLException
+ */
+ public void onStatementErrorOccurred(PreparedStatement statement,SQLException sqle) {
+ if (!statementEventListeners.isEmpty()){
+ StatementEvent event = new StatementEvent(this,statement,sqle);
+ //synchronized block on statementEventListeners to make it thread
+ //safe
+ synchronized(statementEventListeners) {
+ for (StatementEventListener l : statementEventListeners){
+ l.statementErrorOccurred(event);
+ }
+ }
+ }
}
}
Modified: db/derby/code/trunk/java/engine/org/apache/derby/jdbc/EmbedXAConnection.java
URL: http://svn.apache.org/viewcvs/db/derby/code/trunk/java/engine/org/apache/derby/jdbc/EmbedXAConnection.java?rev=394788&r1=394787&r2=394788&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/jdbc/EmbedXAConnection.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/jdbc/EmbedXAConnection.java Mon Apr 17 15:18:21 2006
@@ -165,6 +165,7 @@
Wrap and control a PreparedStatement
*/
public PreparedStatement wrapStatement(PreparedStatement ps, String sql, Object generatedKeys) throws SQLException {
+ ps = super.wrapStatement(ps,sql,generatedKeys);
XAStatementControl sc = new XAStatementControl(this, ps, sql, generatedKeys);
return (PreparedStatement) sc.applicationStatement;
}
@@ -172,6 +173,7 @@
Wrap and control a PreparedStatement
*/
public CallableStatement wrapStatement(CallableStatement cs, String sql) throws SQLException {
+ cs = super.wrapStatement(cs,sql);
XAStatementControl sc = new XAStatementControl(this, cs, sql);
return (CallableStatement) sc.applicationStatement;
}
Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/DerbyNetClient.exclude
URL: http://svn.apache.org/viewcvs/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/DerbyNetClient.exclude?rev=394788&r1=394787&r2=394788&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/DerbyNetClient.exclude (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/DerbyNetClient.exclude Mon Apr 17 15:18:21 2006
@@ -36,4 +36,6 @@
#failing (hanging?) on jdk 1.5/jdk 1.6
jdbcapi/checkDataSource.java
jdbcapi/checkDataSource30.java
-
+#exclude the statement events test until the feature is added on the
+#client side
+jdbc4/StatementEventsTest.junit
Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/jdbc40.runall
URL: http://svn.apache.org/viewcvs/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/jdbc40.runall?rev=394788&r1=394787&r2=394788&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/jdbc40.runall (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/jdbc40.runall Mon Apr 17 15:18:21 2006
@@ -4,6 +4,7 @@
jdbc4/TestQueryObject.java
jdbc4/TestDbMetaData.java
jdbc4/TestJDBC40Exception.java
+jdbc4/StatementEventsTest.junit
jdbc4/CallableStatementTest.junit
jdbc4/RowIdNotImplementedTest.junit
jdbc4/StatementTest.junit
Added: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbc4/StatementEventsTest.java
URL: http://svn.apache.org/viewcvs/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbc4/StatementEventsTest.java?rev=394788&view=auto
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbc4/StatementEventsTest.java (added)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbc4/StatementEventsTest.java Mon Apr 17 15:18:21 2006
@@ -0,0 +1,180 @@
+/*
+
+ Derby - Class org.apache.derbyTesting.functionTests.tests.jdbc4.StatementEventsTest
+
+ Copyright 2006 The Apache Software Foundation or its licensors, as 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.derbyTesting.functionTests.tests.jdbc4;
+
+import java.sql.*;
+import javax.sql.*;
+import junit.framework.*;
+
+import org.apache.derbyTesting.functionTests.util.BaseJDBCTestCase;
+
+/*
+ This class is used to test the JDBC4 statement event
+ support
+*/
+public class StatementEventsTest extends BaseJDBCTestCase
+ implements StatementEventListener {
+
+ PooledConnection pooledConnection;
+ Connection conn;
+ PreparedStatement ps_close;
+ PreparedStatement ps_error;
+ boolean statementCloseEventOccurred=false;
+ boolean statementErrorEventOccurred=false;
+
+
+ /**
+ * Create a test with the given name.
+ *
+ * @param name name of the test.
+ */
+ public StatementEventsTest(String name) {
+ super(name);
+ }
+
+ /**
+ *
+ * get a connection object from which the PreparedStatement objects
+ * that will be used to raise the events will be created
+ *
+ */
+ public void setUp() throws SQLException {
+ ConnectionPoolDataSource cpds = getConnectionPoolDataSource();
+ pooledConnection = cpds.getPooledConnection();
+ //register this class as a event listener for the
+ //statement events
+ pooledConnection.addStatementEventListener(this);
+
+ //Get a connection from the PooledConnection object
+ conn = pooledConnection.getConnection();
+ }
+
+ /**
+ *
+ * Close the PooledConnection object and the connection and the
+ * statements obtained from it.
+ *
+ */
+
+ public void tearDown() throws SQLException {
+ if(ps_close != null && !ps_close.isClosed()) {
+ ps_close.close();
+ }
+ if(ps_error != null && !ps_error.isClosed()) {
+ ps_error.close();
+ }
+ if(conn != null && !conn.isClosed()) {
+ conn.rollback();
+ conn.close();
+ }
+ if(pooledConnection != null)
+ pooledConnection.close();
+ }
+
+ /*
+ The method closes a created Prepared Statement
+ to raise a closed event
+ */
+ void raiseCloseEvent() {
+ try {
+ ps_close = conn.prepareStatement("create table temp(n int)");
+
+ //call the close method on this prepared statement object
+ //this should result in a statement event being generated
+ //control is transferred to the sattementCLosed function
+ ps_close.close();
+ } catch(SQLException e) {
+ e.printStackTrace();
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ }
+ }
+
+ /*
+ This method closes a connection and then tries to close the prepared
+ statement associated with the connection causing an error
+ event
+ */
+ void raiseErrorEvent() {
+ try {
+ ps_error = conn.prepareStatement("create table temp(n int)");
+
+ //close the connection associated with this prepared statement
+ conn.close();
+ //Now execute the prepared statement this should cause an error
+ ps_error.execute();
+
+ } catch(SQLException e) {
+ /*
+ Throw an exception only if the exception does not have a
+ state of 08003 which is the state of the SqlException
+ got when the connection associated with the PreparedStatement
+ is closed before doing a execute on the PreparedStatement
+ */
+ if(!(e.getSQLState().compareTo("08003") == 0)) {
+ e.printStackTrace();
+ }
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ }
+ }
+
+ /*
+ implementations of methods in interface
+ javax.sql.StatementEventListener
+ */
+
+ public void statementClosed(StatementEvent event) {
+ statementCloseEventOccurred = true;
+ if(ps_close==null || !event.getStatement().equals(ps_close)) {
+ System.out.println("The statement event has the wrong reference + of PreparedStatement");
+ }
+ }
+
+ public void statementErrorOccurred(StatementEvent event) {
+ statementErrorEventOccurred = true;
+ if(ps_error==null || !event.getStatement().equals(ps_error)) {
+ System.out.println("The statement event has the wrong reference + of PreparedStatement");
+ }
+ }
+
+ /*
+ Check to see if the events were properly raised during execution
+ */
+ public void testIfEventOccurred() {
+ raiseCloseEvent();
+ raiseErrorEvent();
+ if(statementCloseEventOccurred != true) {
+ System.out.println("The Close Event did not occur");
+ }
+ if(statementErrorEventOccurred != true) {
+ System.out.println("The Error Event did not occur");
+ }
+ }
+
+ /**
+ * Return suite with all tests of the class.
+ */
+ public static Test suite() {
+ return (new TestSuite(StatementEventsTest.class,
+ "StatementEventsTest suite"));
+ }
+}
Propchange: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbc4/StatementEventsTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/util/SQLStateConstants.java
URL: http://svn.apache.org/viewcvs/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/util/SQLStateConstants.java?rev=394788&r1=394787&r2=394788&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/util/SQLStateConstants.java (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/util/SQLStateConstants.java Mon Apr 17 15:18:21 2006
@@ -339,5 +339,5 @@
//The SQLState of the SQLExcepion thrown when a class for which
//isWrapperFor returns false is passed as a parameter to the
//unwrap method.
- public static final String UNABLE_TO_UNWRAP = "XJ120";
+ public static final String UNABLE_TO_UNWRAP = "XJ128";
}
Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/util/TestUtil.java
URL: http://svn.apache.org/viewcvs/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/util/TestUtil.java?rev=394788&r1=394787&r2=394788&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/util/TestUtil.java (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/util/TestUtil.java Mon Apr 17 15:18:21 2006
@@ -307,16 +307,7 @@
if(HAVE_DRIVER_CLASS)
{
classname = getDataSourcePrefix() + REGULAR_DATASOURCE_STRING + "DataSource";
- // The JDBC 4.0 implementation of the DataSource interface
- // is suffixed with "40". Use it if it is available and
- // the JVM version is at least 1.6.
- if (JVMInfo.JDK_ID >= JVMInfo.J2SE_16) {
- String classname40 = classname + "40";
- try {
- Class.forName(classname40);
- classname = classname40;
- } catch (ClassNotFoundException e) {}
- }
+ classname = checkForJDBC40Implementation(classname);
return (javax.sql.DataSource) getDataSourceWithReflection(classname, attrs);
}
else
@@ -357,8 +348,32 @@
public static javax.sql.ConnectionPoolDataSource getConnectionPoolDataSource(Properties attrs)
{
String classname = getDataSourcePrefix() + CONNECTION_POOL_DATASOURCE_STRING + "DataSource";
+ classname = checkForJDBC40Implementation(classname);
return (javax.sql.ConnectionPoolDataSource) getDataSourceWithReflection(classname, attrs);
}
+
+ /**
+ * returns the class name for the JDBC40 implementation
+ * if present. otherwise returns the class name of the class
+ * written for the lower jdk versions
+ * @param classname String
+ * @return String containing the name of the appropriate
+ * implementation
+ */
+ public static String checkForJDBC40Implementation(String classname) {
+ String classname_ = classname;
+ // The JDBC 4.0 implementation of the
+ // interface is suffixed with "40". Use it if it is available
+ // and the JVM version is at least 1.6.
+ if (JVMInfo.JDK_ID >= JVMInfo.J2SE_16) {
+ String classname40 = classname_ + "40";
+ try {
+ Class.forName(classname40);
+ classname_ = classname40;
+ } catch (ClassNotFoundException e) {}
+ }
+ return classname_;
+ }
public static String getDataSourcePrefix()
{