Re: [enhydra] database connection problem

"Michael Strapp" <[email protected]> Mon, 18 Apr 2005 16:59:29 -0400
Newsgroups gmane.comp.java.enhydra.general
Message-ID <001f01c54459$845d91f0$3401a8c0@Mike>
Hi Thomas,
    It definitely looks like there's a bug in the JDBC driver - calling the 
isClosed() method really shouldn't ever affect the connection, but it looks 
like it might be closing or even corrupting the connection itself when you 
call it as a first step (and who knows, it might also cause problems under 
other conditions).
    The most direct solution would be to talk to the author(s) of the JDBC 
driver, supply them with the test code that demostrates the problem, and see 
if you can get them to fix the bug within a reasonable timeframe.  Barring 
that, you might be able to patch Enhdyra itself in order to get around the 
problem, but I'm not sure which classes use the isClosed() method in 
situations where your driver would error out.  You'd have to get a copy of 
the DODS source code for the version of DODS you're using, and start 
patching classes - if you're lucky, you might be able to get away with 
patching only the 
com.lutris.appserver.server.sql.standard.StandardConnectionAllocator class 
(which is where I found that 'Inactiv connection closed' message). 
Alternatively, if you're running on Windows and have an ODBC driver for the 
SapDB, you could try using the JDBC-ODBC driver that comes with the Java 2 
SDK as a temporary solution.

Regards,
Mike.
----- Original Message ----- 
From: "Thomas Schwarzpaul" <[email protected]>
To: <[email protected]>
Sent: Friday, April 15, 2005 3:15 AM
Subject: Re: [enhydra] database connection problem


Hi Mike,

yes, i can successfully perform SQL queries. Here's the code:

Class.forName("com.sap.dbtech.jdbc.DriverSapDB");
String url = "jdbc:sapdb://pchrz-trinity/HRZSHOP";
Connection con = DriverManager.getConnection(url, user, password);
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT COUNT(*) ANZAHL FROM BENUTZER");
while (rs.next()) {
int anzahl = rs.getInt("ANZAHL");
java.lang.System.out.println("*** ANZAHL: " + anzahl + " ***");
}
System.out.println(con.isClosed());

But, when first check the connection, like this:

Class.forName("com.sap.dbtech.jdbc.DriverSapDB");
String url = "jdbc:sapdb://pchrz-trinity/HRZSHOP";
Connection con = DriverManager.getConnection(url, user, password);
System.out.println(con.isClosed());
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT COUNT(*) ANZAHL FROM BENUTZER");
while (rs.next()) {
int anzahl = rs.getInt("ANZAHL");
java.lang.System.out.println("*** ANZAHL: " + anzahl + " ***");
}

an exception is thrown.

com.sap.dbtech.jdbc.exceptions.ObjectIsClosedException: SAP DBTech JDBC:
Object is closed.
        at
com.sap.dbtech.jdbc.ConnectionSapDB.assertOpen(ConnectionSapDB.java:106)
        at
com.sap.dbtech.jdbc.ConnectionSapDB.createStatement(ConnectionSapDB.java:192)

seems to be a driver problem.

Thomas


yes, i can successfully perform SQL queries, when I check
Am Donnerstag, 14. April 2005 20:37 schrieben Sie:
> Hi Thomas,
>     It definitely looks like something's going wrong in the driver - the
> connection should not be returning true from isClosed() unless the
> connection isn't open.  Are you sure that the connection is actually open?
> Most drivers throw an exception if the connect attempt fails, but maybe
> that particular driver isn't doing that in some cases (it could be that 
> the
> connection is getting opened and then getting immediately closed).  Can 
> you
> actually perform SQL queries in your test code, even though the Connection
> object is returning true from isClosed()?  I expect you it would get an
> error of some kind, one that might give a clue to the cause of the 
> problem.
>
> Mike.
>
> ----- Original Message -----
> From: "Thomas Schwarzpaul" <[email protected]>
> To: <[email protected]>
> Sent: Thursday, April 14, 2005 5:19 AM
> Subject: Re: [enhydra] database connection problem
>
>
> Hi Mike,
>
> thanks for your answer.
>
> >     What does the Connection object returned from your JDBC driver 
> > return
> > from the isClosed() method?
>
> The Connection object returns "true".
>
> > From a quick glance at the DODS source, the
> > "Inactiv connection closed due allocate() operation. Geting new one."
> > debug
> > message only appears if an existing connection returns true from
> > isClosed() - which is intended to detect a connection that the database
> > has
> > closed (e.g. due to a maximum idle time enforced for a connection).
>
> Didn't think about that.
>
> > Since
> > you're presumably getting this all the time, and I don't recognize your
> > JDBC driver, so I'm wondering if the driver hasn't implemented the
> > isClosed() method properly, and might be unconditionally returning true
> > from the isClosed() method.
>
> I'm using SAPDB with their latest version of the JDBC driver.
>
> Best regards,
> Thomas
>
>
>
>
>
>
>
>
> ---------------------------------------------------------------------------
>-----
>
> > --
> > You receive this message as a subscriber of the [email protected]
> > mailing list.
> > To unsubscribe: mailto:[email protected]
> > For general help: mailto:[email protected]?subject=help
> > ObjectWeb mailing lists service home page: http://www.objectweb.org/wws




--------------------------------------------------------------------------------


>
> --
> You receive this message as a subscriber of the [email protected] 
> mailing list.
> To unsubscribe: mailto:[email protected]
> For general help: mailto:[email protected]?subject=help
> ObjectWeb mailing lists service home page: http://www.objectweb.org/wws
>
message.footer (text/plain, 275 B)
--
You receive this message as a subscriber of the [email protected] mailing list.
To unsubscribe: mailto:[email protected]
For general help: mailto:[email protected]?subject=help
ObjectWeb mailing lists service home page: http://www.objectweb.org/wws