﻿<?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-Blue Dream-随笔分类-Framework</title><link>http://www.blogjava.net/mac521/category/28846.html</link><description>Love OpenSource</description><language>zh-cn</language><lastBuildDate>Tue, 15 Apr 2008 21:10:43 GMT</lastBuildDate><pubDate>Tue, 15 Apr 2008 21:10:43 GMT</pubDate><ttl>60</ttl><item><title>总结一下异常使用</title><link>http://www.blogjava.net/mac521/archive/2008/04/14/192701.html</link><dc:creator>风中起航</dc:creator><author>风中起航</author><pubDate>Mon, 14 Apr 2008 03:14:00 GMT</pubDate><guid>http://www.blogjava.net/mac521/archive/2008/04/14/192701.html</guid><wfw:comment>http://www.blogjava.net/mac521/comments/192701.html</wfw:comment><comments>http://www.blogjava.net/mac521/archive/2008/04/14/192701.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/mac521/comments/commentRss/192701.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mac521/services/trackbacks/192701.html</trackback:ping><description><![CDATA[&nbsp;
<p class="MsoNormal"><span lang="EN-US">Exception</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">分为：</span><span lang="EN-US">Error</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span><span lang="EN-US">Exception(checkedException</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span><span lang="EN-US">uncheckedException)</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。在使用异常的时候可以先列出以下问题</span></p>
<table class="MsoTableGrid" style="border-right: medium none; border-top: medium none; border-left: medium none; border-bottom: medium none; border-collapse: collapse; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes">
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 142pt; padding-top: 0cm; border-bottom: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt" valign="top" width="189">
            <p class="MsoNormal"><span lang="EN-US">Exception</span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" valign="top" width="189">
            <p class="MsoNormal"><span lang="EN-US">Source</span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" valign="top" width="189">
            <p class="MsoNormal"><span lang="EN-US">Scope</span></p>
            </td>
        </tr>
        <tr style="mso-yfti-irow: 1; mso-yfti-lastrow: yes">
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 142pt; padding-top: 0cm; border-bottom: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="189">
            <p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">自定义异常名称</span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="189">
            <p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">会产生自定义异常的方法或事件</span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="189">
            <p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">调用</span><span lang="EN-US">Source</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的方法或对象</span></p>
            </td>
        </tr>
    </tbody>
