db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Kathey Marsden (JIRA)" <j...@apache.org>
Subject [jira] Created: (DERBY-4664) Change Derby internal stored procedures to avoid DriverManager.getConnection("jdbc:default:connection") as it may be recognized by other Drivers
Date Tue, 18 May 2010 23:56:56 GMT
Change Derby internal stored procedures to avoid DriverManager.getConnection("jdbc:default:connection")
as it may be recognized by other Drivers

                 Key: DERBY-4664
                 URL: https://issues.apache.org/jira/browse/DERBY-4664
             Project: Derby
          Issue Type: Bug
    Affects Versions:,,,,,
            Reporter: Kathey Marsden
             Fix For:,,,

Some Derby internal Stored procedures and functions call DriverManager.getConnection("jdbc:default:connection");
and this url can be recognized by another Driver in the same classpath that is used for server
side JDBC for another product. For example the below occurred in NetworkServer when JCC was
also loaded because the JCC Type 2 driver is used for server side JDBC:

db2jcct2 (Not found in java.library.path):  ERRORCODE=-4472, SQLSTATE=null
        at com.ibm.db2.jcc.b.bd.a(bd.java:660)
        at com.ibm.db2.jcc.b.bd.a(bd.java:60)
        at com.ibm.db2.jcc.b.bd.a(bd.java:94)
        at com.ibm.db2.jcc.t2.a.a(a.java:37)
        at com.ibm.db2.jcc.t2.T2Configuration.<clinit>(T2Configuration.java:94)
        at java.lang.J9VMInternals.initializeImpl(Native Method)
        at java.lang.J9VMInternals.initialize(J9VMInternals.java:196)
        at com.ibm.db2.jcc.DB2Driver.connect(DB2Driver.java:211)
        at java.sql.DriverManager.getConnection(DriverManager.java:572)
        at java.sql.DriverManager.getConnection(DriverManager.java:218)
        at org.apache.derby.impl.jdbc.LOBStoredProcedure.getEmbedConnection(Unknown Source)
        at org.apache.derby.impl.jdbc.LOBStoredProcedure.getClobObjectCorrespondingtoLOCATOR(Unknown
        at org.apache.derby.impl.jdbc.LOBStoredProcedure.CLOBGETLENGTH(Unknown Source)
        at org.apache.derby.exe.acf81e0010x0128x864dxbe82x00004c9b380d12.e0(Unknown Source)
        at org.apache.derby.impl.services.reflect.DirectCall.invoke(Unknown Source)
        at org.apache.derby.impl.sql.execute.RowResultSet.getNextRowCore(Unknown Source)
        at org.apache.derby.impl.sql.execute.BasicNoPutResultSetImpl.getNextRow(Unknown Source)
        at org.apache.derby.impl.jdbc.EmbedResultSet.movePosition(Unknown Source)
        at org.apache.derby.impl.jdbc.EmbedResultSet.next(Unknown Source)
        at org.apache.derby.impl.jdbc.EmbedCallableStatement.executeStatement(Unknown Source)
        at org.apache.derby.impl.jdbc.EmbedPreparedStatement.execute(Unknown Source)
        at org.apache.derby.impl.drda.DRDAStatement.execute(Unknown Source)
        at org.apache.derby.impl.drda.DRDAConnThread.parseEXCSQLSTTobjects(Unknown Source)
        at org.apache.derby.impl.drda.DRDAConnThread.parseEXCSQLSTT(Unknown Source)
        at org.apache.derby.impl.drda.DRDAConnThread.processCommands(Unknown Source)
        at org.apache.derby.impl.drda.DRDAConnThread.run(Unknown Source)

I think we can avoid this specific error by changing LobStoredProcedure (and perhaps other
internal procedures)  to  use the code in  SystemProcedures.getDefaultConn() which always
connects to Derby by using = InternalDriver.activeDriver()

This of course will not solve the general problem for any user created procedure or function
that performs SQL.  I am not sure if there is a good solution for that.  I asked the JCC Driver
team to see if there is a way they can determine if they are running inside the DB2 process
or not. but regardless of these product workarounds I think the basic problem is design flaw
in the specification.  DriverManager cannot differentiate the URL if all database products
use the same one for server side JDBC.

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

View raw message