﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-J2EE之巅-随笔分类-Java EE</title><link>http://www.blogjava.net/chaocai/category/19716.html</link><description /><language>zh-cn</language><lastBuildDate>Sun, 09 Oct 2011 03:41:21 GMT</lastBuildDate><pubDate>Sun, 09 Oct 2011 03:41:21 GMT</pubDate><ttl>60</ttl><item><title>Spring AOP on Annotation</title><link>http://www.blogjava.net/chaocai/archive/2011/06/07/351844.html</link><dc:creator>超越巅峰</dc:creator><author>超越巅峰</author><pubDate>Tue, 07 Jun 2011 03:34:00 GMT</pubDate><guid>http://www.blogjava.net/chaocai/archive/2011/06/07/351844.html</guid><wfw:comment>http://www.blogjava.net/chaocai/comments/351844.html</wfw:comment><comments>http://www.blogjava.net/chaocai/archive/2011/06/07/351844.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/chaocai/comments/commentRss/351844.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chaocai/services/trackbacks/351844.html</trackback:ping><description><![CDATA[<div>1 The annotation:<br />@Retention(RetentionPolicy.RUNTIME)<br />@Target(ElementType.METHOD)<br />@Inherited<br />public @interface NeedToRetry {<br />&nbsp;&nbsp; &nbsp;Class&lt;?&gt;[] recoverableExceptions();<br />&nbsp;&nbsp; &nbsp;int retryTime();<br />&nbsp;&nbsp; &nbsp;int intervalIncrementalFactor() default 0;<br />&nbsp;&nbsp; &nbsp;long retryInterval() default 0L;<br />}<br /><br />2 The Aspect<br />@Aspect<br />public class InvokingRetryInterceptor {<br />&nbsp;&nbsp; &nbsp;private static Logger log = Logger.getLogger(InvokingRetryInterceptor.class);<br />&nbsp;&nbsp; &nbsp;private boolean isNeedToRetry(Throwable t,Class&lt;?&gt;[] recoverableExceptions){<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;String exceptionName= t.getClass().getName();<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;for (Class&lt;?&gt; exp:recoverableExceptions){&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;if (exp.isInstance(t)){<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;return true;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;log.warn("The exception doesn't need recover!"+exceptionName);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;return false;<br />&nbsp;&nbsp; &nbsp;}<br /><br />&nbsp;&nbsp; &nbsp;private long getRetryInterval(int tryTimes,long interval,int incrementalFactor){<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;return interval+(tryTimes*incrementalFactor);<br />&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;@Around(value="@annotation(amazon.internal.dropship.common.NeedToRetry)&amp;&amp;@annotation(retryParam)",argNames="retryParam")<br />&nbsp;&nbsp; &nbsp;public Object process(ProceedingJoinPoint pjp,NeedToRetry retryParam ) throws Throwable{<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;boolean isNeedTry=true;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;int count=0;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;Throwable fault;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;Class&lt;?&gt;[] recoverableExceptions=retryParam.recoverableExceptions();<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;int retryTime=retryParam.retryTime();<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;long retryInterval=retryParam.retryInterval();<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;int incrementalFactor=retryParam.intervalIncrementalFactor();<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;do{<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;try{&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;return pjp.proceed();&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}catch(Throwable t){<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;fault=t;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;if (!isNeedToRetry(t,recoverableExceptions)){<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;break;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;Thread.sleep(getRetryInterval(retryTime,retryInterval,incrementalFactor));<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;count++;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}while(count&lt;(retryTime+1));<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;throw fault;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;}<br />}</div><img src ="http://www.blogjava.net/chaocai/aggbug/351844.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chaocai/" target="_blank">超越巅峰</a> 2011-06-07 11:34 <a href="http://www.blogjava.net/chaocai/archive/2011/06/07/351844.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JBehave in practice</title><link>http://www.blogjava.net/chaocai/archive/2011/02/26/345233.html</link><dc:creator>超越巅峰</dc:creator><author>超越巅峰</author><pubDate>Sat, 26 Feb 2011 05:34:00 GMT</pubDate><guid>http://www.blogjava.net/chaocai/archive/2011/02/26/345233.html</guid><wfw:comment>http://www.blogjava.net/chaocai/comments/345233.html</wfw:comment><comments>http://www.blogjava.net/chaocai/archive/2011/02/26/345233.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/chaocai/comments/commentRss/345233.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chaocai/services/trackbacks/345233.html</trackback:ping><description><![CDATA[<p style="page-break-after: avoid" class="MsoNormal">ATDD (Acceptance Test Driven Development) is the extension of TDD, which helps us deliver exactly what the customer wants. Now ATDD has already been the hot spot in the software development world. There are several variations of ATDD including BDD, EDD and etc, also more and more frameworks have been created to help us develop with ATDD, for example&nbsp; FIT and JBehave.<br />
The followings will introduce how to use the JBehave in your real project effectively.<span style="line-height: 115%; font-family: 'NewBaskerville-Roman','serif'; font-size: 10.5pt">
<div align="center"><img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/chaocai/jbehave.jpg" /></div>
<br />
</span>
<p>&nbsp;</p>
<p>Figure 1 Test Code Structure</p>
<p>Each test implementation could be divided into four layers, this structure could help us improve the codes reusability and maintainability, So, it will make us implement the tests quickly and easily.</p>
<p>Specification/Scenario layer: </p>
<p>This layer describes system&#8217;s behaviors and functionalities by the scenarios.&nbsp; For using JBehave, we can use the natural language describe the scenarios and just need to follow the JBehave &#8216;Given-When-Then&#8217; rule.</p>
<p>Parser layer:</p>
<p>We don&#8217;t need to implement this layer , this layer has been implemented by JBehave. What exactly JBehave do is to relate the steps of the scenario to the methods of the test codes.</p>
<p>Step Logic Layer:</p>
<p>The layer implements test logics associating with every step of the scenarios. Every step are implemented by a Java method.</p>
<p>Action/Utils layer</p>
<p>This the very important layer to improve the reusability of our codes. This layer provides the utility methods to help you implement step logics. These utility methods usually involved the system state checking, mock requests sending and so on.</p>
<p>For example, we can provide the methods to check the data in database/file or check the state of the middleware, also so frameworks are very useful to implement the logic simulating the client browser&#8217;s requests.</p>
<p>&nbsp;</p>
<p><br />
Chao Cai</p>
<p>Working for Amazon.com</p>
<p>chaocai2001@yahoo.com.cn</p>
<p class="MsoCaption" align="center">&nbsp;</p>
<img src ="http://www.blogjava.net/chaocai/aggbug/345233.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chaocai/" target="_blank">超越巅峰</a> 2011-02-26 13:34 <a href="http://www.blogjava.net/chaocai/archive/2011/02/26/345233.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在Weblogic中部署CXF的技巧</title><link>http://www.blogjava.net/chaocai/archive/2010/01/15/309709.html</link><dc:creator>超越巅峰</dc:creator><author>超越巅峰</author><pubDate>Fri, 15 Jan 2010 13:11:00 GMT</pubDate><guid>http://www.blogjava.net/chaocai/archive/2010/01/15/309709.html</guid><wfw:comment>http://www.blogjava.net/chaocai/comments/309709.html</wfw:comment><comments>http://www.blogjava.net/chaocai/archive/2010/01/15/309709.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/chaocai/comments/commentRss/309709.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chaocai/services/trackbacks/309709.html</trackback:ping><description><![CDATA[&nbsp;
<p><span style="font-family: 宋体">由于</span>Weblogic<span style="font-family: 宋体">中包含的相关</span>JWS<span style="font-family: 宋体">及</span>JAX-RPC<span style="font-family: 宋体">实现的影响使得我们在其中部署相关</span>CXF<span style="font-family: 宋体">应用时总是会遇到一些棘手的问题，本人根据自己的实践经验将其中一些注意事项作了一下总结。</span></p>
<p>1 <span style="font-family: 宋体">以</span>EAR<span style="font-family: 宋体">形式部署</span></p>
<p><span style="font-family: 宋体">将</span>CXF<span style="font-family: 宋体">的应用以</span>WAR<span style="font-family: 宋体">的形式包含在</span>EAR<span style="font-family: 宋体">中，在</span>EAR<span style="font-family: 宋体">的</span>META-INF<span style="font-family: 宋体">中的配置文件</span>application.xml<span style="font-family: 宋体">中声明你的</span>WAR<span style="font-family: 宋体">，并在</span>weblogic-application.xml<span style="font-family: 宋体">中加入以下内容：</span></p>
<p style="margin-bottom: 0pt; line-height: normal"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;?</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">xml </span><span style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'">version</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"1.0" </span><span style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'">encoding</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"UTF-8"</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">?&gt;</span></p>
<p style="margin-bottom: 0pt; line-height: normal"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">weblogic-application </span><span style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'">xmlns</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"http://www.bea.com/ns/weblogic/90"</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p style="margin-bottom: 0pt; line-height: normal"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">application-param</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p style="margin-bottom: 0pt; line-height: normal"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">param-name</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">webapp.encoding.default</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">param-name</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p style="margin-bottom: 0pt; line-height: normal"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">param-value</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">UTF-8</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">param-value</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p style="margin-bottom: 0pt; line-height: normal"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">application-param</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p style="margin-bottom: 0pt; line-height: normal"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">prefer-application-packages</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p style="margin-bottom: 0pt; line-height: normal"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">package-name</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">javax.jws.*</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">package-name</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p style="margin-bottom: 0pt; line-height: normal"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">prefer-application-packages</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p><span style="font-size: 10pt; color: teal; line-height: 115%; font-family: 'Courier New'">&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; line-height: 115%; font-family: 'Courier New'">weblogic-application</span><span style="font-size: 10pt; color: teal; line-height: 115%; font-family: 'Courier New'">&gt;</span></p>
<p><span style="font-size: 10pt; color: black; line-height: 115%; font-family: 宋体">这个配置是告诉应用服务器的类装载器对于该</span><span style="font-size: 10pt; color: black; line-height: 115%; font-family: 'Courier New'">EAR</span><span style="font-size: 10pt; color: black; line-height: 115%; font-family: 宋体">而言优先使用该</span><span style="font-size: 10pt; color: black; line-height: 115%; font-family: 'Courier New'">EAR</span><span style="font-size: 10pt; color: black; line-height: 115%; font-family: 宋体">中</span><span style="font-size: 10pt; color: black; line-height: 115%; font-family: 'Courier New'">javax.jws.*</span><span style="font-size: 10pt; color: black; line-height: 115%; font-family: 宋体">的实现。</span></p>
<p><span style="font-size: 10pt; color: black; line-height: 115%; font-family: 'Courier New'">2 </span><span style="font-size: 10pt; color: black; line-height: 115%; font-family: 宋体">在应用服务器启动时加入</span><span style="font-size: 10pt; color: black; line-height: 115%; font-family: 'Courier New'">Java VM</span><span style="font-size: 10pt; color: black; line-height: 115%; font-family: 宋体">参数</span></p>
<p><span style="color: black">-Djavax.xml.soap.MessageFactory=com.sun.xml.messaging.saaj.soap.ver1_1.SOAPMessageFactory1_1Impl</span></p>
<p><span style="color: black; font-family: 宋体">好了现在一切搞定！<br />
<br />
(蔡超 <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#99;&#104;&#97;&#111;&#99;&#97;&#105;&#50;&#48;&#48;&#49;&#64;&#121;&#97;&#104;&#111;&#111;&#46;&#99;&#111;&#109;&#46;&#99;&#110;">chaocai2001@yahoo.com.cn</a>)</span></p>
<img src ="http://www.blogjava.net/chaocai/aggbug/309709.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chaocai/" target="_blank">超越巅峰</a> 2010-01-15 21:11 <a href="http://www.blogjava.net/chaocai/archive/2010/01/15/309709.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>弹性编程原则(1)</title><link>http://www.blogjava.net/chaocai/archive/2009/09/14/295064.html</link><dc:creator>超越巅峰</dc:creator><author>超越巅峰</author><pubDate>Mon, 14 Sep 2009 12:28:00 GMT</pubDate><guid>http://www.blogjava.net/chaocai/archive/2009/09/14/295064.html</guid><wfw:comment>http://www.blogjava.net/chaocai/comments/295064.html</wfw:comment><comments>http://www.blogjava.net/chaocai/archive/2009/09/14/295064.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/chaocai/comments/commentRss/295064.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chaocai/services/trackbacks/295064.html</trackback:ping><description><![CDATA[<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; font-family: '宋体'; mso-spacerun: 'yes'">1&nbsp;SRP</span><span style="font-size: 10.5pt; font-family: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; font-family: '宋体'; mso-spacerun: 'yes'">SRP(Single&nbsp;Responsible&nbsp;Principle),&nbsp;<font face="宋体">单一职责原则，这是面对的最基本原则，也是实现弹性设计的最基本原则。</font></span><span style="font-size: 10.5pt; font-family: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; font-family: '宋体'; mso-spacerun: 'yes'">每个类或接口定义应该只包含一种明确的职责，同时仅有一种原因会导致这种定义的修改。一个复杂的类或接口的定义包含多个责任，很容易使你的设计失去弹性，很多因素都会导致这个类或接口的变更，由于它含有多种职责，这就意味着它是多种服务的提供者，会有多种依赖于它的客户类，他的变更可能会导致大范围的变更。</span><span style="font-size: 10.5pt; font-family: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; font-family: '宋体'; mso-spacerun: 'yes'">在作者看来，优先级最高的是你首先要保证接口的单一职责及方法的单一职责，接口通常意味可以更换不同的实现，为一个接口定义过多的职责意味着每个实现都会涉及多个职责，这将导致无法实现更小粒度的实现的复用。</span><span style="font-size: 10.5pt; font-family: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; font-family: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; font-family: '宋体'; mso-spacerun: 'yes'">2&nbsp;<font face="宋体">面向抽象编成</font></span><span style="font-size: 10.5pt; font-family: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; font-family: '宋体'; mso-spacerun: 'yes'">如果你已经读过<font face="Times New Roman">GOF</font><font face="宋体">的《设计模式》，你便知道其中每一个模式都是基于此原则的，抽象（或接口）有效的解除了服务调用者和服务提供者间的耦合。</font></span><span style="font-size: 10.5pt; font-family: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; font-family: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; font-family: '宋体'; mso-spacerun: 'yes'">3&nbsp;<font face="宋体">使用配置</font></span><span style="font-size: 10.5pt; font-family: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; font-family: '宋体'; mso-spacerun: 'yes'">通过修改配置文件便可以改变系统的某些特性，这种修改的区别于修改代码，对于<font face="Times New Roman">Java,C++</font><font face="宋体">而言这种修改是不需要编译，有的修改甚至可以在运行时生效。</font><font face="Times New Roman">DSL</font><font face="宋体">地运用可以使配置更加具有可读性及更强的描述能力。在设计时将实现分为配置及框架部分是非常灵活的结构。</font></span><span style="font-size: 10.5pt; font-family: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<br />
<p>蔡超<br />
HP 软件架构师<br />
软件架构顾问<br />
SCEA<br />
IBM Certified Solution Designer for OOA&amp;D vUML2<br />
Chaocai2001@yahoo.com.cn</p>
<br />
<!--endfragment-->
<img src ="http://www.blogjava.net/chaocai/aggbug/295064.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chaocai/" target="_blank">超越巅峰</a> 2009-09-14 20:28 <a href="http://www.blogjava.net/chaocai/archive/2009/09/14/295064.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring DM快速入门中文教程</title><link>http://www.blogjava.net/chaocai/archive/2009/08/25/292531.html</link><dc:creator>超越巅峰</dc:creator><author>超越巅峰</author><pubDate>Tue, 25 Aug 2009 09:11:00 GMT</pubDate><guid>http://www.blogjava.net/chaocai/archive/2009/08/25/292531.html</guid><wfw:comment>http://www.blogjava.net/chaocai/comments/292531.html</wfw:comment><comments>http://www.blogjava.net/chaocai/archive/2009/08/25/292531.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/chaocai/comments/commentRss/292531.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chaocai/services/trackbacks/292531.html</trackback:ping><description><![CDATA[<p>厌倦了那些厚书（特别是那些为了赚钱而特意写厚的书），很多时候这些书让我们找不到技术要点，甚至丧失了学习的兴趣，而最终变成那些拒绝新技术的&#8220;顽固派&#8221;。<br />
其实掌握技术的最佳方式是实践，在实践中不断的深入学习。<br />
本教程旨在帮助哪些已经掌握了OSGi和Spring技术基础的开发人员，迅速将Spring DM应用于实际开发，这是一份入门教程，不求全面，但求简单。<br />
并请配合本教程的实例代码一同学习。</p>
<p>下载教程和示例:<br />
http://www.blogjava.net/Files/chaocai/spring-osgi.rar</p>
<img src ="http://www.blogjava.net/chaocai/aggbug/292531.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chaocai/" target="_blank">超越巅峰</a> 2009-08-25 17:11 <a href="http://www.blogjava.net/chaocai/archive/2009/08/25/292531.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Mini-Container 在已发布在SourceForge上</title><link>http://www.blogjava.net/chaocai/archive/2009/06/10/281210.html</link><dc:creator>超越巅峰</dc:creator><author>超越巅峰</author><pubDate>Wed, 10 Jun 2009 12:48:00 GMT</pubDate><guid>http://www.blogjava.net/chaocai/archive/2009/06/10/281210.html</guid><wfw:comment>http://www.blogjava.net/chaocai/comments/281210.html</wfw:comment><comments>http://www.blogjava.net/chaocai/archive/2009/06/10/281210.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/chaocai/comments/commentRss/281210.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chaocai/services/trackbacks/281210.html</trackback:ping><description><![CDATA[Mini-Container 在已发布在SourceForge上<br />
相关链接：http://www.blogjava.net/chaocai/archive/2008/05/26/203020.html<br />
项目地址：<a href="http://sourceforge.net/projects/mini-container">http://sourceforge.net/projects/mini-container</a>
<img src ="http://www.blogjava.net/chaocai/aggbug/281210.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chaocai/" target="_blank">超越巅峰</a> 2009-06-10 20:48 <a href="http://www.blogjava.net/chaocai/archive/2009/06/10/281210.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>嵌入式工作流引擎(SWF ver0.94)新版发布</title><link>http://www.blogjava.net/chaocai/archive/2008/09/17/229500.html</link><dc:creator>超越巅峰</dc:creator><author>超越巅峰</author><pubDate>Wed, 17 Sep 2008 09:58:00 GMT</pubDate><guid>http://www.blogjava.net/chaocai/archive/2008/09/17/229500.html</guid><wfw:comment>http://www.blogjava.net/chaocai/comments/229500.html</wfw:comment><comments>http://www.blogjava.net/chaocai/archive/2008/09/17/229500.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/chaocai/comments/commentRss/229500.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chaocai/services/trackbacks/229500.html</trackback:ping><description><![CDATA[1 实现了针对MS SQL的DAO部分<br />
2 增加了对用户的支持，可以制定与Node相关的用户<br />
3 修改了Spring整合部分<br />
4 新增了基于Struts2的WEB程序示例<br />
<br />
下载地址：<br />
http://www.blogjava.net/Files/chaocai/swf-0.94.rar<br />
参见<br />
<a id="homepage1_HomePageDays_DaysList_ctl00_DayItem_DayList_ctl00_TitleUrl" href="../../chaocai/archive/2007/10/08/150983.html">SWF一个简单工作流引擎</a><br />
<br />
<img src ="http://www.blogjava.net/chaocai/aggbug/229500.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chaocai/" target="_blank">超越巅峰</a> 2008-09-17 17:58 <a href="http://www.blogjava.net/chaocai/archive/2008/09/17/229500.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DAO模式最佳实践</title><link>http://www.blogjava.net/chaocai/archive/2008/06/25/210685.html</link><dc:creator>超越巅峰</dc:creator><author>超越巅峰</author><pubDate>Wed, 25 Jun 2008 13:49:00 GMT</pubDate><guid>http://www.blogjava.net/chaocai/archive/2008/06/25/210685.html</guid><wfw:comment>http://www.blogjava.net/chaocai/comments/210685.html</wfw:comment><comments>http://www.blogjava.net/chaocai/archive/2008/06/25/210685.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/chaocai/comments/commentRss/210685.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chaocai/services/trackbacks/210685.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
DAO看似是一个非常简单的模式，但这个模式却十分重要，它可以帮助我们实现持久化逻辑和业务逻辑的分离；它可以帮助我们实现对多种持久化实现的支持。<br />
同时，DAO模式并没有看起来这么简单，要真正发挥它的威力需注意的方面很多，而这些方面常常被大家忽略，以下是本人总结的一些最佳实践。<br />
1 不要在DAO上控制事务的边界<br />
应该在Fa&#231;ade层控制事务的边界，这样可以提高DAO的复用性，使它适用于不同的事务策略。<br />
2 不要过分使用Checked Exception<br />
开发者常常会将DAO中的各种异常通通捕捉并通过Checked Exception抛出，其实这是中不好的习惯，因为DAO中发生的异常常常是不可恢复的（如：数据库连接问题等），既然如此就应该使用RuntimeException异常抛出，使用这种异常还有一个好处就是在CMP的情况下可以自动引发事务的回滚。<br />
3 不要在DAO中处理懒加载问题<br />
使用Hibernate就会经常遇到懒加载问题，但是这个问题不应该在DAO中解决，这样会影响DAO的复用性，应为要加载那些对象域往往是和界面相关的，这个问题应该在Fa&#231;ade层中解决，应为这是离表现层较近的一层。<br />
&nbsp;<br />
<br />
http://dev2dev.bea.com.cn/blog/chaocai/200806/dao_24_1070.html<br />
&nbsp;<br />
蔡超<br />
软件架构师<br />
软件架构顾问<br />
SCEA<br />
IBM Certified Solution Designer for OOA&amp;D vUML2<br />
Chaocai2001@yahoo.com.cn<br />
<img src ="http://www.blogjava.net/chaocai/aggbug/210685.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chaocai/" target="_blank">超越巅峰</a> 2008-06-25 21:49 <a href="http://www.blogjava.net/chaocai/archive/2008/06/25/210685.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>自己实现IoC,AOP容器-下载问题</title><link>http://www.blogjava.net/chaocai/archive/2008/06/19/209046.html</link><dc:creator>超越巅峰</dc:creator><author>超越巅峰</author><pubDate>Thu, 19 Jun 2008 00:29:00 GMT</pubDate><guid>http://www.blogjava.net/chaocai/archive/2008/06/19/209046.html</guid><wfw:comment>http://www.blogjava.net/chaocai/comments/209046.html</wfw:comment><comments>http://www.blogjava.net/chaocai/archive/2008/06/19/209046.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/chaocai/comments/commentRss/209046.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chaocai/services/trackbacks/209046.html</trackback:ping><description><![CDATA[&#8220;自己实现IoC,AOP容器&#8221;（http://www.blogjava.net/chaocai/archive/2008/05/26/203020.html）文章中给出的文件下载后有问题，请从以下地址下载。<br />
<pre id="line1"><span class="attribute-value">http://www.blogjava.net/Files/chaocai/mini-container-beta-0.9-a.rar<br />
源码下载没有问题可以继续下载。<br />
</span></pre>
<br />
<br />
<br />
<img src ="http://www.blogjava.net/chaocai/aggbug/209046.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chaocai/" target="_blank">超越巅峰</a> 2008-06-19 08:29 <a href="http://www.blogjava.net/chaocai/archive/2008/06/19/209046.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>自己实现IoC,AOP容器  源码下载</title><link>http://www.blogjava.net/chaocai/archive/2008/05/27/203261.html</link><dc:creator>超越巅峰</dc:creator><author>超越巅峰</author><pubDate>Tue, 27 May 2008 08:54:00 GMT</pubDate><guid>http://www.blogjava.net/chaocai/archive/2008/05/27/203261.html</guid><wfw:comment>http://www.blogjava.net/chaocai/comments/203261.html</wfw:comment><comments>http://www.blogjava.net/chaocai/archive/2008/05/27/203261.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/chaocai/comments/commentRss/203261.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chaocai/services/trackbacks/203261.html</trackback:ping><description><![CDATA[上一篇相关内容<br />
http://www.blogjava.net/chaocai/archive/2008/05/26/203020.html<br />
源码下载<br />
http://www.blogjava.net/Files/chaocai/mini-container-beta0.9-src.rar<br />
希望对大家有帮z，也期待大家的反馈！ 
<img src ="http://www.blogjava.net/chaocai/aggbug/203261.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chaocai/" target="_blank">超越巅峰</a> 2008-05-27 16:54 <a href="http://www.blogjava.net/chaocai/archive/2008/05/27/203261.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>自己实现IoC,AOP容器</title><link>http://www.blogjava.net/chaocai/archive/2008/05/26/203020.html</link><dc:creator>超越巅峰</dc:creator><author>超越巅峰</author><pubDate>Mon, 26 May 2008 12:21:00 GMT</pubDate><guid>http://www.blogjava.net/chaocai/archive/2008/05/26/203020.html</guid><wfw:comment>http://www.blogjava.net/chaocai/comments/203020.html</wfw:comment><comments>http://www.blogjava.net/chaocai/archive/2008/05/26/203020.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.blogjava.net/chaocai/comments/commentRss/203020.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chaocai/services/trackbacks/203020.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;Mini-Container 开发者手册(Mini-Container Beta 0.9,下载地址：http://www.blogjava.net/Files/chaocai/mini-container-beta-0.9.rar)蔡超软件架构师软件架构咨询顾问Chaocai2001@yahoo.com.cn序Mini-Container...&nbsp;&nbsp;<a href='http://www.blogjava.net/chaocai/archive/2008/05/26/203020.html'>阅读全文</a><img src ="http://www.blogjava.net/chaocai/aggbug/203020.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chaocai/" target="_blank">超越巅峰</a> 2008-05-26 20:21 <a href="http://www.blogjava.net/chaocai/archive/2008/05/26/203020.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>过细粒度的Bundle是成功实现OSGi应用的大敌</title><link>http://www.blogjava.net/chaocai/archive/2008/04/15/193219.html</link><dc:creator>超越巅峰</dc:creator><author>超越巅峰</author><pubDate>Tue, 15 Apr 2008 13:43:00 GMT</pubDate><guid>http://www.blogjava.net/chaocai/archive/2008/04/15/193219.html</guid><wfw:comment>http://www.blogjava.net/chaocai/comments/193219.html</wfw:comment><comments>http://www.blogjava.net/chaocai/archive/2008/04/15/193219.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/chaocai/comments/commentRss/193219.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chaocai/services/trackbacks/193219.html</trackback:ping><description><![CDATA[&nbsp;
<p><span style="font-family: 宋体">近期做了几个使用</span>OSGi<span style="font-family: 宋体">开发的应用，发现使用过细粒度的</span>Bundle<span style="font-family: 宋体">不会给项目带来任何好处，而很多设计人员实际都会在使用</span>OSGi<span style="font-family: 宋体">平台时陷入这个陷阱。</span></p>
<p><span style="font-family: 宋体">首先我们分析</span>OSGi<span style="font-family: 宋体">的特点及可以给我们应用带来的好处</span></p>
<p>1 <span style="font-family: 宋体">良好的动态特性</span></p>
<p>2 <span style="font-family: 宋体">更细粒度的类装载控制，多个版本组件在同一运行环境中共同运行</span></p>
<p>3 <span style="font-family: 宋体">在</span>JVM<span style="font-family: 宋体">内部实现</span>SOA<span style="font-family: 宋体">（我个人倒是认为</span>OSGi<span style="font-family: 宋体">所涉及的仅仅是</span>SOA<span style="font-family: 宋体">思想的一小部分）</span></p>
<p>4 DS<span style="font-family: 宋体">提供的</span>IoC<span style="font-family: 宋体">支持</span></p>
<p><span style="font-family: 宋体">请思考你的应用程序真的需要这些吗？</span></p>
<p><span style="font-family: 宋体">很多设计和开发人员都会在设计和实现时忽略应用的真正需要和</span>OSGi<span style="font-family: 宋体">的复杂性，将应用的所有内部细小划分都采用</span>Bundle<span style="font-family: 宋体">实现。</span></p>
<p><span style="font-family: 宋体">而我们除了应该注意采用</span>OSGi<span style="font-family: 宋体">开发和调试带来的复杂性；同时也要明白动态特性的支持并不是仅仅采用</span>OSGi<span style="font-family: 宋体">平台就可以搞定的，要真正实现动态特性必须注意模块的启动顺序无关性及对其所依赖服务的监听等，这些都会大大增加系统实现和调试的复杂性。</span></p>
<p><span style="font-family: 宋体">其实我们应该认真分析应用是否需要这些</span>OSGi<span style="font-family: 宋体">的特性及这些特性应该在应用的那些部分体现，例如我们可以在扩展方面采用</span>Bundle<span style="font-family: 宋体">实现扩展插件，至于其它部分则不必采用过多的</span>Bundles<span style="font-family: 宋体">（甚至可以采用一个大的</span>Bundle<span style="font-family: 宋体">，而其内部则可以采用如</span>Spring<span style="font-family: 宋体">来帮助我们实现模块化）。</span></p>
<p><span style="font-family: 宋体">同时，不要忘记其他的</span>framework<span style="font-family: 宋体">同样提供了很好的组件化的基础架构如</span>Spring<span style="font-family: 宋体">，</span>Pico-Container<span style="font-family: 宋体">，在</span>OSGi<span style="font-family: 宋体">与其它技术混合时</span>SCA<span style="font-family: 宋体">同样是很好的选择。</span></p>
<p><span style="font-family: 宋体">保持应用的简单性，不要针对特定技术进行设计，而要为设计选择适合的技术。</span></p>
<p style="background: white; line-height: 200%"><span style="font-size: 10.5pt; line-height: 200%">蔡超<br />
</span><span style="font-size: 10.5pt; line-height: 200%; font-family: 'MS Shell Dlg'">Chaocai2001@yahoo.com.cn</span></p>
<span style="font-size: 10.5pt; font-family: 'MS Shell Dlg'">JEE</span><span style="font-size: 10.5pt; font-family: 宋体">咨询顾问</span><span style="font-size: 10.5pt; font-family: 'MS Shell Dlg'"><br clear="all" />
SCEA(1.2&amp;5)<br clear="all" />
IBM Certified OOA&amp;D Solution Designer vUML2</span>
<img src ="http://www.blogjava.net/chaocai/aggbug/193219.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chaocai/" target="_blank">超越巅峰</a> 2008-04-15 21:43 <a href="http://www.blogjava.net/chaocai/archive/2008/04/15/193219.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring OSGI 快速入门中文教程</title><link>http://www.blogjava.net/chaocai/archive/2008/04/06/191105.html</link><dc:creator>超越巅峰</dc:creator><author>超越巅峰</author><pubDate>Sun, 06 Apr 2008 12:41:00 GMT</pubDate><guid>http://www.blogjava.net/chaocai/archive/2008/04/06/191105.html</guid><wfw:comment>http://www.blogjava.net/chaocai/comments/191105.html</wfw:comment><comments>http://www.blogjava.net/chaocai/archive/2008/04/06/191105.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/chaocai/comments/commentRss/191105.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chaocai/services/trackbacks/191105.html</trackback:ping><description><![CDATA[<p>厌倦了那些厚书（特别是那些为了赚钱而特意写厚的书），很多时候这些书让我们找不到技术要点，甚至丧失了学习的兴趣，而最终变成那些拒绝新技术的&#8220;顽固派&#8221;。<br />
其实掌握技术的最佳方式是实践，在实践中不断的深入学习。<br />
本教程旨在帮助哪些已经掌握了OSGi和Spring技术基础的开发人员，迅速将Spring DM应用于实际开发，这是一份入门教程，不求全面，但求简单。<br />
并请配合本教程的实例代码一同学习。</p>
<p>下载教程和示例:<br />
http://www.blogjava.net/Files/chaocai/spring-osgi.rar<br />
<br />
<br />
<br />
<br />
<br />
蔡超</p>
<p>JEE咨询顾问<br />
SCEA(1.2&amp;5)<br />
IBM Certified OOA&amp;D Solution Designer vUML2</p>
<img src ="http://www.blogjava.net/chaocai/aggbug/191105.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chaocai/" target="_blank">超越巅峰</a> 2008-04-06 20:41 <a href="http://www.blogjava.net/chaocai/archive/2008/04/06/191105.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>分层模式中的常见问题</title><link>http://www.blogjava.net/chaocai/archive/2008/03/19/187361.html</link><dc:creator>超越巅峰</dc:creator><author>超越巅峰</author><pubDate>Wed, 19 Mar 2008 13:48:00 GMT</pubDate><guid>http://www.blogjava.net/chaocai/archive/2008/03/19/187361.html</guid><wfw:comment>http://www.blogjava.net/chaocai/comments/187361.html</wfw:comment><comments>http://www.blogjava.net/chaocai/archive/2008/03/19/187361.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/chaocai/comments/commentRss/187361.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chaocai/services/trackbacks/187361.html</trackback:ping><description><![CDATA[<div id="div_content">
<div style="margin: 17pt 0cm 16.5pt"><strong><font size="6">引言</font></strong></div>
<div>分层结构是目前复杂应用系统开发时普遍使用的模式，软件中层之间的依赖关系约束是比较宽松的，并不要求上层仅可以依赖于直接下层，而是上层可以依赖于它的所有下层。</div>
<div>设计中我们会把各种系统的各种组件映射至不同层中，而在我所接触的一些实际项目中设计人员在映射这种组件和层间的关系时经常无意中破坏了层结构的依赖关系约束。</div>
<div align="center">
<p>&nbsp;</p>
<p><font size="2"><a href="http://dev2dev.bea.com.cn/blog/chaocai/uploadfiles/2008/03/16/486.jpg" target="_blank"><img alt="" src="http://dev2dev.bea.com.cn/blog/chaocai/uploadfiles/2008/03/16/486.jpg" border="0" /></a></font></p>
<p><font size="2">图表 <span>1</span> 典型分层结构</font></p>
</div>
<div style="margin: 17pt 0cm 16.5pt"><strong><font size="6">设计中的常见问题</font></strong></div>
<div style="margin: 13pt 0cm"><strong><font size="5">问题一:数据传输对象（DTO）是否应该属于业务层？</font></strong></div>
<div>在J2EE开发的经典著作《Core J2EE Patterns》中数据传输对象被划分在业务层模式中，那么是否数据传输对象应该被映射到业务层呢？</div>
<div>数据访问对象（DAO）在该著作中是被映射到整合层的，这样就会出现一个违反层依赖约束的问题，因为数据访问对象是要依赖于数据传输对象的，因此下层就会出现对上层的依赖了。</div>
<div>所以本人认为DTO是在各层中传输数据的，我们可以不必强求的把他们映射到上述层次中，可以把他们放置在一个公共包中。</div>
<div>&nbsp;</div>
<div style="margin: 13pt 0cm"><strong><font size="5">问题二:使用POJO作业务对象的轻量级架构与上述层模型的映射</font></strong></div>
<div>在使用POJO的轻量级结构中我们通常会使用持久化框架（如Hibernate/JPA）同时会在架构中引入仓库对象(Repository Object)，负责业务对象的获取和保存。（注意：他的功能和DAO是有区别的，仓库对象中通常只应包括业务对象的获取和保存逻辑）。</div>
<div>通常设计人员会把业务对象映射至业务层，而将仓库对象映射至整合层。由于仓库对象对于业务对象的依赖关系就会破坏依赖关系约束，所以这种映射方式显然不正确。</div>
<div>下图是作者推荐的映射方式</div>
<div align="center">
<p>&nbsp;</p>
<p><font size="2"><a href="http://dev2dev.bea.com.cn/blog/chaocai/uploadfiles/2008/03/16/487.jpg" target="_blank"><img alt="" src="http://dev2dev.bea.com.cn/blog/chaocai/uploadfiles/2008/03/16/487.jpg" border="0" /></a></font></p>
<p><font size="2">图表 <span>2</span> 轻量级架构参考模型</font></p>
</div>
<div>&nbsp;</div>
<div>可以看到业务对象和仓库对象都被映射至业务层，而持久化框架被映射到了整合层。</div>
<div>&nbsp;</div>
<div style="margin: 17pt 0cm 16.5pt"><strong><font size="6">总结</font></strong></div>
<p><span style="font-size: 10.5pt">因此大家在设计过程中不要仅仅将分层结构留于形式，而要时刻注意设计是否符合这种架构模式，这样才能真正发挥这种架构模式的优势。</span></p>
<p><span style="font-size: 10.5pt"><span style="font-size: 10.5pt">&nbsp;</span></span></p>
<div>蔡超<br />
<a herf="http://dev2dev.bea.com.cn/blog/chaocai/200803/architecture_16_942.html">http://dev2dev.bea.com.cn/blog/chaocai/200803/architecture_16_942.html</a><br />
</div>
<div>JavaEE 咨询顾问</div>
<div>SCEA (1.2&amp;5.0)</div>
<div>IBM Certified Solution Designer for OOA&amp;D UML2</div>
</div>
<img src ="http://www.blogjava.net/chaocai/aggbug/187361.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chaocai/" target="_blank">超越巅峰</a> 2008-03-19 21:48 <a href="http://www.blogjava.net/chaocai/archive/2008/03/19/187361.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>终于通过了SCEA5 Beta版的考试</title><link>http://www.blogjava.net/chaocai/archive/2008/02/20/180768.html</link><dc:creator>超越巅峰</dc:creator><author>超越巅峰</author><pubDate>Wed, 20 Feb 2008 01:25:00 GMT</pubDate><guid>http://www.blogjava.net/chaocai/archive/2008/02/20/180768.html</guid><wfw:comment>http://www.blogjava.net/chaocai/comments/180768.html</wfw:comment><comments>http://www.blogjava.net/chaocai/archive/2008/02/20/180768.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/chaocai/comments/commentRss/180768.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chaocai/services/trackbacks/180768.html</trackback:ping><description><![CDATA[这个考试和原来的SCEA一样分成三个部分<br />
1 选择，基础知识<br />
2 设计，<br />
3 简答<br />
感觉Beta版比正式版难度大多了，题目数量特别多。而且设计题难度也大。<br />
<br />
<img src ="http://www.blogjava.net/chaocai/aggbug/180768.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chaocai/" target="_blank">超越巅峰</a> 2008-02-20 09:25 <a href="http://www.blogjava.net/chaocai/archive/2008/02/20/180768.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何在程序中直接使用Spring的工具类</title><link>http://www.blogjava.net/chaocai/archive/2007/12/26/Spring.html</link><dc:creator>超越巅峰</dc:creator><author>超越巅峰</author><pubDate>Wed, 26 Dec 2007 09:38:00 GMT</pubDate><guid>http://www.blogjava.net/chaocai/archive/2007/12/26/Spring.html</guid><wfw:comment>http://www.blogjava.net/chaocai/comments/170651.html</wfw:comment><comments>http://www.blogjava.net/chaocai/archive/2007/12/26/Spring.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/chaocai/comments/commentRss/170651.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chaocai/services/trackbacks/170651.html</trackback:ping><description><![CDATA[<div><div id="blog_text"><div>Spring中存在大量的工具类，如：RMI相关的。Spring所提供的 RMI的支持大大简化了RMI的开发难度，不过通常我们都是采用配置的方式，通过标准的spring bean来使用它们，这样虽然简化了开发，但是也限制了一些灵活性。因为bean的属性都是在配置时设定的（如RMI客户端中的服务的URL），而有时我 们需要在运行时生成这些属性，这时其实只要我们直接使用这些工具类就可以了。</div> <div>要在程序中直接使用RmiProxyFactoryBean，我们就必须了解spring是如何使用这个类为我们生成客户端代理的，然后在程序中使用与spring相同的调用方式。</div> <div>RmiProxyFactoryBean是一个工厂类，平时我们通过spring获得的并不是这个工厂类的实例，而是用这个工厂类创建的proxy的实例，这个类实现了spring中标准的FactoryBean接口。FactoryBean接口中定义了三个方法：</div> <table style="width: 100%;" border="1" cellpadding="0" cellspacing="0" width="100%">     <tbody>         <tr>             <td style="border-color: #d4d0c8; padding: 2.25pt; background: white none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; width: 1%;" valign="top" width="1%">             <div align="right"><span style="font-size: 12pt; color: black;"><a title="class or interface in java.lang" href="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html">Object</a></span></div>             </td>             <td style="border-color: #d4d0c8; padding: 2.25pt; background: white none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">             <div align="left"><strong><span style="font-size: 12pt; color: black;"><a href="http://dev2dev.bea.com.cn/blog/fckeditor/editor/spring/spring-framework-2.0-with-dependencies/spring-framework-2.0/docs/api/org/springframework/beans/factory/FactoryBean.html#getObject%28%29">getObject</a></span></strong><span style="font-size: 12pt; color: black;">()</span><span style="font-size: 10pt; color: black;"> <br />             &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Return an instance (possibly shared or independent) of the object managed by this factory.</span></div>             </td>         </tr>         <tr>             <td style="border-color: #d4d0c8; padding: 2.25pt; background: white none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; width: 1%;" valign="top" width="1%">             <div align="right"><span style="font-size: 12pt; color: black;"> <a title="class or interface in java.lang" href="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Class.html">Class</a></span></div>             </td>             <td style="border-color: #d4d0c8; padding: 2.25pt; background: white none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">             <div align="left"><strong><span style="font-size: 12pt; color: black;"><a href="http://dev2dev.bea.com.cn/blog/fckeditor/editor/spring/spring-framework-2.0-with-dependencies/spring-framework-2.0/docs/api/org/springframework/beans/factory/FactoryBean.html#getObjectType%28%29">getObjectType</a></span></strong><span style="font-size: 12pt; color: black;">()</span><span style="font-size: 10pt; color: black;"> <br />             &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Return the type of object that this FactoryBean creates, or </span><span style="font-size: 12pt; color: black;">null</span><span style="font-size: 10pt; color: black;"> if not known in advance.</span></div>             </td>         </tr>         <tr>             <td style="border-color: #d4d0c8; padding: 2.25pt; background: white none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; width: 1%;" valign="top" width="1%">             <div align="right"><span style="font-size: 12pt; color: black;"> boolean</span></div>             </td>             <td style="border-color: #d4d0c8; padding: 2.25pt; background: white none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">             <div align="left"><strong><span style="font-size: 12pt; color: black;"><a href="http://dev2dev.bea.com.cn/blog/fckeditor/editor/spring/spring-framework-2.0-with-dependencies/spring-framework-2.0/docs/api/org/springframework/beans/factory/FactoryBean.html#isSingleton%28%29">isSingleton</a></span></strong><span style="font-size: 12pt; color: black;">()</span><span style="font-size: 10pt; color: black;"> <br />             &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Is the bean managed by this factory a singleton or a prototype?</span></div>             </td>         </tr>     </tbody> </table> <div>我们通过getBean获取这类工厂Bean（实现了FactoryBean接口的Bean）时，spring并不会返回工厂类的实例，而是调用工厂类的getObject方法并把方法的返回值返回给我们。</div> <div>这样你就明白了原来我们获得的RMI的Proxy是通过RmiProxyFactoryBean的getObject方法生成的。</div> <div>这时你一定认为下面的程序就可以搞定了：</div> <div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &#8230;</div> <div style="margin: 0cm 0cm 0pt 21pt; text-indent: 21pt;">RmiProxyFactoryBean proxy=new RmiProxyFactoryBean();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </div> <div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  proxy.setServiceInterface(Calculator.class);</div> <div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  proxy.setServiceUrl(url);</div> <div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Calculator client=(Calculator)proxy.getObject();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </div> <div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  System.out.println(client.add(1,1));</div> <div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &#8230;</div> <div>运行程序你会发现上面这段程序并不成功，程序会抛出<u><span style="background: white none repeat scroll 0% 0%; font-size: 10pt; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: navy;">java.lang.NullPointerException</span></u><u><span style="background: white none repeat scroll 0% 0%; font-size: 10pt; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: navy;">异常。</span></u></div> <div><span style="background: white none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">问题在哪里呢？研究一下你会发现</span>RmiProxyFactoryBean还实现了spring的<span style="font-size: 10pt;">InitializingBean</span>接口，接口中包含一个方法<code><strong><span style="font-size: 12pt; color: black;"><a href="http://dev2dev.bea.com.cn/blog/fckeditor/editor/spring/spring-framework-2.0-with-dependencies/spring-framework-2.0/docs/api/org/springframework/beans/factory/InitializingBean.html#afterPropertiesSet%28%29"><span style="font-size: 10.5pt;">afterPropertiesSet</span></a></span></strong></code><code><span style="font-size: 12pt; color: black;">()</span></code><code><span style="font-size: 12pt; color: black;">，在所有属性注入完成后spring会调用这个方法，因此上面的程序并没有完全正确的模拟spring的调用过程。</span></code></div> <div><code><span style="font-size: 12pt; color: black;">修改代码：</span></code></div> <div>&#8230;</div> <div style="margin: 0cm 0cm 0pt 21pt; text-indent: 21pt;">RmiProxyFactoryBean proxy=new RmiProxyFactoryBean();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </div> <div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  proxy.setServiceInterface(Calculator.class);</div> <div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  proxy.setServiceUrl(url);</div> <div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  proxy.afterPropertiesSet();</div> <div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Calculator client=(Calculator)proxy.getObject();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </div> <div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  System.out.println(client.add(1,1));</div> <div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &#8230;</div> <div><code><span style="font-size: 12pt; color: black;">这次终于成功了！</span></code></div> <p><span style="font-size: 10.5pt;">最后，此例告诉大家有时我们可以直接调用</span><span style="font-size: 10.5pt;">spring</span><span style="font-size: 10.5pt;">中的工具类，来完成我们的特殊需求，此时要注意的是正确模拟</span><span style="font-size: 10.5pt;">spring</span><span style="font-size: 10.5pt;">的对</span><span style="font-size: 10.5pt;">bean</span><span style="font-size: 10.5pt;">创建和调用过程。</span></p></div></div><img src ="http://www.blogjava.net/chaocai/aggbug/170651.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chaocai/" target="_blank">超越巅峰</a> 2007-12-26 17:38 <a href="http://www.blogjava.net/chaocai/archive/2007/12/26/Spring.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring2.5的组件自动搜索</title><link>http://www.blogjava.net/chaocai/archive/2007/12/04/165134.html</link><dc:creator>超越巅峰</dc:creator><author>超越巅峰</author><pubDate>Tue, 04 Dec 2007 04:50:00 GMT</pubDate><guid>http://www.blogjava.net/chaocai/archive/2007/12/04/165134.html</guid><wfw:comment>http://www.blogjava.net/chaocai/comments/165134.html</wfw:comment><comments>http://www.blogjava.net/chaocai/archive/2007/12/04/165134.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/chaocai/comments/commentRss/165134.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chaocai/services/trackbacks/165134.html</trackback:ping><description><![CDATA[http://dev2dev.bea.com.cn/blog/chaocai/200712/spring_osgi_04_719.html
<img src ="http://www.blogjava.net/chaocai/aggbug/165134.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chaocai/" target="_blank">超越巅峰</a> 2007-12-04 12:50 <a href="http://www.blogjava.net/chaocai/archive/2007/12/04/165134.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Facade与边界控制</title><link>http://www.blogjava.net/chaocai/archive/2007/10/26/156030.html</link><dc:creator>超越巅峰</dc:creator><author>超越巅峰</author><pubDate>Fri, 26 Oct 2007 02:00:00 GMT</pubDate><guid>http://www.blogjava.net/chaocai/archive/2007/10/26/156030.html</guid><wfw:comment>http://www.blogjava.net/chaocai/comments/156030.html</wfw:comment><comments>http://www.blogjava.net/chaocai/archive/2007/10/26/156030.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/chaocai/comments/commentRss/156030.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chaocai/services/trackbacks/156030.html</trackback:ping><description><![CDATA[<p>多层结构是J2EE应用开发的基本模式，很多开发者都会按照多层结构来组织自己的应用（通常分为Facade，Application Service,DAO等层），但是他们往往会选择在不同层上去控制事务和Hibernate Session的边界，可千万不要小看这样的选择它会大大影响程序的可维护性和可复用性。<br />
其实在Facade层来控制事务的边界通常都是最佳选择。我们知道Facade层的粗粒度接口是直接为用户请求提供相应服务的，在典型的J2EE环境中通常使用Session Bean来实现Facade层，并且使用CMT。这时如果有的开发人员在其他层次控制了事务如DAO，由于这些层次通常不会采用EJB实现，所以所使用的事务为容器提供的用户管理事务，根据EJB的事务规范CMT是无法把事务上下文传递到用户管理事务的边界中的，由于J2EE并不支持事务的嵌套，所以当来自Facade的CMT事务遇见DAO的事务时，内部事务将被挂起，这样整个事务的情况，就会和设想的业务逻辑产生很大的差异。<br />
并且有时不同业务逻辑的实现会复用DAO提供多个方法，所以很难控制事务的边界，导致这些方法难以被复用。<br />
对于Hibernate Session，由于存在懒加载的问题，所以开发人员常会预见这样的异常LazyInitializationException。避免这个问题就要求在关闭session前要装载好要使用的对象关系域。而这种逻辑通常只与界面显示内容相关，如果把session的边界控制放置在DAO或者Application Service中就会使业务逻辑的实现要和界面显示逻辑混合在一起，我们必须在这些方法中加载那些界面显示需要的对象关系域。而界面显示是经常变化的，并且业务逻辑会被多个不同的界面所复用，如果这样Application Service，DAO中方法的复用性就会大大降低。<br />
把这些工作放在离表现层最近的Facade中便可以避免这些问题。<br />
注意在其他层次中我们不需要控制session的边界，我们通常采用getCurrentSession()来获得当前事务中的session,记住这个方法必须在事务上下文存在的情况下才可以调用，并且在事务被提交的时候Hibernate会在自动关闭session,所以我们不要显示的关闭session.</p>
<img src ="http://www.blogjava.net/chaocai/aggbug/156030.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chaocai/" target="_blank">超越巅峰</a> 2007-10-26 10:00 <a href="http://www.blogjava.net/chaocai/archive/2007/10/26/156030.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SWF一个简单工作流引擎[支持spring的版本1.3]</title><link>http://www.blogjava.net/chaocai/archive/2007/10/08/151106.html</link><dc:creator>超越巅峰</dc:creator><author>超越巅峰</author><pubDate>Mon, 08 Oct 2007 09:03:00 GMT</pubDate><guid>http://www.blogjava.net/chaocai/archive/2007/10/08/151106.html</guid><wfw:comment>http://www.blogjava.net/chaocai/comments/151106.html</wfw:comment><comments>http://www.blogjava.net/chaocai/archive/2007/10/08/151106.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/chaocai/comments/commentRss/151106.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chaocai/services/trackbacks/151106.html</trackback:ping><description><![CDATA[<h2><a id="homepage1_HomePageDays_DaysList_ctl00_DayItem_DayList_ctl00_TitleUrl" href="http://www.blogjava.net/chaocai/archive/2007/10/08/150983.html">SWF一个简单工作流引擎</a></h2>
你是否已经被像JBPM,XFLow等那样的复杂编程和配置搞头昏脑胀；被他们所依赖的大量jar和容器搞得不知所措。<br />
如果这样就试试笔者开发的这个简单工作流引擎吧，配置和编程都很简单，也不依赖任何容器。支持spring的版本。<br />
下载地址：<br />
http://www.blogjava.net/Files/chaocai/swf-beta-1[1].3-bin.zip<br />
内附用户手册<br />
（SWF开发设计：蔡超，北京天融信，<a href="mailto:chaocai2001@yahoo.com.cn">chaocai2001@yahoo.com.cn</a>)<br />
&nbsp;
<h1><span style="font-family: 宋体">简介</span></h1>
<p>SWF<span style="font-family: 宋体">是一种嵌入式的工作流引擎，它不需要任何应用服务器的支持。</span>SWF<span style="font-family: 宋体">使用十分简单，但却可以满足多数流程驱动应用的需求。并且支持和主流j2ee框架整合(spring).<br />
</span></p>
<p><span style="font-family: 宋体">本文介绍如何基于</span>SWF<span style="font-family: 宋体">开发流程驱动的应用。</span></p>
<img src ="http://www.blogjava.net/chaocai/aggbug/151106.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chaocai/" target="_blank">超越巅峰</a> 2007-10-08 17:03 <a href="http://www.blogjava.net/chaocai/archive/2007/10/08/151106.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SWF一个简单工作流引擎</title><link>http://www.blogjava.net/chaocai/archive/2007/10/08/150983.html</link><dc:creator>超越巅峰</dc:creator><author>超越巅峰</author><pubDate>Mon, 08 Oct 2007 02:44:00 GMT</pubDate><guid>http://www.blogjava.net/chaocai/archive/2007/10/08/150983.html</guid><wfw:comment>http://www.blogjava.net/chaocai/comments/150983.html</wfw:comment><comments>http://www.blogjava.net/chaocai/archive/2007/10/08/150983.html#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://www.blogjava.net/chaocai/comments/commentRss/150983.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chaocai/services/trackbacks/150983.html</trackback:ping><description><![CDATA[你是否已经被像JBPM,XFLow等那样的复杂编程和配置搞头昏脑胀；被他们所依赖的大量jar和容器搞得不知所措。<br />
如果这样就试试笔者开发的这个简单工作流引擎吧，配置和编程都很简单，也不依赖任何容器。马上会推出支持spring的版本。<br />
下载地址：<br />
<a href="http://www.blogjava.net/Files/chaocai/swf-beta-1-bin.zip">http://www.blogjava.net/Files/chaocai/swf-beta-1-bin.zip</a><br />
内附用户手册<br />
（SWF开发设计：蔡超，北京天融信，<a href="mailto:chaocai2001@yahoo.com.cn">chaocai2001@yahoo.com.cn</a>)<br />
&nbsp;
<h1><span style="font-family: 宋体">简介</span></h1>
<p>SWF<span style="font-family: 宋体">是一种嵌入式的工作流引擎，它不需要任何应用服务器的支持。</span>SWF<span style="font-family: 宋体">使用十分简单，但却可以满足多数流程驱动应用的需求。</span></p>
<p><span style="font-family: 宋体">本文介绍如何基于</span>SWF<span style="font-family: 宋体">开发流程驱动的应用。</span></p>
<img src ="http://www.blogjava.net/chaocai/aggbug/150983.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chaocai/" target="_blank">超越巅峰</a> 2007-10-08 10:44 <a href="http://www.blogjava.net/chaocai/archive/2007/10/08/150983.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring集成XFire开发WebService</title><link>http://www.blogjava.net/chaocai/archive/2007/09/17/145932.html</link><dc:creator>超越巅峰</dc:creator><author>超越巅峰</author><pubDate>Mon, 17 Sep 2007 10:01:00 GMT</pubDate><guid>http://www.blogjava.net/chaocai/archive/2007/09/17/145932.html</guid><wfw:comment>http://www.blogjava.net/chaocai/comments/145932.html</wfw:comment><comments>http://www.blogjava.net/chaocai/archive/2007/09/17/145932.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/chaocai/comments/commentRss/145932.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chaocai/services/trackbacks/145932.html</trackback:ping><description><![CDATA[&nbsp;
<p>Spring<span style="font-family: 宋体">是目前最流行的</span>JavaEE Framework<span style="font-family: 宋体">，但是使用</span>Spring<span style="font-family: 宋体">的</span>Spring-WS<span style="font-family: 宋体">开发</span>WebService<span style="font-family: 宋体">却十分繁琐。</span>XFire<span style="font-family: 宋体">是一个简化</span>WebService<span style="font-family: 宋体">开发的开源项目，通过</span>Spring<span style="font-family: 宋体">和</span>XFire<span style="font-family: 宋体">的结合可以大大简化基于</span>Spring Framework<span style="font-family: 宋体">的应用中的</span>WebService<span style="font-family: 宋体">开发。</span></p>
<p>Spring<span style="font-family: 宋体">和</span>XFire<span style="font-family: 宋体">可以通过多种方式结合，下文介绍的是笔者常用的一种简单而实用的方法。所用的</span>Spring<span style="font-family: 宋体">版本为</span>2.0,XFire<span style="font-family: 宋体">版本为</span>1.2.6<span style="font-family: 宋体">。</span></p>
<p>1 <span style="font-family: 宋体">配置</span>XFire Servlet</p>
<p><span style="font-family: 宋体">在</span>web.xml<span style="font-family: 宋体">中加入如下配置：</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">servlet</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">servlet-name</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">XFireServlet</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">servlet-name</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp; </span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">servlet-class</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; org.codehaus.xfire.spring.XFireSpringServlet</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">servlet-class</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">servlet</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">servlet-mapping</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">servlet-name</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">XFireServlet</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">servlet-name</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">url-pattern</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">/servlet/XFireServlet/*</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">url-pattern</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">servlet-mapping</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">servlet-mapping</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">servlet-name</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">XFireServlet</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">servlet-name</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">url-pattern</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">/services/*</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">url-pattern</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">servlet-mapping</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">2 </span><span style="font-size: 10pt; color: black; font-family: 宋体">配置</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">Spring</span><span style="font-size: 10pt; color: black; font-family: 宋体">的监听器，同基于</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">spring</span><span style="font-size: 10pt; color: black; font-family: 宋体">的</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">Web</span><span style="font-size: 10pt; color: black; font-family: 宋体">项目一样</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">Spring</span><span style="font-size: 10pt; color: black; font-family: 宋体">的监听器是必不可少的。</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">context-param</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">param-name</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">contextConfigLocation</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">param-name</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">param-value</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;classpath:org/codehaus/xfire/spring/xfire.xml,</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;/WEB-INF/applicationContext.xml</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">param-value</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">context-param</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">listener</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">listener-class</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp; org.springframework.web.context.ContextLoaderListener</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">listener-class</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">listener</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp; </span></p>
<p><span style="font-size: 10pt; color: black; font-family: 宋体">以下是完整的</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">web.xml</span><span style="font-size: 10pt; color: black; font-family: 宋体">配置文件</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;?</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">xml </span><span style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'">version</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"1.0" </span><span style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'">encoding</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"UTF-8"</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">?&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">web-app </span><span style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'">version</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"2.4" </span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'">xmlns</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"http://java.sun.com/xml/ns/j2ee" </span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'">xmlns:xsi</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"http://www.w3.org/2001/XMLSchema-instance" </span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'">xsi:schemaLocation</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"http://java.sun.com/xml/ns/j2ee </span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp; http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp; </span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">context-param</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">param-name</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">contextConfigLocation</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">param-name</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">param-value</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;classpath:org/codehaus/xfire/spring/xfire.xml,</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;/WEB-INF/applicationContext.xml</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">param-value</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">context-param</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">listener</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">listener-class</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp; org.springframework.web.context.ContextLoaderListener</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">listener-class</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">listener</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp; </span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">servlet</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">servlet-name</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">XFireServlet</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">servlet-name</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp; </span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">servlet-class</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; org.codehaus.xfire.spring.XFireSpringServlet</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">servlet-class</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">servlet</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">servlet-mapping</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">servlet-name</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">XFireServlet</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">servlet-name</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">url-pattern</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">/servlet/XFireServlet/*</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">url-pattern</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">servlet-mapping</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">servlet-mapping</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">servlet-name</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">XFireServlet</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">servlet-name</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">url-pattern</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">/services/*</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">url-pattern</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">servlet-mapping</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">web-app</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">3 </span><span style="font-size: 10pt; color: black; font-family: 宋体">定义接口及实现服务</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 宋体">定义接口，这个接口中定义要通过</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">WebService</span><span style="font-size: 10pt; color: black; font-family: 宋体">暴露的方法</span></p>
<p style="text-align: left" align="left"><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">package</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'"> org.ccsoft;</span></p>
<p style="text-align: left" align="left"><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">public</span></strong><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">interface</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'"> <span style="background: silver">HelloWS</span> {</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp; </span><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">public</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'"> String sayHello(String sb);</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">}</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 宋体">实现服务</span></p>
<p style="text-align: left" align="left"><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">package</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'"> org.ccsoft;</span></p>
<p style="text-align: left" align="left"><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">public</span></strong><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">class</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'"> HelloWSImp </span><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">implements</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'"> HelloWS {</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp; </span><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">public</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'"> String <span style="background: silver">sayHello</span>(String sb) {</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: #3f7f5f; font-family: 'Courier New'">// </span><strong><span style="font-size: 10pt; color: #7f9fbf; font-family: 'Courier New'">TODO</span></strong><span style="font-size: 10pt; color: #3f7f5f; font-family: 'Courier New'"> Auto-generated method stub</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">return</span></strong><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"Hello "</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">+sb;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp; }</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">}</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">4 </span><span style="font-size: 10pt; color: black; font-family: 宋体">配置服务</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 宋体">将上文中实现的服务，加入到</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">spring</span><span style="font-size: 10pt; color: black; font-family: 宋体">的配置文件中。</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">&lt;beans xmlns="http://www.springframework.org/schema/beans"</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xsi:schemaLocation="</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp; &lt;bean id="helloWS" class="org.ccsoft.HelloWSImp"/&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp; &lt;bean name="helloService" class="org.codehaus.xfire.spring.ServiceBean"&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp; &lt;property name="serviceBean" ref="helloWS"/&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp; &lt;property name="serviceClass" value="org.ccsoft.HelloWS"/&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp; &lt;property name="inHandlers"&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;list&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ref bean="addressingHandler"/&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/list&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp; &lt;/property&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">&lt;/bean&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;bean id="addressingHandler" class="org.codehaus.xfire.addressing.AddressingInHandler"/&gt;</span></p>
<p><span style="font-size: 10pt; font-family: 'Courier New'">&lt;/beans&gt;</span></p>
<p><span style="font-family: 宋体">好了现在你可以通过</span><a href="http://127.0.0.1:8080/XFireWS1/services/HelloWS?wsdl">http://127.0.0.1:8080/XFireWS1/services/HelloWS?wsdl</a><span style="font-family: 宋体">来验证是否部署成功了。</span></p>
<p><span style="font-family: 宋体">—————————————————————————————————————</span></p>
<p><span style="font-family: 宋体">蔡</span> <span style="font-family: 宋体">超</span> <br />
SCEA <span style="font-family: 宋体">，</span> SCBCD <span style="font-family: 宋体">，</span> MCSD<br />
IBM Certified Specialist RUP<br />
IBM Certified Solution Designer OOA&amp;D UML v2<br />
<span style="font-family: 宋体">北京天融信软件架构师</span><br />
SUN,Microsoft<span style="font-family: 宋体">培训中心特邀高端教师</span><br />
<span style="font-family: 宋体">常年提供架构咨询服务</span> <br />
chaocai2001@yahoo.com.cn <span style="font-family: 宋体">，</span> 010-82776427</p>
<img src ="http://www.blogjava.net/chaocai/aggbug/145932.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chaocai/" target="_blank">超越巅峰</a> 2007-09-17 18:01 <a href="http://www.blogjava.net/chaocai/archive/2007/09/17/145932.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EJB中使用Hibernate的几个问题辨析 </title><link>http://www.blogjava.net/chaocai/archive/2007/08/19/137973.html</link><dc:creator>超越巅峰</dc:creator><author>超越巅峰</author><pubDate>Sun, 19 Aug 2007 11:44:00 GMT</pubDate><guid>http://www.blogjava.net/chaocai/archive/2007/08/19/137973.html</guid><wfw:comment>http://www.blogjava.net/chaocai/comments/137973.html</wfw:comment><comments>http://www.blogjava.net/chaocai/archive/2007/08/19/137973.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/chaocai/comments/commentRss/137973.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chaocai/services/trackbacks/137973.html</trackback:ping><description><![CDATA[public class HibernateTestBean implements SessionBean {<br>&nbsp;&nbsp;&nbsp; SessionContext sessionContext;<br>&nbsp;&nbsp;&nbsp; SessionFactory sf;<br>&nbsp;&nbsp;&nbsp; public void setSessionContext(SessionContext sessionContext) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.sessionContext = sessionContext;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InitialContext ctx = new InitialContext();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sf=(SessionFactory) ctx.lookup("java:/hibernate/SessionFactory");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (NamingException ex) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ex.printStackTrace();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; public void tran(){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tran1();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tran2();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; public void tran1() {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Session session=sf.getCurrentSession();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Message msg=new Message();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; msg.setCreateTime(new Date());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; msg.setDetail("trans1");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.save(msg);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("Session:"+session.hashCode());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.flush();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.close();<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; public void tran2() {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Session session=sf.getCurrentSession();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Message msg=new Message();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; msg.setCreateTime(new Date());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; msg.setDetail("trans2");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.save(msg);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("Session:"+session.hashCode());<br>&nbsp;&nbsp;&nbsp; //&nbsp; throw new RuntimeException("wrong");<br>&nbsp; }<br>&#8230;&#8230;<br>}<br>注：EJB采用CMT，各方法的事务属性是required<br>客户端调用tran以上代码可以正确运行吗？<br>如果把tran1中的sf.getCurrentSession();改为sf.openSession()可以正确运行吗？<br>辨析：<br>1 上述代码是不能正确运行的，运行tran2时会抛出异常，告诉你session is closed.<br>其实这是应为getCurrentSession()会使用环境已有的Session，同时注意getCurrentSession()要在事务的环境中使用。<br>这是也许你一定会问，那么什么时候关闭Session呢？答案是事务完成的时候（提交或是回滚）。<br><br>2 如果上述代码tran1中的sf.getCurrentSession();改为sf.openSession()代码将可以正确运行。这是因为openSession()每次都会返回一个新的Session。而在tran2种的sf.getCurrentSession()并不会使用tran1中的session,而是会使用当前事务环境中的默认的session.<br>也许你会问如果tran2种的调用抛出RuntimeException，tran1所作的操作还可以回滚吗？<br>答案是仍然可以回滚的.<br><br><br>蔡超<br>北京天融信 软件架构师<br>SCEA，SCBCD，MCSD<br>IBM Certified Specialist RUP v2003<br>IBM Certified Solution Designer OOA&amp;D UMLv2<br>
<img src ="http://www.blogjava.net/chaocai/aggbug/137973.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chaocai/" target="_blank">超越巅峰</a> 2007-08-19 19:44 <a href="http://www.blogjava.net/chaocai/archive/2007/08/19/137973.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring构建应用系统的最佳架构与模式实践（1） </title><link>http://www.blogjava.net/chaocai/archive/2007/05/08/115937.html</link><dc:creator>超越巅峰</dc:creator><author>超越巅峰</author><pubDate>Tue, 08 May 2007 06:25:00 GMT</pubDate><guid>http://www.blogjava.net/chaocai/archive/2007/05/08/115937.html</guid><wfw:comment>http://www.blogjava.net/chaocai/comments/115937.html</wfw:comment><comments>http://www.blogjava.net/chaocai/archive/2007/05/08/115937.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/chaocai/comments/commentRss/115937.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chaocai/services/trackbacks/115937.html</trackback:ping><description><![CDATA[蔡 超<br>SCEA，SCBCD，MCSD，IBM RUP Specilist<br>北京天融信软件架构师<br>SUN,Microsoft培训中心特邀高端教师<br>常年提供架构咨询服务<br>chaocai2001@yahoo.com.cn ，010-82776427<br><br>引言<br>在使用Spring构建应用时和采用EJB构建应用一样同样也存在不少常用模式和最佳实践，当然很多Core J2EE Pattern仍然是我们构建spring应用中的优秀模式，不过有的也不再适用了（如：IoC的应用使得Service Locator不再适用，Hibernate取代Entity Bean使得DTO不再适用等）。<br>下文是一些在以Spring为核心的架构中的常见模式和架构最佳实践。<br><br><img style="WIDTH: 400px; CURSOR: pointer" onclick=javascript:window.open(this.src); src="http://dev2dev.bea.com.cn/bbs/uploadimages/20075/200757143452305420.JPG" onload="javascript:if(this.width>400)this.style.width=400;"><br></img><br><br>图表 1 Spring应用常见架构模式列表<br>DAO模式<br>虽然采用了诸如Hibernate这样的O/R Mapping工具或是iBates这样的SQL Mapping工具但是采用DAO模式仍有相当好处。<br>在实际应用中我们常会遇到如下问题：<br>1 性能问题：由于性能问题我们可能要改变数据访问方式，如采用JDBC替换Hibernate这时，这时如果采用了DAO模式，数据访问被有效的封装和业务逻辑完全分离，易于实现替换。<br>2 移植问题：需要支持多种数据库，DAO模式仍然是一种稳妥的选择。虽然诸如Hibernate及iBates也提供很好的数据库无关性，但如果使用某些数据库的特殊功能时，就会出现问题。<br>当然，对于是否采用DAO模式也不可一概而论，应为他毕竟会增加应用的开发复杂性。个人认为很关键的一个判定条件是业务逻辑是否会和持久化逻辑混合。<br><br>Application Service模式<br>封装一定的业务逻辑和功能，提高复用性，即防止Fa&amp;ccedil;ade和业务对象的臃肿。注意在此可以应用Command模式及Strategy模式提供系统可维护性和可扩展性。<br>这个模式很重要，但常常被大家忽略，这时应为我们常会把逻辑放在Fa&amp;ccedil;ade中，其实这是很错误的。例如：我们可能会提供多种不同Fa&amp;ccedil;ade以适应不同的访问方式，这样就会出现大量重复的业务逻辑代码。<br><br>Fa&amp;ccedil;ade模式<br>为客户端提供访问业务组件的统一模式。便于实现对不同访问方式的支持（如：远程或本地）。特别在远程调用时通过暴露粗粒度的接口，提高系统的性能。<br>同时，可以根据客户的不同，通过不同Fa&amp;ccedil;ade来控制客户的操作。
<img src ="http://www.blogjava.net/chaocai/aggbug/115937.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chaocai/" target="_blank">超越巅峰</a> 2007-05-08 14:25 <a href="http://www.blogjava.net/chaocai/archive/2007/05/08/115937.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring POJO真的比无状体的会话EJB（SLSB）快吗？</title><link>http://www.blogjava.net/chaocai/archive/2007/03/29/107140.html</link><dc:creator>超越巅峰</dc:creator><author>超越巅峰</author><pubDate>Thu, 29 Mar 2007 02:29:00 GMT</pubDate><guid>http://www.blogjava.net/chaocai/archive/2007/03/29/107140.html</guid><wfw:comment>http://www.blogjava.net/chaocai/comments/107140.html</wfw:comment><comments>http://www.blogjava.net/chaocai/archive/2007/03/29/107140.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/chaocai/comments/commentRss/107140.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chaocai/services/trackbacks/107140.html</trackback:ping><description><![CDATA[
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">目前，很多人都认为</span>
				<span lang="EN-US">spring</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">不论在那个方面都会比</span>
				<span lang="EN-US">SLSB</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">有更高的效率，真的是这样吗？</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0">
				<span lang="EN-US">spring</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中的</span>
				<span lang="EN-US">POJO</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的生命周期可以是</span>
				<span lang="EN-US">Singlton</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">或每请求创建（或是</span>
				<span lang="EN-US">2.0</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">支持的</span>
				<span lang="EN-US">session</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">及</span>
				<span lang="EN-US">application,request</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">等范围），</span>
				<span lang="EN-US">SLSB</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是通过实例池经心管理的。如果</span>
				<span lang="EN-US">spring POJO</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">不采用</span>
				<span lang="EN-US">singlton</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的形式那么就需要承受创建和销毁</span>
				<span lang="EN-US">POJO</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的消耗，当然</span>
				<span lang="EN-US">SLSB</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的出池和入池同样会有同步的消耗，由于现在的虚拟机对象的创建和消耗速度大幅提高所以不一定比</span>
				<span lang="EN-US">SLSB</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">获取的速度慢，但是如果每个对象构建的资源消耗很大如总是需要构建或初始化复杂对象，那么</span>
				<span lang="EN-US">SLSB</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的速度显然有优势。如果</span>
				<span lang="EN-US">spring</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">采用</span>
				<span lang="EN-US">singleton</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">模式，那么其中如果需要同步，则虽然省去了创建和销毁的消耗，但是大量的同步会使性能的杀手。并且在多</span>
				<span lang="EN-US">CPU</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的服务器上没有同步的多线程并行效果更好（可以在不同的处理器上单独运行）</span>
		</p>
