OracleConnection underlyingConn after Close(); do not work
oleg1962 Mar 21, 2007 6:08 AMGood afternoon!
Prompt please, why after conn.close (); and the subsequent conn = getConnection (); I receive an error
ERROR [STDERR] java.sql.SQLException: closed connection
ERROR [STDERR] at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
ERROR [STDERR] at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
ERROR [STDERR] at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:269)
ERROR [STDERR] at oracle.jdbc.driver.OracleConnection.privatePrepareStatement(OracleConnection.java:895)
ERROR [STDERR] at oracle.jdbc.driver.OracleConnection.prepareStatement(OracleConnection.java:802)
ERROR [STDERR] at com.titan.processpayment.ProcessPaymentBean.SelectJGeom(ProcessPaymentBean.java:64)
ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
Also I can work further only after reboot JBoss
public class ProcessPaymentBean implements javax.ejb.SessionBean
............................
conn = getConnection ();
pstmt = conn.prepareStatement("select MKT_ID, NAME, SHAPE from MDSYS.cola_markets");
rs = pstmt.executeQuery();
pstmt2 = conn.prepareStatement("insert into MDSYS.cola_markets2 (MKT_ID, NAME, SHAPE) values (?, ?, ?)");
while (rs.next()) {
state = rs.getString(1);
stateAbrv = rs.getString(2);
st = (STRUCT) rs.getObject("SHAPE");
geom = JGeometry.load(st);
pstmt2.setString(1, state);
pstmt2.setString(2, stateAbrv);
st2 = JGeometry.store(geom, conn);
pstmt2.setObject(3, st2);
pstmt2.executeUpdate();
}
.....
conn.close();
.....
conn = getConnection ();
//I receive the message on an error
//Also I can work further only after reboot JBoss
private Connection getConnection() throws SQLException {
//http://forums.oracle.com/forums/thread.jspa?threadID=279238
try {
DataSource myJBossDatasource = (DataSource) context.lookup("java:OracleDS");
java.sql.Connection conn = myJBossDatasource.getConnection();
WrappedConnection wrappedConn = (WrappedConnection)conn;
java.sql.Connection underlyingConn = wrappedConn.getUnderlyingConnection();
oracle.jdbc.driver.OracleConnection oracleConn =
(oracle.jdbc.driver.OracleConnection)underlyingConn;
return oracleConn;
}
catch (SQLException ex) {
throw new EJBException(ex);
}
}
<enterprise-beans> <session> <description>A service that handles monetary payments</description> <display-name>ProcessPaymentEJB</display-name> <ejb-name>ProcessPaymentEJB</ejb-name> <home>com.titan.processpayment.ProcessPaymentHomeRemote</home> <remote>com.titan.processpayment.ProcessPaymentRemote</remote> <ejb-class>com.titan.processpayment.ProcessPaymentBean</ejb-class> <session-type>Stateless</session-type> <transaction-type>Container</transaction-type> <env-entry> <env-entry-name>minCheckNumber</env-entry-name> <env-entry-type>java.lang.Integer</env-entry-type> <env-entry-value>2000</env-entry-value> </env-entry> <resource-ref> <description>DataSource for the Titan database</description> <res-ref-name>jdbc/titanDB</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref> </session> </enterprise-beans>
For earlier it is grateful for the help