??xml version="1.0" encoding="utf-8" standalone="yes"?>色综合久久精品,在线影院av,成人在线免费观看视视频http://www.aygfsteel.com/msmary/category/26452.html书山有\勤ؓ(f)径,学v无苦作?/description>zh-cnThu, 25 Oct 2007 17:49:47 GMTThu, 25 Oct 2007 17:49:47 GMT60Spring in Action 学习(fn)W记—第七章 讉K企业服务http://www.aygfsteel.com/msmary/articles/155407.html谭明谭明Tue, 23 Oct 2007 13:52:00 GMThttp://www.aygfsteel.com/msmary/articles/155407.htmlhttp://www.aygfsteel.com/msmary/comments/155407.htmlhttp://www.aygfsteel.com/msmary/articles/155407.html#Feedback0http://www.aygfsteel.com/msmary/comments/commentRss/155407.htmlhttp://www.aygfsteel.com/msmary/services/trackbacks/155407.html阅读全文

谭明 2007-10-23 21:52 发表评论
]]>
Spring in Action 学习(fn)W记—第六章 q程调用http://www.aygfsteel.com/msmary/articles/155405.html谭明谭明Tue, 23 Oct 2007 13:51:00 GMThttp://www.aygfsteel.com/msmary/articles/155405.htmlhttp://www.aygfsteel.com/msmary/comments/155405.htmlhttp://www.aygfsteel.com/msmary/articles/155405.html#Feedback0http://www.aygfsteel.com/msmary/comments/commentRss/155405.htmlhttp://www.aygfsteel.com/msmary/services/trackbacks/155405.html阅读全文

谭明 2007-10-23 21:51 发表评论
]]>
Spring in Action 学习(fn)W记—第四章 征服数据??http://www.aygfsteel.com/msmary/articles/155403.html谭明谭明Tue, 23 Oct 2007 13:47:00 GMThttp://www.aygfsteel.com/msmary/articles/155403.htmlhttp://www.aygfsteel.com/msmary/comments/155403.htmlhttp://www.aygfsteel.com/msmary/articles/155403.html#Feedback0http://www.aygfsteel.com/msmary/comments/commentRss/155403.htmlhttp://www.aygfsteel.com/msmary/services/trackbacks/155403.html阅读全文

