为何EJB中事务不能回滚??sessionContext.setRollbackOnly无效! 你的这个sessionbean设置了需要事务吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 设置过了.... <transaction-type>Container</transaction-type> </session> </enterprise-beans> <assembly-descriptor> <container-transaction> <method> <ejb-name>SEJB</ejb-name> <method-name>*</method-name> </method> <trans-attribute>Required</trans-attribute>.....没有问题 是不是删除了,但是没有插入?这个应是数据库的运行机制问题,如果插入的数据与已删除的数据主键相同,那么事务处理必须先commit(),否则无法进行,而这个删除的commit事务是不能回滚的,建议改成update比较安全。 本意是先删除某些记录,然后插入些记录,都是对于同一个表进行的,在插入的时候遇到了一个NULL错(为验证事务人为制造的),插入是失败了,但删除却commit了,没有rollback! 想用容器管理事务的话需要tx的数据源b.m1();中的数据库连接怎么获得的,如果从tx的数据源获得的,那就不知道了 b.m1();中的数据库连接是由EJB在creat的时候进行的DBConnect并获得一个connection,在调用b.m1(Connection con)时传入,整个事务中用的是同一个connection Context ctx = new InitialContext(); DataSource ds = (DataSource)ctx.lookup("java:/OracleDS"); con = ds.getConnection();.....不应该有错的呀?! OracleDS是什么样的数据源创建数据源时,要创建Tx Data Source,而不是一般的Data Source <datasources> <local-tx-datasource> <jndi-name>OracleDS</jndi-name> <connection-url>jdbc:oracle:thin:@....:1521:zzxy</connection-url> <driver-class>oracle.jdbc.driver.OracleDriver</driver-class> <user-name>sss</user-name> <password>ddd</password> <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name> </local-tx-datasource></datasources>...也不应该有错吧 这个问题我遇到过了现在解决了 ,楼上darkmood(birdy) 说的对创建数据源时,要创建Tx Data Source,而不是一般的Data Source。回去重新配置一下数据源,程序不需要改动 good luck! 呵呵,楼上说得都对,仔细看看还是程序问题.在DAO中没有抛出异常,ejb无法捕获到异常。所以} catch(Exception ex) { sessionContext.setRollbackOnly(); throw ex; }就没有回滚。 :) 【求助】下面是Java私塾出的一个SSH2整合项目,部署在tomcat中启动时,报下面错误,试了很多方法都无法解决,求指点! 日志问题---要命 sqlserver2005+jdbc response.addHeader 求大神告知spring和hibernate问题内详 如何使用Struts的标签循环得到Hibernate的结果集 jsp页面如何从servlet接收数组(在线等) Access 数据库的编码问题 请问以下j2ee 配置环境变量的问题 webservice 中的序列化问题(棘手) 看看是什么错误!昨天刚看soap和tomcat出现下面的错误! 请教高手(100分)
....
<transaction-type>Container</transaction-type>
</session>
</enterprise-beans>
<assembly-descriptor>
<container-transaction>
<method>
<ejb-name>SEJB</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>Required</trans-attribute>
.....
没有问题
b.m1();中的数据库连接怎么获得的,如果从tx的数据源获得的,那就不知道了
在调用b.m1(Connection con)时传入,整个事务中用的是同一个connection
DataSource ds = (DataSource)ctx.lookup("java:/OracleDS");
con = ds.getConnection();
.....
不应该有错的呀?!
创建数据源时,要创建Tx Data Source,而不是一般的Data Source
<local-tx-datasource>
<jndi-name>OracleDS</jndi-name>
<connection-url>jdbc:oracle:thin:@....:1521:zzxy</connection-url>
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<user-name>sss</user-name>
<password>ddd</password>
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name>
</local-tx-datasource>
</datasources>
...也不应该有错吧
创建数据源时,要创建Tx Data Source,而不是一般的Data Source。
回去重新配置一下数据源,程序不需要改动 good luck!
} catch(Exception ex) {
sessionContext.setRollbackOnly();
throw ex;
}
就没有回滚。 :)