JTA该如何使用? 灵异现象

Vinyeah 2007-04-17 03:02:29
<%@ page import="java.sql.*,javax.sql.*,javax.transaction.*,javax.naming.*" %>

<%
InitialContext ctx = new InitialContext();
Object txObj = ctx.lookup("java:comp/UserTransaction");
UserTransaction utx = (UserTransaction) txObj;

utx.begin();
DataSource sol_ds = (DataSource)ctx.lookup("jdbc/sol");
Connection sol_conn = sol_ds.getConnection();

String sql = "insert into jta_tb1 values('sdf', 20)";
PreparedStatement pstmt;
pstmt = sol_conn.prepareStatement(sql);
pstmt.execute();
utx.commit();
sol_conn.close();


sol_ds = (DataSource)ctx.lookup("jdbc/sol");
sol_conn = sol_ds.getConnection();
sol_conn.setAutoCommit(false);
sql = "insert into jta_tb1 values('sdf', 20)";
pstmt = sol_conn.prepareStatement(sql);
pstmt.execute();
sol_conn.commit();
sol_conn.setAutoCommit(true);
sol_conn.close();

System.out.println("===========sdf");
%>



重复执行这段代码,总是奇数次成功,偶数次抛出异常....
异常如下:
[#|2007-04-17T14:49:37.819+0800|WARNING|sun-appserver-ee8.1_02|javax.enterprise.system.core.transaction|_ThreadID=14;|JTS5041:资源管理器正在处理全局事务以外的工作
oracle.jdbc.xa.OracleXAException
at oracle.jdbc.xa.OracleXAResource.checkError(OracleXAResource.java:1190)
at oracle.jdbc.xa.client.OracleXAResource.start(OracleXAResource.java:311)
...
|#]

[#|2007-04-17T14:49:37.824+0800|WARNING|sun-appserver-ee8.1_02|javax.enterprise.resource.resourceadapter|_ThreadID=14;|销毁资源时发生错误:ORA-02089: COMMIT 不允许在附属会话中
|#]

[#|2007-04-17T14:49:38.067+0800|SEVERE|sun-appserver-ee8.1_02|javax.enterprise.system.container.web|_ThreadID=14;|StandardWrapperValve[jsp]: Servlet jsp 的 Servlet.service() 抛出异常
javax.transaction.RollbackException
at com.sun.jts.jta.TransactionManagerImpl.commit(TransactionManagerImpl.java:256)
at com.sun.enterprise.distributedtx.J2EETransactionManagerImpl.commit(J2EETransactionManagerImpl.java:943)
...
...全文
270 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
WIN_ANGEL 2007-04-26
  • 打赏
  • 举报
回复
不是吧 闹鬼?
fengmingjie 2007-04-23
  • 打赏
  • 举报
回复
应该用thin的那个oracle连接吧,你改成thin连接试试

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