|
yes, yes, I understand about the connection, BUT what about
the CURSOR! Why isn't the CURSOR being released?
----- Original Message -----
Sent: Wednesday, August 01, 2001 9:29
AM
Subject: Re: Why won't my JSP page bean
release Oracle cursor?
The
reason is that you are using connection pooling so the actually connection
doesn't released immediadely after the rs.close() or even the
connection.close(). The actually connection remains active for Oracle in case
for somebody else requests a connection.
When I run the jsp page below, and then look at the Oracle cursor
count with:
select * form v$sysstat where name='opened
cursors current'
I see the cursor count jump, and linger long after
the page has finished loading. Eventually the count drops, BUT I would
like to know WHY the cursor count does not drop immediately after giving
the rs.close and stmt.close ???
I am using orion server with
connection pooling, and oracle 8.1.6....
<%@ page language="java" import="java.sql.*"
%> <jsp:useBean id="MACHINE" class="m"
scope="page"/> <jsp:setProperty name="MACHINE"
property="*"/> <% MACHINE.fetchMachines();
%>
<html> <body>
<TABLE> <TR> <TD>CODE</TD> <TD>NAME</TD> <TD>GROUP_ID</TD> </TR> <%
while (MACHINE.fetchRow()){ %> <TR> <TD><a
href="displayFormMACHINE.jsp?CODE=<%=MACHINE.getCODE()%>">
<%=MACHINE.getCODE()%></a></TD> <TD>
<%=MACHINE.getNAME()%></TD> <TD>
<%=MACHINE.getGROUP_ID()%></TD> </TR> <%
}; %> </TABLE> </BODY> </HTML> <@
include file="bot.html";
%>
======================================================== ========================================================
import
java.util.*; import java.sql.*;
public class m extends sqlForm
{
private Statement stmt=null; private ResultSet rs; private
String CODE=""; private String NAME=""; private String
GROUP_ID="";
public void cleanup() throws Exception { takeDown()
};
public m() throws Exception { makeConnection();
rs=null; CODE=""; NAME=""; GROUP_ID=""; }
public
String
getCODE() { return
CODE; }
public String
getNAME() { return
NAME; }
public String
getGROUP_ID() { return
GROUP_ID; }
public void setCODE(
String CODE_set) { if
(CODE_set == null) CODE=""; else
CODE=CODE_set.trim(); }
public void
setNAME( String
NAME_set) { if (NAME_set
== null) NAME=""; else
NAME=NAME_set.trim(); }
public void
setGROUP_ID( String
GROUP_ID_set) { if
(GROUP_ID_set == null) GROUP_ID=""; else
GROUP_ID=GROUP_ID_set.trim(); }
public
int fetchMachines() throws
Exception { stmt =
myConn.createStatement(); rs=stmt.executeQuery( "SELECT * FROM MACHINE
ORDER BY CODE"); return 0;};
public boolean
fetchRow() throws Exception { if (rs.next())
{ setCODE( (String) rs.getString("CODE")); setNAME( (String)
rs.getString("NAME")); setGROUP_ID( (String)
rs.getString("GROUP_ID")); rs.close(); stmt.close(); takeDown(); } return
false; }
};
======================================================== ========================================================
import
java.sql.*; import java.io.*; import javax.sql.DataSource; import
javax.naming.InitialContext;
public abstract class
sqlForm { private String myDriver =
"oracle.jdbc.driver.OracleDriver";
protected Connection
myConn; public sqlForm() {}
public void
makeConnection() throws
Exception { InitialContext ctx = new
InitialContext(); DataSource ds = (DataSource)
ctx.lookup("jdbc/ccfopDS"); myConn =
ds.getConnection(); System.out.println("Connection
made:-->ccfop " + myConn); }
public abstract void
cleanup() throws Exception;
public void
takeDown() throws
Exception { System.out.println("DB connection
closed"); myConn.close(); } }
|