</table>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">我认为</span><span lang="EN-US">uncheckedException</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">比</span><span lang="EN-US">checkedException</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">要好，因为这样可以减少代码中</span><span lang="EN-US">try/catch</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">语句，利用异常处理框架</span><span lang="EN-US">(</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">或</span><span lang="EN-US">filter)</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来统一处理产生的异常。那</span><span lang="EN-US">uncheckedException</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">与</span><span lang="EN-US">checkedException</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">该如何划分呢？</span><span lang="EN-US">checkedException</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">用来处理可以预知的情况，例如已有针对返回值的不同情况，用</span><span lang="EN-US">If/else</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">判断。此时可以用</span><span lang="EN-US">checkedException</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">提醒调用者对不同的情况做处理，要比调用者自己查源代码然后做出相应的判断要好。</span><span lang="EN-US">uncheckedException</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">用于抛出的异常，一般情况下是不可预知的，会导致系统错误的。例如一个自定义的方法用来格式化日期，它需要一个日期型的字符串，可是偏偏系统传了一个空的字段串，这种事很少发生的，所以不能抛出一个</span><span lang="EN-US">checkedException</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，不然会造成到处都是</span><span lang="EN-US">try/catch</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">语句。此时</span><span lang="EN-US">uncheckedException</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">就可以用了，在方法上加上</span><span lang="EN-US">@throws uncheckedException</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，调用者在不能确定自己传入的参数是否合法时，看到方法</span><span lang="EN-US">throw</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">异常，就需要</span><span lang="EN-US">try/catch</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一下了。</span><span lang="EN-US">(@throws</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">用来说明的是</span><span lang="EN-US">uncheckedException)</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在项目开发过程中，用</span><span lang="EN-US">XDoclet+Exception</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/mac521/aggbug/192701.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mac521/" target="_blank">风中起航</a> 2008-04-14 11:14 <a href="http://www.blogjava.net/mac521/archive/2008/04/14/192701.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[Original]Java文件事务(commons-transaction)</title><link>http://www.blogjava.net/mac521/archive/2008/01/17/175839.html</link><dc:creator>风中起航</dc:creator><author>风中起航</author><pubDate>Thu, 17 Jan 2008 01:46:00 GMT</pubDate><guid>http://www.blogjava.net/mac521/archive/2008/01/17/175839.html</guid><wfw:comment>http://www.blogjava.net/mac521/comments/175839.html</wfw:comment><comments>http://www.blogjava.net/mac521/archive/2008/01/17/175839.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mac521/comments/commentRss/175839.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mac521/services/trackbacks/175839.html</trackback:ping><description><![CDATA[<p>今天上网看到apache的commons包中提供了一个Transaction，可以控制文件的事务。做了测试，看是否可以成功。</p>
<p>Commons-Transaction: http://commons.apache.org/transaction/<br />
下面是测试的代码TestTransaction.java:<br />
Log log = LogFactory.getLog(TestTransaction.class);<br />
&nbsp;&nbsp;//这个是commons-transaction包中的类<br />
&nbsp;&nbsp;LoggerFacade logger = new CommonsLoggingLogger(log);;<br />
&nbsp;&nbsp;//存储的路径<br />
&nbsp;&nbsp;String toDir = "d:/";<br />
&nbsp;&nbsp;//临时路径<br />
&nbsp;&nbsp;String tempDir = "e:/";<br />
&nbsp;&nbsp;//构造函数的第三个参数：false，标识是否encoding文档的url，这个一般不需要设置为true<br />
&nbsp;&nbsp;FileResourceManager frm = new FileResourceManager(toDir, tempDir, false, logger);<br />
&nbsp;&nbsp;//这标识frm的状态为start<br />
&nbsp;&nbsp;frm.start();<br />
&nbsp;&nbsp;//下面需要frm的状态为start<br />
&nbsp;&nbsp;String txId = frm.generatedUniqueTxId();<br />
&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;//开启Transaction<br />
&nbsp;&nbsp;&nbsp;frm.startTransaction(txId);<br />
&nbsp;&nbsp;&nbsp;frm.deleteResource(txId, "RFID.rtf");<br />
//&nbsp;&nbsp;&nbsp;throw new Exception("sdf");<br />
&nbsp;&nbsp;} catch (Exception e) {<br />
&nbsp;&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;//回滚事务<br />
&nbsp;&nbsp;&nbsp;&nbsp;frm.rollbackTransaction(txId);<br />
&nbsp;&nbsp;&nbsp;} catch (ResourceManagerException e1) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;// TODO Auto-generated catch block<br />
&nbsp;&nbsp;&nbsp;&nbsp;e1.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;//提交事务<br />
&nbsp;&nbsp;frm.commitTransaction(txId);<br />
在这个application运行过程中，会在tempDir产生一个临时目录(是由一些阿拉伯数字和字母组成的)，里面有两个文件夹：change和delete，还有一个日志transaction.log，而要操作的目录就会在delete目录中。事务的过程也是这样的：先将file存放的tempDir，然后监控transaction的状态，如果commit，它就会将file写到destination中，然后删除tempDir。不过，既然apache已经有了这个，就可以直接拿来用了<img alt="" src="/CuteSoft_Client/CuteEditor/images/emsmile.gif" align="absMiddle" border="0" />.commons-transaction，还支持jta的事务，希望将来会更加强大. </p>
<img src ="http://www.blogjava.net/mac521/aggbug/175839.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mac521/" target="_blank">风中起航</a> 2008-01-17 09:46 <a href="http://www.blogjava.net/mac521/archive/2008/01/17/175839.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[Translation]JSON与struts2</title><link>http://www.blogjava.net/mac521/archive/2008/01/11/174653.html</link><dc:creator>风中起航</dc:creator><author>风中起航</author><pubDate>Fri, 11 Jan 2008 08:29:00 GMT</pubDate><guid>http://www.blogjava.net/mac521/archive/2008/01/11/174653.html</guid><wfw:comment>http://www.blogjava.net/mac521/comments/174653.html</wfw:comment><comments>http://www.blogjava.net/mac521/archive/2008/01/11/174653.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mac521/comments/commentRss/174653.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mac521/services/trackbacks/174653.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;下载地址: http://code.google.com/p/jsonplugin/downloads/list&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Apache提供的一个插件包，可以把Action中的数据以JSON做个封装然后返回。它会将整个action...&nbsp;&nbsp;<a href='http://www.blogjava.net/mac521/archive/2008/01/11/174653.html'>阅读全文</a><img src ="http://www.blogjava.net/mac521/aggbug/174653.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mac521/" target="_blank">风中起航</a> 2008-01-11 16:29 <a href="http://www.blogjava.net/mac521/archive/2008/01/11/174653.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[Original]Hibernate持久与游离</title><link>http://www.blogjava.net/mac521/archive/2008/01/09/173983.html</link><dc:creator>风中起航</dc:creator><author>风中起航</author><pubDate>Wed, 09 Jan 2008 05:28:00 GMT</pubDate><guid>http://www.blogjava.net/mac521/archive/2008/01/09/173983.html</guid><wfw:comment>http://www.blogjava.net/mac521/comments/173983.html</wfw:comment><comments>http://www.blogjava.net/mac521/archive/2008/01/09/173983.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mac521/comments/commentRss/173983.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mac521/services/trackbacks/173983.html</trackback:ping><description><![CDATA[<p style="font-family: Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在Hbibernate中有自己的一套机制：FlushMode，它控制着持久化对象与数据库的关系。FlushMode有四种状态：NERVER、AUTO、COMMIT和ALWAYS。默认值为AUTO。Spring中使用Hibernate时，会将FlushMode初始化为AUTO，不过在使用OpenSessionInViewFilter(Spring有自己的一个transcation，不过它只是作用在service层，如果想使持久化对象保留到view层，那么启用这个过滤器之后就可以了)过滤器之后，Spring会将FlushMode设置为NERVER(表示持久化对象不在于数据库中数据实时关联)。不知道大家在工程中是否用到了spring提供的事务，在用到spring提供的HibernateTranscationManager管理事务时。当调用的方法位于该管理器之下时，spring会临时的将FlushMode修改为AUTO状态，这样如果你在view层有一个持久化对象，并且修改了这个持久化对象的状态，spring会自动将这个持久化对象的状态更新到数据库中去。这样可能会带来困惑：明明没有更新数据库，怎么数据库中的值发生改变了呢？其实这也是持久层的意义所在：持久是将数据保存在持久层中的对象上，并使对象与数据是一致的，如果持久化对象状态发生改变，成为了游离态，类似用jdbc取出Object之后close了connection，这样对象与数据库就脱离了，也就是游离。欢迎大家来拍砖^_^</p>
     <img src ="http://www.blogjava.net/mac521/aggbug/173983.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mac521/" target="_blank">风中起航</a> 2008-01-09 13:28 <a href="http://www.blogjava.net/mac521/archive/2008/01/09/173983.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>