トランザクション調査、混乱

<!----><!----> <!---->

トランザクション 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

我看到这样的表述:

  • S2 JTA ConnectionPool Hibernate が簡単に連動するようになります。

これまで 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意义上的事务处理的。

你可能感兴趣的:(spring,AOP,Hibernate,jdbc,配置管理)