<img src ="http://www.blogjava.net/chaocai/aggbug/107140.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chaocai/" target="_blank">超越巅峰</a> 2007-03-29 10:29 <a href="http://www.blogjava.net/chaocai/archive/2007/03/29/107140.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EJB3使用注意（2） </title><link>http://www.blogjava.net/chaocai/archive/2007/03/27/106770.html</link><dc:creator>超越巅峰</dc:creator><author>超越巅峰</author><pubDate>Tue, 27 Mar 2007 13:33:00 GMT</pubDate><guid>http://www.blogjava.net/chaocai/archive/2007/03/27/106770.html</guid><wfw:comment>http://www.blogjava.net/chaocai/comments/106770.html</wfw:comment><comments>http://www.blogjava.net/chaocai/archive/2007/03/27/106770.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/chaocai/comments/commentRss/106770.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chaocai/services/trackbacks/106770.html</trackback:ping><description><![CDATA[
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">1 <a href="mailto:MDB可以通过@Timeout或实现java.ejb.TimedObject">MDB<span lang="EN-US" style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><span lang="EN-US">可以通过</span></span>@Timeout<span lang="EN-US" style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><span lang="EN-US">或实现</span></span>java.ejb.TimedObject</a></span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来实现定时回调</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">2 EJB3</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">规范要求在部署</span>
				<span lang="EN-US">EJB</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">时必须绑定到各业务接口的全限定名上，最终可有</span>
				<span lang="EN-US">JNDI</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">查找</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 10.5pt; mso-char-indent-count: 1.0">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如：</span>
				<span lang="EN-US">ctx.lookup(TaxRate.class.getName());</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">3<span style="mso-spacerun: yes">  </span>@Remove</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">表示</span>
				<span lang="EN-US">SFSB</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中的删除方法，如果存在</span>
				<span lang="EN-US">@PreDestory</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">则在其后执行</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 10.5pt; TEXT-INDENT: -10.5pt; mso-char-indent-count: -1.0">
				<span lang="EN-US">4 </span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">会话</span>
				<span lang="EN-US">Bean</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">不实现</span>
				<span lang="EN-US">SessionBean</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">接口，</span>
				<span lang="EN-US">MDB</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">不必实现</span>
				<span lang="EN-US">MessageDerivenBean</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，只要通过</span>
				<span lang="EN-US">@Annotation</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">标明或在部署文件中说明。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">5 EJBContext</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中加入了</span>
				<span lang="EN-US">lookup</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">方法，用于查找和</span>
				<span lang="EN-US">Bean</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">绑带的</span>
				<span lang="EN-US">JNDI</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">名</span>
		</p>
<img src ="http://www.blogjava.net/chaocai/aggbug/106770.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chaocai/" target="_blank">超越巅峰</a> 2007-03-27 21:33 <a href="http://www.blogjava.net/chaocai/archive/2007/03/27/106770.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring2 AOP在使用XML配置时如何获得target及JoinPoint</title><link>http://www.blogjava.net/chaocai/archive/2007/02/26/100790.html</link><dc:creator>超越巅峰</dc:creator><author>超越巅峰</author><pubDate>Mon, 26 Feb 2007 09:57:00 GMT</pubDate><guid>http://www.blogjava.net/chaocai/archive/2007/02/26/100790.html</guid><wfw:comment>http://www.blogjava.net/chaocai/comments/100790.html</wfw:comment><comments>http://www.blogjava.net/chaocai/archive/2007/02/26/100790.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/chaocai/comments/commentRss/100790.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chaocai/services/trackbacks/100790.html</trackback:ping><description><![CDATA[
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">蔡超</span>
				<span lang="EN-US" style="FONT-SIZE: 9pt">
						<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?>
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（</span>
				<span lang="EN-US" style="FONT-SIZE: 9pt">SCEA</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</span>
				<span lang="EN-US" style="FONT-SIZE: 9pt">MCSD</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</span>
				<span lang="EN-US" style="FONT-SIZE: 9pt">IBM RUP Specialist</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）</span>
				<span lang="EN-US" style="FONT-SIZE: 9pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">Spring Reference</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中介绍如何在采用</span>
				<span lang="EN-US">@AspectJ</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">方式在剖面中如何获取</span>
				<span lang="EN-US">target</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span>
				<span lang="EN-US">JoinPoint</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">并给出了示例，但并没有给出采用</span>
				<span lang="EN-US">XML</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">配置方式时介绍及示例，下面附上一个简单的小例子供大家参考。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">package aop;</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">import org.aspectj.lang.JoinPoint;</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">import org.aspectj.lang.ProceedingJoinPoint;</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">/**</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes"> </span>* @author Administrator</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes"> </span>*</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes"> </span>* TODO To change the template for this generated type comment go to</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes"> </span>* Window - Preferences - Java - Code Style - Code Templates</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes"> </span>*/</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">public class LogAdvice1 {</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>public void log(JoinPoint jp,MathImp imp){</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 2">              </span>System.out.println("log:"+imp+" "+jp.toLongString());</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 2">              </span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>}</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">}</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">/*</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes"> </span>* Created on <?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /?><st1:chsdate w:st="on" isrocdate="False" islunardate="False" day="1" month="11" year="2006">2006-11-1</st1:chsdate></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes"> </span>*</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes"> </span>* TODO To change the template for this generated file go to</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes"> </span>* Window - Preferences - Java - Code Style - Code Templates</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes"> </span>*/</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">package aop;</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">/**</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes"> </span>* @author Administrator</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes"> </span>*</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes"> </span>* TODO To change the template for this generated type comment go to</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes"> </span>* Window - Preferences - Java - Code Style - Code Templates</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes"> </span>*/</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">public class MathImp /*implements Math*/{</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>/* (non-Javadoc)</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>
						<span style="mso-spacerun: yes"> </span>* @see aop.Math#add(int, int)</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>
						<span style="mso-spacerun: yes"> </span>
				</span>
				<span lang="NL" style="mso-ansi-language: NL">*/<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="NL" style="mso-ansi-language: NL">
						<span style="mso-tab-count: 1">       </span>public void add(int op1, int op2) {<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="NL" style="mso-ansi-language: NL">
						<span style="mso-tab-count: 2">              </span>
				</span>
				<span lang="EN-US">// TODO Auto-generated method stub</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 2">              </span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>}</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>/* (non-Javadoc)</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>
						<span style="mso-spacerun: yes"> </span>* @see aop.Math#addtest(int, int)</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>
						<span style="mso-spacerun: yes"> </span>*/</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>public void addtest(int op1, int op2) {</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 2">              </span>// TODO Auto-generated method stub</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 2">              </span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>
				</span>
				<span lang="FR" style="mso-ansi-language: FR">}<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="FR" style="mso-ansi-language: FR">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="FR" style="mso-ansi-language: FR">
						<span style="mso-tab-count: 1">       </span>/* (non-Javadoc)<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="FR" style="mso-ansi-language: FR">
						<span style="mso-tab-count: 1">       </span>
						<span style="mso-spacerun: yes"> </span>* @see aop.Math#sub(int, int)<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="FR" style="mso-ansi-language: FR">
						<span style="mso-tab-count: 1">       </span>
						<span style="mso-spacerun: yes"> </span>
				</span>
				<span lang="NL" style="mso-ansi-language: NL">*/<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="NL" style="mso-ansi-language: NL">
						<span style="mso-tab-count: 1">       </span>public void sub(int op1, int op2) {<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="NL" style="mso-ansi-language: NL">
						<span style="mso-tab-count: 2">              </span>
				</span>
				<span lang="EN-US">// TODO Auto-generated method stub</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 2">              </span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>}</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">}</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">配置：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
				<span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt; mso-highlight: white">&lt;beans xmlns="http://www.springframework.org/schema/beans"</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
				<span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt; mso-highlight: white">
						<span style="mso-spacerun: yes">      </span>xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
				<span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt; mso-highlight: white">
						<span style="mso-spacerun: yes">      </span>xmlns:aop="http://www.springframework.org/schema/aop"</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
				<span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt; mso-highlight: white">
						<span style="mso-spacerun: yes">      </span>xsi:schemaLocation="</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
				<span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt; mso-highlight: white">http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
				<span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt; mso-highlight: white">http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd"&gt;</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
				<span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt; mso-highlight: white">
						<span style="mso-spacerun: yes">   </span>&lt;!-- this is the object that will be proxied by Spring's AOP infrastructure --&gt;</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
				<span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt; mso-highlight: white">
						<span style="mso-spacerun: yes">   </span>&lt;bean id="mathImp" class="aop.MathImp"/&gt;</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
				<span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt; mso-highlight: white">
						<span style="mso-spacerun: yes">   </span>&lt;!-- this is the actual advice itself --&gt;</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
				<span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt; mso-highlight: white">
						<span style="mso-spacerun: yes">   </span>&lt;bean id="logger" class="aop.LogAdvice1"/&gt;</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
				<span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt; mso-highlight: white">
						<span style="mso-spacerun: yes">   </span>&lt;aop:config&gt;</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
				<span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt; mso-highlight: white">
						<span style="mso-spacerun: yes">      </span>&lt;aop:aspect ref="logger"&gt;</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
				<span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt; mso-highlight: white">
						<span style="mso-spacerun: yes">         </span>&lt;aop:pointcut id="addLog"</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
				<span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt; mso-highlight: white">
						<span style="mso-spacerun: yes">                    </span>expression="execution(* aop.MathImp.*(..)) and target(imp) and JoinPoint(jp)"<span style="mso-spacerun: yes">  </span>/&gt;</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
				<span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt; mso-highlight: white">
						<span style="mso-spacerun: yes">         </span>&lt;aop:before pointcut-ref="addLog"</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
				<span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt; mso-highlight: white">
						<span style="mso-spacerun: yes">                  </span>method="log" arg-names="jp,imp" /&gt;</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
				<span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt; mso-highlight: white">
						<span style="mso-spacerun: yes">      </span>&lt;/aop:aspect&gt;</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
				<span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt; mso-highlight: white">
						<span style="mso-spacerun: yes">   </span>&lt;/aop:config&gt;</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt; mso-highlight: white">&lt;/beans&gt;</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-highlight: white">测试</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="FR" style="mso-ansi-language: FR">package aop;<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="FR" style="mso-ansi-language: FR">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="FR" style="mso-ansi-language: FR">import org.springframework.context.support.AbstractApplicationContext;<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">import org.springframework.context.support.FileSystemXmlApplicationContext;</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">/**</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes"> </span>* @author Administrator</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes"> </span>*</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes"> </span>* TODO To change the template for this generated type comment go to</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes"> </span>* Window - Preferences - Java - Code Style - Code Templates</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes"> </span>*/</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">public class Test {</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>public static void main(String[] args) {</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 2">              </span>AbstractApplicationContext context=new FileSystemXmlApplicationContext("aop2.xml");</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 2">              </span>//Math math=(Math) context.getBean("math");</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 2">              </span>MathImp math=(MathImp) context.getBean("mathImp");</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 2">              </span>math.add(1,2);</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 2">              </span>math.addtest(3,4);</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 2">              </span>math.sub(5,6);</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>}</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">}</span>
		</p>
<img src ="http://www.blogjava.net/chaocai/aggbug/100790.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chaocai/" target="_blank">超越巅峰</a> 2007-02-26 17:57 <a href="http://www.blogjava.net/chaocai/archive/2007/02/26/100790.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring2.0与Hibernate3整合</title><link>http://www.blogjava.net/chaocai/archive/2007/02/05/98070.html</link><dc:creator>超越巅峰</dc:creator><author>超越巅峰</author><pubDate>Mon, 05 Feb 2007 09:15:00 GMT</pubDate><guid>http://www.blogjava.net/chaocai/archive/2007/02/05/98070.html</guid><wfw:comment>http://www.blogjava.net/chaocai/comments/98070.html</wfw:comment><comments>http://www.blogjava.net/chaocai/archive/2007/02/05/98070.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/chaocai/comments/commentRss/98070.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chaocai/services/trackbacks/98070.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 蔡超																																		北京天融信，软件架构师																												SUN certified Enterprise Architect								Microsoft certified Solution Developer				...&nbsp;&nbsp;<a href='http://www.blogjava.net/chaocai/archive/2007/02/05/98070.html'>阅读全文</a><img src ="http://www.blogjava.net/chaocai/aggbug/98070.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chaocai/" target="_blank">超越巅峰</a> 2007-02-05 17:15 <a href="http://www.blogjava.net/chaocai/archive/2007/02/05/98070.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EJB3使用注意（1）</title><link>http://www.blogjava.net/chaocai/archive/2007/02/03/97807.html</link><dc:creator>超越巅峰</dc:creator><author>超越巅峰</author><pubDate>Sat, 03 Feb 2007 15:20:00 GMT</pubDate><guid>http://www.blogjava.net/chaocai/archive/2007/02/03/97807.html</guid><wfw:comment>http://www.blogjava.net/chaocai/comments/97807.html</wfw:comment><comments>http://www.blogjava.net/chaocai/archive/2007/02/03/97807.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/chaocai/comments/commentRss/97807.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chaocai/services/trackbacks/97807.html</trackback:ping><description><![CDATA[
		<p>1 java.rmi.RemoteException<br />由于EJB3中的远程接口没有间接或直接的基础Remote接口，也不需要抛出RemoteException异常，所以客户端所接受到的都是EjbException。</p>
		<p>2 ServiceLocator模式<br />由于EJB3中省去了Home接口，所以如果使用ServiceLocator模式会出现异常，同一JNDI每次获得都会是同一对象即便是有状态的Bean<br /><br />3 Stateful Session Bean<br />由于EJB3中省去了Home接口，JNDI lookup返回的是一个Session Bean的对象，而不是Home，所以EJB3的Spec中规定每次JNDI lookup<br />都应该返回一个新的实例。（注意以上这点在一些版本的JBOSS EJB3的实现中都存在BUG）。<br /><br /> <br /><br /></p>
<img src ="http://www.blogjava.net/chaocai/aggbug/97807.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chaocai/" target="_blank">超越巅峰</a> 2007-02-03 23:20 <a href="http://www.blogjava.net/chaocai/archive/2007/02/03/97807.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>