I change my Bean as following:
package hello;
import java.sql.*;
import java.util.*;
import javax.ejb.*;
import javax.naming.*;
import javax.sql.*;
/**
*
Title:
*
Description:
*
Copyright: Copyright (c) 2002
*
Company:
* @author unascribed
* @version 1.0
*/
public class StateSession1Bean implements SessionBean {
private
String dbName = "java:comp/env/jdbc/MyOracle";
private SessionContext sessionContext;
private DataSource ds ;
public void addrecord(String id, String firstname, String lastname) {
try {
insertEntry(ds,id, firstname, lastname);
} catch (Exception ex) {
throw new EJBException("add record: " +
ex.getMessage());
}
}
public void selectRecord(String id) {
try {
selectEntry(ds,id) ;
}catch(Exception ex) {
throw new EJBException("add record: " +
ex.getMessage());
}
}
public void ejbCreate() {
System.out.println("ejb create load ...") ;
try {
makeConnection();
} catch (Exception ex) {
throw new EJBException("Unable to connect to database. " +
ex.getMessage());
}
}
public void ejbRemove() {
System.out.println("ejb remove load ...") ;
try {
ds = null ;
System.out.println("connection is closed ...") ;
} catch (Exception ex) {
throw new EJBException("ejbRemove: " + ex.getMessage());
}
}
public void ejbActivate() {
System.out.println("ejb activate load ...") ;
try {
makeConnection();
} catch (Exception ex) {
throw new EJBException("ejbActivate Exception: " + ex.getMessage());
}
}
public void ejbPassivate() {
System.out.println("ejb passivate load ...") ;
try {
ds = null ;
System.out.println("connection is closed ...") ;
} catch (Exception ex) {
throw new EJBException("ejbPassivate Exception: " + ex.getMessage());
}
}
public void setSessionContext(SessionContext sessionContext) {
System.out.println("set session context load ...") ;
this.sessionContext = sessionContext;
}
/*********************** Database Routines *************************/
private void makeConnection() throws NamingException, SQLException {
InitialContext ic = new InitialContext();
ds = (DataSource) ic.lookup(dbName);
System.out.println("connection is opened ...") ;
}
/* private void testConnection() {
try{
String deleteStatement =
"select id, firstname, lastname from tbltest";
PreparedStatement prepStmt =
con.prepareStatement(deleteStatement);
ResultSet rs = prepStmt.executeQuery();
System.out.println("sql execute : " + deleteStatement) ;
while (rs.next()) {
System.out.println("the record is : " + rs.getString(1) + "-" + rs.getString(2) + "-" + rs.getString(3));
}
}catch(SQLException ex){
System.out.println("sql
test exception " + ex.getMessage() ) ;
}
}
*/
private void insertEntry(DataSource ds,String id, String first, String last){
PreparedStatement prepStmt = null ;
Connection cn = null ;
try{
cn = ds.getConnection() ;
String insertStatement =
"insert into tbltest values ( ? , ? , ? )";
prepStmt =
cn.prepareStatement(insertStatement);
prepStmt.setString(1, id) ;
prepStmt.setString(2, first) ;
prepStmt.setString(3, last) ;
prepStmt.executeUpdate();
prepStmt.close();
}catch(SQLException ex){
System.out.println("execute inset sql fail: " + ex.getMessage() ) ;
ex.printStackTrace() ;
}finally{
try{
if(prepStmt != null)
prepStmt.close() ;
if(cn != null)
cn.close() ;
}catch (SQLException ex) {
ex.printStackTrace() ;
}
}
}
private void selectEntry(DataSource ds,String id){
Connection cn = null ;
PreparedStatement prepStmt = null ;
ResultSet rs = null ;
try{
cn = ds.getConnection() ;
String deleteStatement =
"select id, firstname, lastname from tbltest where id = ?";
prepStmt = cn.prepareStatement(deleteStatement);
prepStmt.setString(1, id) ;
rs = prepStmt.executeQuery();
System.out.println("sql execute : " + deleteStatement) ;
while (rs.next()) {
System.out.println("the record is : " + rs.getString(1) + "-" + rs.getString(2) + "-" + rs.getString(3));
}
}catch(SQLException ex){
ex.printStackTrace() ;
System.out.println("sql execute select fail: " + ex.getMessage() ) ;
}finally{
try{
if(rs != null)
rs.close() ;
if(prepStmt != null)
prepStmt.close() ;
if(cn != null)
cn.close() ;
}catch (SQLException ex) {
ex.printStackTrace() ;
}
}
}
}
=================================================
=================================================
but when i run it again , the following error message occurs:
[02.11.22 17:26:49:919 CST] 2bb97b12 Server A WSVR0023I:服务器 Default Server 为电子商务开放
[02.11.22 17:26:59:871 CST] 5d6abb10 SystemOut U set session context load ...
[02.11.22 17:26:59:881 CST] 5d6abb10 SystemOut U
ejb create load ...
[02.11.22 17:27:00:262 CST] 5d6abb10 SystemOut U connection is opened ...
com.ibm.ejs.cm.exception.TransactionAbortedException: JTS/JTA transaction has been aborted
at com.ibm.ejs.cm.pool.ConnectO.enlist(ConnectO.java:707)
at com.ibm.ejs.cm.pool.ConnectO.enlist(ConnectO.java:373)
at com.ibm.ejs.cm.pool.ConnectO.preInvoke(ConnectO.java:1300)
at com.ibm.ejs.cm.proxy.Proxy.__preInvoke(Proxy.java:113)[02.11.22 17:27:03:356 CST] 5d6abb10 ConnectO X CONM6016E:未能加入事务。抛出新的 (TransactionAbortedException)
at com.ibm.ejs.cm.proxy.Proxy.__preInvoke(Proxy.java:98)
at com.ibm.ejs.cm.proxy.OracleConnectionProxy.prepareStatement(OracleConnectionProxy.java:150)
at hello.StateSession1Bean.selectEntry(StateSession1Bean.java:150)
at hello.StateSession1Bean.selectRecord(StateSession1Bean.java:37)
at hello.EJSRemoteStatefulStateSession1.selectRecord(EJSRemoteStatefulStateSession1.java:49)
at hello._EJSRemoteStatefulStateSession1_Tie._invoke(_EJSRemoteStatefulStateSession1_Tie.java:137)
at com.ibm.CORBA.iiop.ExtendedServerDelegate.dispatch(ExtendedServerDelegate.java:506)
at com.ibm.CORBA.iiop.ORB.process(ORB.java:2294)
at com.ibm.CORBA.iiop.OrbWorker.run(OrbWorker.java:185)
at com.ibm.ejs.oa.pool.ThreadPool$PooledWorker.run(ThreadPool.java:95)
at com.ibm.ws.util.CachedThread.run(ThreadPool.java:122)
[02.11.22 17:27:03:766 CST] 5d6abb10 SystemOut U sql execute select fail: JTS/JTA transaction has been aborted
=================================================
=================================================
and the Client throws exception is :
Initializing bean access.
Initializing bean lookup...
Initializing bean narrow...
Succeeded initializing bean access.
Succeeded create remote object.
Failed initializing bean access.CORBA TRANSACTION_ROLLEDBACK 0 No; nested exception is:
org.omg.CORBA.TRANSACTION_ROLLEDBACK: com.ibm.websphere.csi.CSITransactionRolledbackException:
at com.ibm.ejs.csi.TranStrategy.commit(TranStrategy.java:194)
at com.ibm.ejs.csi.TranStrategy.postInvoke(TranStrategy.java:67)
at com.ibm.ejs.csi.TransactionControlImpl.postInvoke(TransactionControlImpl.java:411)
at com.ibm.ejs.container.EJSContainer.postInvoke(EJSContainer.java:2368)
at hello.EJSRemoteStatefulStateSession1.selectRecord(EJSRemoteStatefulStateSession1.java:60)
at hello._EJSRemoteStatefulStateSession1_Tie._invoke(_EJSRemoteStatefulStateSession1_Tie.java:137)
at com.ibm.CORBA.iiop.ExtendedServerDelegate.dispatch(ExtendedServerDelegate.java:506)
at com.ibm.CORBA.iiop.ORB.process(ORB.java:2294)
at com.ibm.CORBA.iiop.OrbWorker.run(OrbWorker.java:185)
at com.ibm.ejs.oa.pool.ThreadPool$PooledWorker.run(ThreadPool.java:95)
at com.ibm.ws.util.CachedThread.run(ThreadPool.java:122)
minor code: 0 completed: No
at com.ibm.ejs.container.EJSContainer.postInvoke(EJSContainer.java:2407)
at hello.EJSRemoteStatefulStateSession1.selectRecord(EJSRemoteStatefulStateSession1.java:60)
at hello._EJSRemoteStatefulStateSession1_Tie._invoke(_EJSRemoteStatefulStateSession1_Tie.java:137)
at com.ibm.CORBA.iiop.ExtendedServerDelegate.dispatch(ExtendedServerDelegate.java:506)
at com.ibm.CORBA.iiop.ORB.process(ORB.java:2294)
at com.ibm.CORBA.iiop.OrbWorker.run(OrbWorker.java:185)
at com.ibm.ejs.oa.pool.ThreadPool$PooledWorker.run(ThreadPool.java:95)
at com.ibm.ws.util.CachedThread.run(ThreadPool.java:122)
minor code: 0 completed: No
=================================================
=================================================
please tell me how to correct it, thank you very much!