谭明 2007-10-23 21:47 发表评论
]]>
Spring in Action 学习(fn)W记—第三章创徏切面(?http://www.aygfsteel.com/msmary/articles/155402.html谭明谭明Tue, 23 Oct 2007 13:44:00 GMThttp://www.aygfsteel.com/msmary/articles/155402.htmlhttp://www.aygfsteel.com/msmary/comments/155402.htmlhttp://www.aygfsteel.com/msmary/articles/155402.html#Feedback0http://www.aygfsteel.com/msmary/comments/commentRss/155402.htmlhttp://www.aygfsteel.com/msmary/services/trackbacks/155402.html阅读全文

谭明 2007-10-23 21:44 发表评论
]]>
Spring in Action 学习(fn)W记—第二章 装配Bean(?http://www.aygfsteel.com/msmary/articles/155401.html谭明谭明Tue, 23 Oct 2007 13:43:00 GMThttp://www.aygfsteel.com/msmary/articles/155401.htmlhttp://www.aygfsteel.com/msmary/comments/155401.htmlhttp://www.aygfsteel.com/msmary/articles/155401.html#Feedback0http://www.aygfsteel.com/msmary/comments/commentRss/155401.htmlhttp://www.aygfsteel.com/msmary/services/trackbacks/155401.html阅读全文

谭明 2007-10-23 21:43 发表评论
]]>
Spring in Action学习(fn)W记--楔子(?http://www.aygfsteel.com/msmary/articles/155399.html谭明谭明Tue, 23 Oct 2007 13:41:00 GMThttp://www.aygfsteel.com/msmary/articles/155399.htmlhttp://www.aygfsteel.com/msmary/comments/155399.htmlhttp://www.aygfsteel.com/msmary/articles/155399.html#Feedback0http://www.aygfsteel.com/msmary/comments/commentRss/155399.htmlhttp://www.aygfsteel.com/msmary/services/trackbacks/155399.html一、v?/span>

我是一?/span>JavaE序员,Java写的多了Q自然而然惛_J2EEQ现在叫JavaEE了)斚w发展。于是我开始翻?/span>J2EE斚w的资料,在网上查Q在论坛问。最后我查到一大堆词,像什?/span>Struts?/span>Webwork?/span>Spring?/span>Hibernate?/span>EJB{等Q这些能叫上名字的都是牌子大的,更有不计其数的我叫不上来名字或者根本就没有听说q的。于是我大概每个都看看。看的最多的?/span>StrutsQ当我看到略为深入的部分后,各种各样的设计模式一股脑儿的全都冒了出来。于是我开始学?fn)设计模式,起初我本来想到一个模式学一个。但是看着看着Q好多模式在一h؜用,于是我不得不停下来花好多旉来学?fn)。最后下了个军_q脆把模式全部来一遍算了。所以有了我的设计模式一些列文章。(关于设计模式的文章请看:(x)http://blog.csdn.net/qutr/category/125050.aspx?/span>http://blog.csdn.net/qutr/category/166495.aspxQ?/span>

在设计模式看完以后,我忙了一D|_(d)J2EE的学?fn)也停了下来。之后我又将J2EE的学?fn)提上了学?fn)日程。但是现在我有些q了,q么一大堆名词他们?/span>J2EE到底是什么关p,他们之间到底有什么样的联pM?qing)用哪个好,不用哪个好?q些问题让我十分的烦恹{?/span>

直到最后我MRod JohnsonQ关?/span>Rod我就不说?/span>Spring的创始hQ但|上有hq样评h(hun)他:(x)“我对Rod的敬佩不是因Z发明?/span>SpringQ而是他对J2EE开发的深刻理解”Q?/span>的文?strong>?/strong>Introduce To Spring Framework?/span>Q?span style="color: #3366ff">英文原文Q?/span>http://www.theserverside.com/tt/articles/article.tss?l=SpringFrameworkQ中文翻译:(x)http://forum.javaeye.com/viewtopic.php?t=4919Q后我才渐渐明白了一些概念,Rod的这文章相当精彩,从头到尾讲解?/span>Spring的功能,讲解?/span>Spring的各个模块的实现意图。得到的l论是:(x)Spring是个而全的轻量J2EE Framework。原来论坛上和网上大家说?/span>StrutsQ?/span>WebworkQ?/span>+Spring+Hibernate是利用了StrutsQ?/span>WebworkQ的MVC功能Q?/span>Spring?/span>Ioc?/span>Aop功能q有Hibernate的数据库操作功能。至此我军_?/span>Spring为切入点来学?/span>J2EE技术?/span>

二、关于?/span>Spring In Action?/span>

我觉得写q本书的两位作者真是两个牛人,不仅?/span>Spring理解的好Q而且g懂得心理学的知识。他们抓住了读者的心理Q将一些基本概念讲解的比较清楚Q而且对一些名词如StrutsQ?/span>Webwork{作了简短的解释和与Spring的比较。诠释了学习(fn)者心中的疑惑Q自然这本书深深的吸引了我?/span>

在书买回来的前几天里我看得非常快Q开始看得很q瘾Q渐渐的看迷p,看U看不懂了。最后我发现原因是Q光看不l造成的。于是我下定军_Q不做草上飞Q踏t实实向前进?/span>

Z么要写学?fn)笔讎ͼ我觉得这是督促强q我坚持学习(fn)的唯一途径Q我q个人比较懒JQ?/span>

整本书的学习(fn)W记我会(x)以章为单位,每次?/span>Blog上发布一章的内容。有些章的内容可能太多或者对我来说太难我?x)好长时间才把学习(fn)笔记写出来Q有些章的内容可能对我来说暂时没什么用处,我可能会(x)不写或者非常简单的摘录。网上好多h反映出版C֒作者不负责L有将书中的源代码呈现l读者。我惌是坏事,但是反过来也是好事。没有完整的源代码我们正好可以自己写出来Q那h?x)加深?/span>Spring知识的理解。在整个的学?fn)过E中我会(x)试着把作者所说的知识点和各模块,各个cȝ代码完整的写出来贴到文章中,q会(x)做一些详l的解释。有些实在重复的内容Q我只列Z码片D,做一些解释?/span>

