<!----><!----> <!---->
トランザクション : transaction 事务处理
http://s2dao.seasar.org/zh-cn/s2dao.html#HowToRun
中有这样一句:
S2Dao 不做事 务 (transaction) 控制。有 关 事 务 (transaction) 控制的内容, 请 参 阅 事 务 的自 动 控制 一 节 。
http://s2container.seasar.org/2.3/ja/tx.html
中有这样一段:
S2Tx の機能を使って、 POJO( 普通の Java のクラス ) に対して、 Aspect でトランザクションの自動管理機能を組み込むことができます。 EJB コンテナが提供するようなトランザクション管理機能を POJO に対して透明に組み込むことができるのです。組む込むことのできるトランザクション属性は次のとおりです。
这里面也提供了一个事务管理的例子程序,我在本地建了一下,跑了一下,测试结果如下:
DEBUG 2008-12-18 19:21:18,501 [main] トランザクションを開始しました foo DEBUG 2008-12-18 19:21:18,501 [main] トランザクションをコミットしました |
感觉这个就是普通的 AOP 服务,横切进去,在真正执行的正常的代码的前后各自打印了一句话而已。
我也尝试将这个实现加到了前面的 s2DAO 的例子程序中,对于多条 SQL 语句的操作,测试结果却是每执行一条 SQL 语句,前后都有这两句。这完全不是我想要的事务管理的效果(整个一段操作, N 条 SQL 语句被一个事务管理着)。
http://www.seasar.org/cn/index.html
我看到这样的表述:
S2Hibernate 通 过 S2Container 的 业务处 理 (transaction) 控制和 组 合来使用 Hibernate 为 目 的的 软 件 库
http://s2hibernate.seasar.org/ja/s2hibernate.html
我看到这样的表述:
これまで Hibernate で開発するときの悩みの種だった Session 管理を S2Hibernate が自動的に行ってくれるので、 開発者は Session のオープン・クローズ、 Transaction 処理から開放されます。 Session は JTA のトランザクション中は維持され、トランザクションの終了時に自動的にクローズ (flush も ) されます。
这句话的意思是说:对于使用 Hibernate 开发中令人烦恼的各种 session 的管理,在 S2Hibernate 中是自动处理了,所以开发者可以从 session 的 open 、 close ,还有事务处理中解放出来。
他的言下之意是说 S2Hibernate 中内部实现了事务处理?那它怎么对外界提供事务处理服务呢?
这个事务处理,到底是在 s2DAO ,还是在 Spring 的 AOP 中,还是在 S2Hibernate 实现的呢???
明天继续调查!
今天还下载了s2-dao-pager-examples-1.0.48.war例子,放到tomcat中,跑了下,分页效果体现出来了。
自己的理解:
传统意义中 JDBC 的 transaction (出现异常进行回滚)和 Spring 的事务管理不太一样
可以通过在 spring 中配置事务,对 JDBC 中的 java 代码段(比如两条 insert 语句)提供 AOP 服务(事务管理,隐式地进行事务处理,以便实现对异常进行回滚操作)
20081219上午思路(分析昨天的调查结果):
s2DAO中确实不进行事务处理,从道理上讲也应该是这样,s2DAO中就应该做自己的主业:数据的增删改查,而事务处理(JDBC)、打log等等非它主业的事情,就应该教给其他部分来做,比如说让Spring的AOP来做。
昨天调查的seasar中的Spring处理,其实就是最普通的事务处理,在头尾各加一句,和JDBC中传统意义上的Transaction处理还是有区别的。
今天的调查方向应该是:Spring 的 AOP 和 S2Hibernate,看到底是哪个提供JDBC意义上的事务处理的。