You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@xalan.apache.org by bu...@apache.org on 2002/03/15 10:13:43 UTC
DO NOT REPLY [Bug 7145] New: -
sql lib: empty query result cause exception and leave db connection open
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=7145>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND
INSERTED IN THE BUG DATABASE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=7145
sql lib: empty query result cause exception and leave db connection open
Summary: sql lib: empty query result cause exception and leave db
connection open
Product: XalanJ2
Version: CurrentCVS
Platform: Other
OS/Version: Other
Status: NEW
Severity: Normal
Priority: Other
Component: org.apache.xalan.lib.sql
AssignedTo: xalan-dev@xml.apache.org
ReportedBy: klemens.hemm@empolis.com
1. sql queries that produce zero output rows causes a null pointer exception if
streaming mode is active.
2. a subsequent error: the database connection isn't closed if the bug above
occurs, resulting in many open hanging database connections. It's a problem of
its own, since other bugs also can cause hanging connections.
bug 1:
around line 683 in SQLDocument.java the member variable m_LastRowIdx = -1 and
the setElementAt throws a null pointer exception if the query has produced no
result rows
if (m_StreamingMode)
{
// We are at the end, so let's untie the mark
m_nextsib.setElementAt(DTM.NULL, m_LastRowIdx);
}
I tried the following fix and it worked, but I`m not quite sure whether this is
the correct fix
if (m_StreamingMode && (m_LastRowIdx!=-1))
bug 2:
in the method 'query' in XConnection.java (around line 700) the following code
fragment doesn't close the connection for the null pointer exception above
catch (Exception e)
{
if ((doc != null) && (mgrDefault != null))
{
doc.closeOnError();
mgrDefault.release(doc, true);
}
if (DEBUG) System.out.println("exception in query()");
buildErrorDocument(exprContext, e);
return null;
}
I added an additional
try {
if (null != con) m_ConnectionPool.releaseConnectionOnError(con);
} catch(Exception e1) { }
that solved the problem of open hanging connections.
Even if bug 1 does not occur, maybe other errors cause bug 2 to occur, resulting
in hanging connections
Klemens