三、小l?/span>

对该书的整个学习(fn)q程我不?x)就光看q一本书Q我?x)参考其它一些书或文章。这些书是:(x)

l        《精?/span>Spring?/span> by|时?/span>

l        ?/span>Spring开发指南?/span> by 夏昕

l        ?/span>Spring live中文版?/span>白汉?/span>

l        ?/span>Introduce To Spring Framework?/span>by Rod Johnson

l        ?/span>Pro Spring?/span>(q本书已l有中文版了Q好像不错应该好好看?/span>)

l        q有其它一些书c、文章?/span>

当引用了哪本书或者哪文章的D落我会(x)明确表明出处Q我的文章是Z自我学习(fn)和与大家交流的,没有用于商业用途,所以希望大家也׃要和我纠~版权了J。同样引用我文章的个人或|站Q希望你们注明出处?/span>

最后说一点,我写?/span>Spring in Action》读书笔C是ؓ(f)了吸引眼球,而是Z督促自己Q将文章发表?/span>Blog上是Z和大家交,希望高手看到多多指点?/span>



谭明 2007-10-23 21:41 发表评论
]]>
Spring in Action 学习(fn)W记—第五章 事务理http://www.aygfsteel.com/msmary/articles/155398.html谭明谭明Tue, 23 Oct 2007 13:33:00 GMThttp://www.aygfsteel.com/msmary/articles/155398.htmlhttp://www.aygfsteel.com/msmary/comments/155398.htmlhttp://www.aygfsteel.com/msmary/articles/155398.html#Feedback0http://www.aygfsteel.com/msmary/comments/commentRss/155398.htmlhttp://www.aygfsteel.com/msmary/services/trackbacks/155398.html阅读全文

谭明 2007-10-23 21:33 发表评论
]]>
Spring事务传播机制解惑http://www.aygfsteel.com/msmary/articles/155395.html谭明谭明Tue, 23 Oct 2007 13:26:00 GMThttp://www.aygfsteel.com/msmary/articles/155395.htmlhttp://www.aygfsteel.com/msmary/comments/155395.htmlhttp://www.aygfsteel.com/msmary/articles/155395.html#Feedback0http://www.aygfsteel.com/msmary/comments/commentRss/155395.htmlhttp://www.aygfsteel.com/msmary/services/trackbacks/155395.html概述

当我们调用一个基?/span>Spring?/span>Service接口Ҏ(gu)Q如UserService#addUser()Q时Q它?yu)运行?/span>Spring理的事务环境中Q?/span>Service接口Ҏ(gu)可能?x)在内部调用其它?/span>Service接口Ҏ(gu)以共同完成一个完整的业务操作Q因此就?x)生服务接口方法嵌套调用的情况Q?/span>Spring通过事务传播行ؓ(f)控制当前的事务如何传播到被嵌套调用的目标服务接口Ҏ(gu)中?/span>

事务传播?/span>Springq行事务理的重要概念,光要性怎么都不。但是事务传播行Z是被误解最多的地方Q在本文里,我们详l分析不同事务传播行为的表现形式Q掌握它们之间的区别?/span>

事务传播行ؓ(f)U类

Spring?/span>TransactionDefinition接口中规定了7U类型的事务传播行ؓ(f)Q它们规定了事务Ҏ(gu)和事务方法发生嵌套调用时事务如何q行传播Q?/span>

?/span>1事务传播行ؓ(f)cd

事务传播行ؓ(f)cd

说明

