You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ojb-dev@db.apache.org by ar...@apache.org on 2003/11/27 13:06:58 UTC
cvs commit: db-ojb/src/java/org/apache/ojb/broker/accesslayer ResultSetAndStatement.java JdbcAccessImpl.java
arminw 2003/11/27 04:06:58
Modified: src/java/org/apache/ojb/broker/accesslayer
ResultSetAndStatement.java JdbcAccessImpl.java
Log:
be more strict of Statement and ResultSet handling
in ResultSetAndStatement class.
declare Statement/ResultField final to avoid
re-setting of these fields (could cause resource leaking)
Revision Changes Path
1.7 +42 -17 db-ojb/src/java/org/apache/ojb/broker/accesslayer/ResultSetAndStatement.java
Index: ResultSetAndStatement.java
===================================================================
RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/accesslayer/ResultSetAndStatement.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- ResultSetAndStatement.java 13 May 2003 07:56:24 -0000 1.6
+++ ResultSetAndStatement.java 27 Nov 2003 12:06:58 -0000 1.7
@@ -64,19 +64,29 @@
import java.sql.SQLException;
/**
+ * Intern used wrapper for {@link Statement} and {@link ResultSet} instances.
+ *
* @version $Id$
*/
public class ResultSetAndStatement
{
private static Logger log = LoggerFactory.getLogger(ResultSetAndStatement.class);
- private Platform m_platform = null;
- public ResultSet m_rs = null;
- public Statement m_stmt = null;
+ private final Platform m_platform;
+ private boolean isClosed;
+ /*
+ arminw: declare final to avoid stmt/rs leaking in use
+ by re-setting these fields.
+ */
+ public final ResultSet m_rs;
+ public final Statement m_stmt;
- public ResultSetAndStatement(Platform platform)
+ public ResultSetAndStatement(Platform platform, Statement stmt, ResultSet rs)
{
m_platform = platform;
+ m_stmt = stmt;
+ m_rs = rs;
+ isClosed = false;
}
/**
@@ -84,23 +94,38 @@
*/
public void close()
{
- try
+ if(isClosed) return;
+
+ try
{
- m_platform.beforeStatementClose(m_stmt, m_rs);
- //close statement on wrapped statement class, or real statement
- if (m_stmt != null)
- {
- m_stmt.close();
- }
- m_platform.afterStatementClose(m_stmt, m_rs);
+ // this will close the result set
+ m_platform.beforeStatementClose(m_stmt, m_rs);
}
catch (PlatformException e)
{
log.error("Platform dependent operation failed", e);
}
- catch (SQLException ignored)
- {
- if (log.isDebugEnabled()) log.debug("Statement closing failed", ignored);
- }
+ // we want to close the statement in any case
+ finally
+ {
+ try
+ {
+ isClosed = true;
+ //close statement on wrapped statement class, or real statement
+ if (m_stmt != null)
+ {
+ m_stmt.close();
+ }
+ m_platform.afterStatementClose(m_stmt, m_rs);
+ }
+ catch (SQLException ignored)
+ {
+ if (log.isDebugEnabled()) log.debug("Statement closing failed", ignored);
+ }
+ catch (PlatformException e)
+ {
+ log.error("Platform dependent operation failed", e);
+ }
+ }
}
}
1.14 +8 -10 db-ojb/src/java/org/apache/ojb/broker/accesslayer/JdbcAccessImpl.java
Index: JdbcAccessImpl.java
===================================================================
RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/accesslayer/JdbcAccessImpl.java,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- JdbcAccessImpl.java 16 Nov 2003 20:32:41 -0000 1.13
+++ JdbcAccessImpl.java 27 Nov 2003 12:06:58 -0000 1.14
@@ -279,8 +279,6 @@
{
if (logger.isDebugEnabled())
logger.safeDebug("executeQuery", query);
-
- ResultSetAndStatement retval = new ResultSetAndStatement(broker.serviceConnectionManager().getSupportedPlatform());
/*
* MBAIRD: we should create a scrollable resultset if the start at
* index or end at index is set
@@ -293,7 +291,7 @@
{
scrollable = true;
}
-
+ ResultSetAndStatement retval = null;
try
{
String sql = broker.serviceSqlGenerator().getPreparedSelectStatement(query, cld);
@@ -304,8 +302,9 @@
logger.debug("executeQuery: " + stmt);
ResultSet rs = stmt.executeQuery();
- retval.m_rs = rs;
- retval.m_stmt = stmt;
+
+ retval = new ResultSetAndStatement(
+ broker.serviceConnectionManager().getSupportedPlatform(), stmt, rs);
return retval;
}
catch (PersistenceBrokerException e)
@@ -366,8 +365,7 @@
if (logger.isDebugEnabled())
logger.debug("executeSQL: " + sqlStatement);
- ResultSetAndStatement retval =
- new ResultSetAndStatement(broker.serviceConnectionManager().getSupportedPlatform());
+ ResultSetAndStatement retval = null;
StatementManagerIF stmtMan = broker.serviceStatementManager();
try
{
@@ -376,8 +374,8 @@
ResultSet rs = stmt.executeQuery();
// as we return the resultset for further operations, we cannot release the statement yet.
// that has to be done by the JdbcAccess-clients (i.e. RsIterator, ProxyRsIterator and PkEnumeration.)
- retval.m_rs = rs;
- retval.m_stmt = stmt;
+ retval = new ResultSetAndStatement(
+ broker.serviceConnectionManager().getSupportedPlatform(), stmt, rs);
return retval;
}
catch (PersistenceBrokerException e)
---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org