petstore小节之二

偶然看见这个帖子,不得不说一下了。

http://www.jdon.com/jive/thread.jsp?forum=16&thread=3843&message=397901&redirect=true&hilite=true&q=transaction

在petstore中只在一个地方使用了DAO模式,重要的是,这个模式不同于我们平常使用的DAO,这个DAO是只读的(只由get方法组成)。

在components目录下的catalog包中,sun唯一使用了DAO模式来弥补cmp在查询方面上的缺陷。目的:一,加快速度,提高性能;二,减少cmp在内存中的存储;三,可读性提高了。这三个方面也是cmp的缺点。

因此,在面对大量查询操作的时候,尤其是要组合sql语句的时候,推荐使用dao的只读模式。并且,这种操作对事务的要求很少。

dao普通模式(就是有insert/update等方法的模式)应该尽量被ejb的cmp替代。减少代码工作量,cmp的建立是非常简单的,尤其是数据库操作等方面,其将大量操作交给容器来做。

在dao只读的上层,是无状态sessionfacade。facade层次用来控制事务处理,逻辑等操作。catalog.ejb的包中的CatalogEJB类,就使用了这一层关系。

我一直找不到petstore中自己处理事务的好方法,不知道谁有好建议?

我的mail:chenchen@foundercy.com

事务处理交由容器处理了,代码不必写,如果你不是运行在J2EE容器中,你可以自己写,我个人觉得去研究了没意思。

To banq,
有些情况下是需要人工处理事务, 比方说事务B包含在事务A当中,但是事务B的失败不能让A也rollback,就需要人工suspend A, 再处理B, 然后再resume A。

To cc,
用TransactionManager, UserTransaction,你可以从jboss的JNDI tree中得到“java:/TransactionManager”“java:comp/UserTransaction”,具体的使用在JavaDoc里面有比较详细的说明。

好的,看来j2ee确实简化了很多工作量。