PROPAGATION_REQUIRED

如果当前没有事务Q就新徏一个事务,如果已经存在一个事务中Q加入到q个事务中。这是最常见的选择?/span>

PROPAGATION_SUPPORTS

支持当前事务Q如果当前没有事务,׃非事务方式执行?/span>

PROPAGATION_MANDATORY

使用当前的事务,如果当前没有事务Q就抛出异常?/span>

PROPAGATION_REQUIRES_NEW

新徏事务Q如果当前存在事务,把当前事务挂赗?/span>

PROPAGATION_NOT_SUPPORTED

以非事务方式执行操作Q如果当前存在事务,把当前事务挂v?/span>

PROPAGATION_NEVER

以非事务方式执行Q如果当前存在事务,则抛出异常?/span>

PROPAGATION_NESTED

如果当前存在事务Q则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIREDcM的操作?/span>

当?/span>PROPAGATION_NESTEDӞ底层的数据源必须ZJDBC 3.0Qƈ且实现者需要支持保存点事务机制?/span>

几种Ҏ(gu)引v误解的组合事务传播行?/span>

当服务接口方法分别用表1中不同的事务传播行ؓ(f)Q且q些接口Ҏ(gu)又发生相互调用的情况下,大部分组合都是一目了ӞҎ(gu)理解的。但是,也存在一些容易引赯解的l合事务传播方式?/span>

下面Q我们通过两个具体的服务接口的l合调用行ؓ(f)来破解这一隄。这两个服务接口分别?/span>UserService?/span>ForumServiceQ?/span>UserSerice有一?/span>addCredits()Ҏ(gu)Q?/span>ForumSerivce#addTopic()Ҏ(gu)调用?/span>UserSerice#addCredits()Ҏ(gu)Q发生关联性服务方法的调用Q?/span>

public class ForumService {

private UserService userService;

public void addTopic(){?/span>调用其它服务接口的方?/span>

//add Topic…

userService.addCredits();?/span>被关联调用的业务Ҏ(gu)

}

}

嵌套调用的事务方?/span>

?/span>Spring事务传播行ؓ(f)最常见的一个误解是Q当服务接口Ҏ(gu)发生嵌套调用Ӟ被调用的服务Ҏ(gu)只能声明?/span>PROPAGATION_NESTED。这U观点犯了望文生义的错误Q误认ؓ(f)PROPAGATION_NESTED是专为方法嵌套准备的。这U误解遗害不,执有q种误解的开发者错误地认ؓ(f)Q应量不让Servicecȝ业务Ҏ(gu)发生怺的调用,Servicecd能调?/span>DAO层的DAOc,以避免生嵌套事务?/span>

其实Q这U顾虑是完全没有必要的,PROPAGATION_REQUIRED已经清楚地告诉我们:(x)事务的方法会(x)_聪明地判断上下文是否已经存在一个事务中Q如果已l存在,加入到q个事务中,否则创徏一个新的事务?/span>

依照上面的例子,假设我们?/span>ForumService#addTopic()?/span>UserSerice#addCredits()Ҏ(gu)的事务传播行为都讄?/span>PROPAGATION_REQUIREDQ这两个Ҏ(gu)运行于同一个事务中?/span>

Z清楚地说明这点,可以?/span>Log4J的日志设|ؓ(f)DEBUGU别Q以观察Spring事务理器内部的q行情况。下面将两个业务Ҏ(gu)都设|ؓ(f)PROPAGATION_REQUIREDQ?/span>Spring所输出的日志信息如下:(x)

Using transaction object

[org.springframework.jdbc.datasource.DataSourceTransactionManager$DataSourceTransactionObject@e3849c]

?/span>?/span>ForumService#addTopic()新徏一个事?/span>

Creating new transaction with name [com.baobaotao.service.ForumService.addTopic]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT

Acquired Connection [org.apache.commons.dbcp.PoolableConnection@dc41c5] for JDBC transaction

Switching JDBC Connection [org.apache.commons.dbcp.PoolableConnection@dc41c5] to manual commit

Bound value [org.springframework.jdbc.datasource.ConnectionHolder@ee1ede] for key [org.apache.commons.dbcp.BasicDataSource@4204] to thread [main]

Initializing transaction synchronization

Getting transaction for [com.baobaotao.service.ForumService.addTopic]

Retrieved value [org.springframework.jdbc.datasource.ConnectionHolder@ee1ede] for key [org.apache.commons.dbcp.BasicDataSource@4204] bound to thread [main]

Using transaction object [org.springframework.jdbc.datasource.DataSourceTransactionManager$DataSourceTransactionObject@8b8a47]

?/span>UserService#addCredits()单地加入到已存在的事务中Q即?/span>处创建的事务Q?/span>

Participating in existing transaction

Getting transaction for [com.baobaotao.service.UserService.addCredits]

Completing transaction for [com.baobaotao.service.UserService.addCredits]

Completing transaction for [com.baobaotao.service.ForumService.addTopic]

Triggering beforeCommit synchronization

Triggering beforeCompletion synchronization

Initiating transaction commit

?/span>调用底层Connection#commit()Ҏ(gu)提交事务

Committing JDBC transaction on Connection [org.apache.commons.dbcp.PoolableConnection@dc41c5]

Triggering afterCommit synchronization

Triggering afterCompletion synchronization

Clearing transaction synchronization

嵌套事务

?/span>ForumService#addTopic()讄?/span>PROPAGATION_REQUIREDӞUserSerice#addCredits()讄?/span>PROPAGATION_REQUIRED?/span>PROPAGATION_SUPPORTS?/span>PROPAGATION_MANDATORYӞq行的效果都是一致的Q当Ӟ如果单独调用addCredits()另当别ZQ?/span>

?/span>addTopic()q行在一个事务下Q如讄?/span>PROPAGATION_REQUIREDQ,?/span>addCredits()讄?/span>PROPAGATION_NESTEDӞ如果底层数据源支持保存点Q?/span>Springؓ(f)内部?/span>addCredits()Ҏ(gu)产生的一个内嵌的事务。如?/span>addCredits()对应的内嵌事务执行失败,事务回滚到addCredits()Ҏ(gu)执行前的点,q不?x)将整个事务回滚。内嵌事务是内层事务的一部分Q所以只有外层事务提交时Q嵌套事务才能一q提交?/span>

嵌套事务不能够提交,它必通过外层事务来完成提交的动作Q外层事务的回滚也会(x)造成内部事务的回滚?/span>

嵌套事务和新事务

PROPAGATION_REQUIRES_NEW ?/span> PROPAGATION_NESTED也是Ҏ(gu)h的两个传播行为?/span>PROPAGATION_REQUIRES_NEW 启动一个新的、和外层事务无关?/span>内部事务。该事务拥有自己的独立隔ȝ别和锁,不依赖于外部事务Q独立地提交和回滚。当内部事务开始执行时Q外部事务将被挂P内务事务l束Ӟ外部事务才l执行?/span>

由此可见Q?/span> PROPAGATION_REQUIRES_NEW ?/span> PROPAGATION_NESTED 的最大区别在于:(x)PROPAGATION_REQUIRES_NEW 创Z个全新的事务Q它和外层事务没有Q何关p,?/span> PROPAGATION_NESTED 创Z个依赖于外层事务的子事务Q当外层事务提交或回滚时Q子事务也会(x)q带提交和回滚?/span>

其它需要注意问?/span>

以下几个问题值得注意Q?/span>

1) 当业务方法被讄?/span>PROPAGATION_MANDATORYӞ它就不能被非事务的业务方法调用。如?/span>ForumService#addTopic()讄?/span>PROPAGATION_MANDATORYQ如果展现层?/span>Action直接调用addTopic()Ҏ(gu)Q将引发一个异常。正的情况是:(x)addTopic()Ҏ(gu)必须被另一个带事务的业务方法调用(?/span>ForumService#otherMethod()Q。所?/span>PROPAGATION_MANDATORY的方法一般都是被其它业务Ҏ(gu)间接调用的?/span>

2) 当业务方法被讄?/span>PROPAGATION_NEVERӞ它将不能被拥有事务的其它业务Ҏ(gu)调用。假?/span>UserService#addCredits()讄?/span>PROPAGATION_NEVERQ当ForumService# addTopic()拥有一个事务时Q?/span>addCredits()Ҏ(gu)抛出异常。所?/span>PROPAGATION_NEVERҎ(gu)一般是被直接调用的?/span>

3)当方法被讄?/span>PROPAGATION_NOT_SUPPORTEDӞ外层业务Ҏ(gu)的事务会(x)被挂P当内部方法运行完成后Q外层方法的事务重新q行。如果外层方法没有事务,直接q行Q不需要做M其它的事?/span>

?/span>Spring声明式事务管理的配置中,事务传播行ؓ(f)是最Ҏ(gu)被误解的配置,原因在于事务传播行ؓ(f)名称Q如PROPAGATION_NESTEDQ嵌套式事务Q和代码l构的类似性上Q业务类Ҏ(gu)嵌套调用另一个业务类Ҏ(gu)Q。这U误解在很多Spring开发者中q泛存在Q本文深入讲解了Spring事务传播行ؓ(f)对业务方法嵌套调用的真实影响Q希望能帮助读者化解对事务传播行ؓ(f)的困惑?/span>

谭明 2007-10-23 21:26 发表评论
]]>
控制反{比喻(?http://www.aygfsteel.com/msmary/articles/151861.html谭明谭明Wed, 10 Oct 2007 12:38:00 GMThttp://www.aygfsteel.com/msmary/articles/151861.htmlhttp://www.aygfsteel.com/msmary/comments/151861.htmlhttp://www.aygfsteel.com/msmary/articles/151861.html#Feedback0http://www.aygfsteel.com/msmary/comments/commentRss/151861.htmlhttp://www.aygfsteel.com/msmary/services/trackbacks/151861.html套用好莱坞的一句名a是Q你呆着别动Q到时我?x)找你?
什么意思呢Q就好比一个皇帝和太监
有一天皇帝想q某个美奻I于是跟太监说Q今夜我要宠q美?
皇帝往往不会(x)告诉太监Q今晚几点会(x)回宫Q会(x)回哪张龙床,他只?x)告诉太监他要哪位美?
其它一切都交由太监d排,C晚上皇帝回宫Ӟ自然?x)有女出现在皇帝的龙床?
q就是控制反转,而把女送到皇帝的寝宫里面去是注射
太监是是框枉面的注射控制器类BeanFactoryQ负责找到美奛_ƈ送到龙床上去
整个后宫可以看成是Spring框架Q美奛_是Spring控制下的JavaBean
而传l的模式是一个饥渴男L姐出台
N班,帮助l介l一个云云,于是领班开始给他张|?
介绍一个合适的l他Q完事后Q再把小姐还l领班,下次再来
q个q程中,领班是查询上下文ContextQ领班的一个职能就是给客户扑ֈ他们所要的姐
q就是lookup()Ҏ(gu)Q领班手中的姐名录是JNDI//Java Naming and Directory Interface
姐是EJBQ饥渴男是客L(fng)Q青楼是EJB容器
看到区别了么Q饥渴男L姐出台很麻烦,不仅得找Q用完后q得把小姐给q回?
而皇帝爽MQ什么都不用,交给太监d理,控制权{Ud太监手中M
而不是皇帝,必要时候由太监l注进d可以?
看到Spring的美妙了吧,Springq提供了与多个主框架的支持
可以和其它开源框枉?

谭明 2007-10-10 20:38 发表评论
]]>
վ֩ģ壺 | | ɽ| | | ۶| | | ף| ľ| | ٰ| | տ| | | | | ʯ| | ɽ| | | ϲ| | ʲ| | | | | | | | | ʤ| ±| | | | ɽ| |