You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@geronimo.apache.org by "Donald Woods (JIRA)" <de...@geronimo.apache.org> on 2006/09/06 20:11:23 UTC
[jira] Resolved: (GERONIMO-2361) Unclosed statement in Daytrader
[ http://issues.apache.org/jira/browse/GERONIMO-2361?page=all ]
Donald Woods resolved GERONIMO-2361.
------------------------------------
Fix Version/s: 1.1.1
1.1
Resolution: Duplicate
Opened Daytrader-12 and attached a patch for this problem.
http://issues.apache.org/jira/browse/DAYTRADER-12
> Unclosed statement in Daytrader
> -------------------------------
>
> Key: GERONIMO-2361
> URL: http://issues.apache.org/jira/browse/GERONIMO-2361
> Project: Geronimo
> Issue Type: Bug
> Security Level: public(Regular issues)
> Components: sample apps
> Affects Versions: 1.1
> Reporter: Yunfeng Ma
> Fix For: 1.1.1, 1.1
>
> Attachments: XMLSpyDesktopUnicode_EB16AC9AAE034CE9803335B4A1C382D6.exe
>
>
> There is a PreparedStatement which is not closed properly in Daytrader. This unclosed statement will cause memory leak and database problem during stress testing.
> Let's have a look at class org.apache.geronimo.samples.daytrader.direct.TradeDirect
> public AccountDataBean login(String userID, String password)
> throws Exception {
> AccountDataBean accountData = null;
> Connection conn=null;
> try
> {
> if (Log.doTrace()) Log.trace("TradeDirect:login", userID, password);
>
> conn = getConn();
> PreparedStatement stmt = getStatement(conn, getAccountProfileSQL);
> stmt.setString(1, userID);
> ResultSet rs = stmt.executeQuery();
> if ( !rs.next() )
> {
> Log.error("TradeDirect:login -- failure to find account for" + userID);
> throw new javax.ejb.FinderException("Cannot find account for" + userID);
> }
>
> String pw = rs.getString("password");
> stmt.close();
> if ( (pw==null) || (pw.equals(password) == false) )
> {
> String error = "TradeDirect:Login failure for user: " + userID +
> "\n\tIncorrect password-->" + userID + ":" + password;
> Log.error(error);
> throw new Exception(error);
> }
> ===================== Create a new PreparedStatement here =================
> stmt = getStatement(conn, loginSQL);
> stmt.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
> stmt.setString(2, userID);
> int rows = stmt.executeUpdate();
> //?assert rows==1?
> ===================== stmt should be closed here ==========================
>
> stmt = getStatement(conn, getAccountForUserSQL);
> stmt.setString(1, userID);
> rs = stmt.executeQuery();
> accountData = getAccountDataFromResultSet(rs);
>
> stmt.close();
>
> commit(conn);
> }
> catch (Exception e)
> {
> Log.error("TradeDirect:login -- error logging in user", e);
> rollBack(conn, e);
> }
> finally
> {
> releaseConn(conn);
> }
> return accountData;
> }
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira