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