﻿<?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-积累,创造,分享!</title><link>http://www.blogjava.net/nighthawk/</link><description /><language>zh-cn</language><lastBuildDate>Sat, 18 Apr 2026 11:12:16 GMT</lastBuildDate><pubDate>Sat, 18 Apr 2026 11:12:16 GMT</pubDate><ttl>60</ttl><item><title>警惕手工加载spring配置文件导致数据库session无法释放</title><link>http://www.blogjava.net/nighthawk/archive/2009/04/16/266006.html</link><dc:creator>nighthawk</dc:creator><author>nighthawk</author><pubDate>Thu, 16 Apr 2009 09:27:00 GMT</pubDate><guid>http://www.blogjava.net/nighthawk/archive/2009/04/16/266006.html</guid><wfw:comment>http://www.blogjava.net/nighthawk/comments/266006.html</wfw:comment><comments>http://www.blogjava.net/nighthawk/archive/2009/04/16/266006.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/nighthawk/comments/commentRss/266006.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nighthawk/services/trackbacks/266006.html</trackback:ping><description><![CDATA[<p>问题现象：在做web应用时会碰到这种情况，某些地方无法通过web当中的ApplicationContext来获得springIOC容器提供的bean，比如提供给外界的webservice接口，这个时候就需要手工通过ClassPathXmlApplicationContext等方式来获取ApplicationContext，代码如下：<br />
ApplicationContext context = new ClassPathXmlApplicationContext(<br />
&nbsp;&nbsp;&nbsp;&nbsp;"applicationContext-*.xml");<br />
IXXXService xxxservice = (IXXXService ) context<br />
&nbsp;&nbsp;&nbsp;&nbsp;.getBean("xxxservice ");<br />
这是一段很典型的加载。<br />
然而，正是这种看似到处都是的加载却为后面的BUG埋下伏笔。<br />
xxxservice是具体的业务类，它向下与DAO依赖并控制着事务，这里代表了一个经典而且简单的service，具体配置略去，值得一提的是scope，这里没有指定，默认的是单例。<br />
一切都是那么顺利，像这样的service代码写的应该不下几百个，可能诸位写的更多，过程依然很陶醉，修改完毕。测试，再测试。什么？ORA-12519错误！见鬼，我打造的这套号称简易快速的SSH2框架已经在多个项目好评无数久经考验了，写了不下几百次的service居然报ORA-12519错误。<br />
迅速打开PLSQL，检查数据库session，Select Count(1) From v$session t Where t.SCHEMANAME='XXX';<br />
随着service的执行，session数在增加，没有减少的意思。是的，当时就是这样。<br />
</p>
<p>解决思路：这种错误出现在久经考验的框架当中，我心里是相当不安的，居然会有这种低级趣味的错误。整理思路开始分析：这段代码唯一与以前不同的地方就是，我们在web应用中，是通过容器加载提供bean的，只有容器启动的时候才会加载xml。那么重点就应该是关注XML的加载方式了。<br />
在这里我们用的是ApplicationContext接口。注意看spring文档3.5.1.2.2 在非web应用中优雅地关闭springioc容器。它这里用到的是AbstractApplicationContext，在取得bean后，再执行一个context.registerShutdownHook();<br />
这里实验一把，将ApplicationContext改成AbstractApplicationContext，执行context.close()。结果出来了，session已被正常回收，真相渐渐浮出水面。</p>
<p><br />
结论：每次加载context的做法相当于每次都生成了一次新的spring容器，在默认单例的情况下，如果不及时关闭context。service所依赖的DAO当中创建的dataSource也一直存在（包括所有的单例情况下所生成的类)，从日志看，service事务管辖中的session确实已经关闭，但SessionFactory还是存在的。只有在容器关闭的情况下，并指定了dataSource实例配置中的destroy-method="close"，dataSource单例才会被释放。<br />
spring文档当中对生命周期也描述的很清楚。通过DisposableBean或者指定destroy-method都能很好的释放单例对象。而prototype类型的对象需要客户端显式的指定释放，释放对象完全是客户端控制,spring不负责释放。<br />
所以，要改善context的加载方式，尽量的少多次去加载，实在没办法的情况下，一定要记得关闭。<br />
最后，写代码的随意性，图省事，不经思考，是造成这种BUG的罪恶根源。</p><img src ="http://www.blogjava.net/nighthawk/aggbug/266006.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nighthawk/" target="_blank">nighthawk</a> 2009-04-16 17:27 <a href="http://www.blogjava.net/nighthawk/archive/2009/04/16/266006.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>领域模型，你说的是哪一个？</title><link>http://www.blogjava.net/nighthawk/archive/2008/03/23/187954.html</link><dc:creator>nighthawk</dc:creator><author>nighthawk</author><pubDate>Sat, 22 Mar 2008 16:01:00 GMT</pubDate><guid>http://www.blogjava.net/nighthawk/archive/2008/03/23/187954.html</guid><wfw:comment>http://www.blogjava.net/nighthawk/comments/187954.html</wfw:comment><comments>http://www.blogjava.net/nighthawk/archive/2008/03/23/187954.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nighthawk/comments/commentRss/187954.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nighthawk/services/trackbacks/187954.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 关注领域模型有一段时间了，不论是分析阶段的还是设计阶段的。<br>其实领域模型的概念很早就有了,但是其概念非常容易被人混淆，首先我们要明确一下这个词的语境：<br>它在软件开发的分析与设计的两个阶段分别代表不同的含义。<br>&nbsp;&nbsp;<a href='http://www.blogjava.net/nighthawk/archive/2008/03/23/187954.html'>阅读全文</a><img src ="http://www.blogjava.net/nighthawk/aggbug/187954.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nighthawk/" target="_blank">nighthawk</a> 2008-03-23 00:01 <a href="http://www.blogjava.net/nighthawk/archive/2008/03/23/187954.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>重拾DOCBOOK</title><link>http://www.blogjava.net/nighthawk/archive/2008/03/22/187917.html</link><dc:creator>nighthawk</dc:creator><author>nighthawk</author><pubDate>Sat, 22 Mar 2008 10:21:00 GMT</pubDate><guid>http://www.blogjava.net/nighthawk/archive/2008/03/22/187917.html</guid><wfw:comment>http://www.blogjava.net/nighthawk/comments/187917.html</wfw:comment><comments>http://www.blogjava.net/nighthawk/archive/2008/03/22/187917.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nighthawk/comments/commentRss/187917.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nighthawk/services/trackbacks/187917.html</trackback:ping><description><![CDATA[<p>至于docbook的好处，我也不多说了，就跟吃菜一样，尝过了就知道到底有几好<br />
趁目前有空，部门内部准备补充一下之前缺乏的技术文档。利用这次机会，我再次收想到了docbook。<br />
记得第一次接触docbook的时候，还是3年前的时候了，可惜那个时候没有坚持使用下来。<br />
当初抛弃它的原因是多方面的，缺乏恒心是一方面，配置烦琐也是一方面，另外还有一个很重要的原因就</p>
<p>是缺乏一个所见即所得的编辑器。而这次，这些烦恼彻底解决。XMLmind XML Editor!第一次发现它的时</p>
<p>候有点相见恨晚的感觉，它让我的文档写的如此轻松。<br />
不过有一点要注意，在官网下载的XMLmind XML Editor个人版是不支持直接将xml生成的html,pdf等格式</p>
<p>的。还好，目前有xsltproc，fop，openjade这些工具支持，有了这些在windows下也可以转换的工具，生</p>
<p>成其他格式也不是什么难事。我目前就使用xsltproc来生成html。</p>
<p>附上XMLmind XML Editor的下载地址http://www.xmlmind.com/xmleditor/persoedition.html<br />
附加上xsltproc的下载地址 http://www.zlatkovic.com/pub/libxml/<br />
再附上docbook的地址http://www.oasis-open.org/docbook/</p>
<p>之前的麻烦统统消失，那么剩下的就是享受它的好处了。</p>
<p>不用word，文档也可以写的这么漂亮。docbook，看第二眼发现你依然还是那么好。<br />
</p><img src ="http://www.blogjava.net/nighthawk/aggbug/187917.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nighthawk/" target="_blank">nighthawk</a> 2008-03-22 18:21 <a href="http://www.blogjava.net/nighthawk/archive/2008/03/22/187917.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>谁让事务控制不起作用了?</title><link>http://www.blogjava.net/nighthawk/archive/2007/07/09/128974.html</link><dc:creator>nighthawk</dc:creator><author>nighthawk</author><pubDate>Mon, 09 Jul 2007 01:32:00 GMT</pubDate><guid>http://www.blogjava.net/nighthawk/archive/2007/07/09/128974.html</guid><wfw:comment>http://www.blogjava.net/nighthawk/comments/128974.html</wfw:comment><comments>http://www.blogjava.net/nighthawk/archive/2007/07/09/128974.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/nighthawk/comments/commentRss/128974.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nighthawk/services/trackbacks/128974.html</trackback:ping><description><![CDATA[<p class=MsoNormal><font face=宋体 size=3><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">在目前使用的现有框架当中，利用</span></font><font face=Arial size=3><span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: Arial">spring</span></font><font face=宋体 size=3><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">的</span></font><font face=Arial size=3><span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: Arial">AOP</span></font><font face=宋体 size=3><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">机制来控制事务处理是</span></font><font face=宋体 size=3><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">目前最流行的一种控制事务的方式。</span></font><font face=Arial size=3><span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: Arial"><o:p></o:p></span></font></p>
<p class=MsoNormal><font face=宋体 size=3><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">但是我们在某种使用场合的过程中，为什么有时事务处理老是不起作用呢？这里,为您道出原因之一,</span></font><font face=Arial size=3><span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: Arial"><o:p></o:p></span></font></p>
<p class=MsoNormal><font face=Arial size=3><span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: Arial"><o:p></o:p></span></font></p>
<p class=MsoNormal><font face=宋体 size=3><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">首先请看一段话</span></font><font face=Arial size=3><span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: Arial"><o:p></o:p></span></font></p>
<p class=MsoNormal><font face="Times New Roman" color=red size=3><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: red">Spring</span></font><font face=宋体 color=red size=3><span style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: 宋体">的事务实现采用基于</span></font><font color=red size=3><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: red">AOP</span></font><font face=宋体 color=red size=3><span style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: 宋体">的拦截器来实现，如果没有在事务配置的时候注明回滚的</span></font><font color=red size=3><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: red">checked exception</span></font><font face=宋体 color=red size=3><span style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: 宋体">，那么只有在发生了</span></font><font color=red size=3><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: red">unchecked exception</span></font><font face=宋体 color=red size=3><span style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: 宋体">的时候，才会进行事务回滚。</span></font><font color=red size=3><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: red"><o:p></o:p></span></font></p>
<p class=MsoNormal><font face=Arial size=3><span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: Arial"><o:p></o:p></span></font></p>
<p class=MsoNormal><font face=宋体 size=3><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">有必要先解释一下</span></font><font size=3><span lang=EN-US style="FONT-SIZE: 12pt">checked exception</span></font><font face=宋体 size=3><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">与</span></font><font size=3><span lang=EN-US style="FONT-SIZE: 12pt">unchecked exception</span></font><font face=宋体 size=3><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">：</span></font><font size=3><span lang=EN-US style="FONT-SIZE: 12pt"><o:p></o:p></span></font></p>
<p class=MsoNormal><font face=宋体 size=3><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">先看看</span></font><font size=3><span lang=EN-US style="FONT-SIZE: 12pt">EXCEPTION</span></font><font face=宋体 size=3><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">在</span></font><font size=3><span lang=EN-US style="FONT-SIZE: 12pt">JDK</span></font><font face=宋体 size=3><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">文档当中的结构</span></font><font size=3><span lang=EN-US style="FONT-SIZE: 12pt"><o:p></o:p></span></font></p>
<pre><font face=宋体 size=3><span lang=EN-US style="FONT-SIZE: 12pt"><a title="file:///C:/Documents%20and%20Settings/xiangweiwei.NINETOWNS/桌面/Chinese-api/java/lang/Object.html&#10;java.lang 中的类" href="file:///C:/Documents%20and%20Settings/xiangweiwei.NINETOWNS/桌面/Chinese-api/java/lang/Object.html"><font title=file:///C:/Documents%20and%20Settings/xiangweiwei.NINETOWNS/桌面/Chinese-api/java/lang/Object.html color=black><span title=file:///C:/Documents%20and%20Settings/xiangweiwei.NINETOWNS/桌面/Chinese-api/java/lang/Object.html style="COLOR: windowtext">java.lang.Object</span></font></a><o:p></o:p></span></font></pre>
<pre><font face=宋体 size=3><span lang=EN-US style="FONT-SIZE: 12pt">&nbsp; <img id=_x0000_i1025 height=14 alt="继承者 " src="cid:image001.gif@01C7BFB5.B1D1C910" width=15 border=0><a title="file:///C:/Documents%20and%20Settings/xiangweiwei.NINETOWNS/桌面/Chinese-api/java/lang/Throwable.html&#10;java.lang 中的类" href="file:///C:/Documents%20and%20Settings/xiangweiwei.NINETOWNS/桌面/Chinese-api/java/lang/Throwable.html"><font title=file:///C:/Documents%20and%20Settings/xiangweiwei.NINETOWNS/桌面/Chinese-api/java/lang/Throwable.html color=black><span title=file:///C:/Documents%20and%20Settings/xiangweiwei.NINETOWNS/桌面/Chinese-api/java/lang/Throwable.html style="COLOR: windowtext">java.lang.Throwable</span></font></a><o:p></o:p></span></font></pre>
<pre><font face=宋体 size=3><span lang=EN-US style="FONT-SIZE: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <img id=_x0000_i1026 height=14 alt="继承者 " src="cid:image001.gif@01C7BFB5.B1D1C910" width=15 border=0><a title="file:///C:/Documents%20and%20Settings/xiangweiwei.NINETOWNS/桌面/Chinese-api/java/lang/Exception.html&#10;java.lang 中的类" href="file:///C:/Documents%20and%20Settings/xiangweiwei.NINETOWNS/桌面/Chinese-api/java/lang/Exception.html"><font title=file:///C:/Documents%20and%20Settings/xiangweiwei.NINETOWNS/桌面/Chinese-api/java/lang/Exception.html color=black><span title=file:///C:/Documents%20and%20Settings/xiangweiwei.NINETOWNS/桌面/Chinese-api/java/lang/Exception.html style="COLOR: windowtext">java.lang.Exception</span></font></a><o:p></o:p></span></font></pre>
<pre><font face=宋体 size=3><span lang=EN-US style="FONT-SIZE: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <img id=_x0000_i1027 height=14 alt="继承者 " src="cid:image001.gif@01C7BFB5.B1D1C910" width=15 border=0>java.lang.RuntimeException<o:p></o:p></span></font></pre>
<pre><font face=宋体 size=3><span lang=EN-US style="FONT-SIZE: 12pt"><o:p>&nbsp;</o:p></span></font></pre>
<pre><span class=postbody><font face=宋体 size=3><span style="FONT-SIZE: 12pt">而<span lang=EN-US>Unchecked exception: </span>这类异常都是<span lang=EN-US>RuntimeException</span>的子类，虽然<span lang=EN-US>RuntimeException</span>同样也是<span lang=EN-US>Exception</span>的子类，但是它们是特殊的。</span></font></span><span lang=EN-US>Exception</span>是作为<span lang=EN-US>checked Exception </span>出现的。<span lang=EN-US><o:p></o:p></span></pre>
<pre><span class=postbody><font face=宋体 size=3><span style="FONT-SIZE: 12pt">所以，除了<span lang=EN-US>Error</span>与<span lang=EN-US>RuntimeException</span>，其他剩下的异常都是你需要关心的，而这些异常类统称为<span lang=EN-US>Checked Exception<o:p></o:p></span></span></font></span></pre>
<pre><font face=宋体 size=3><span lang=EN-US style="FONT-SIZE: 12pt"><o:p>&nbsp;</o:p></span></font></pre>
<p class=MsoNormal><font face=宋体 size=3><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">有了以上的基础，看看我们框架当中的事务属性</span></font><font face=Arial size=3><span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: Arial"><o:p></o:p></span></font></p>
<p class=MsoNormal><font face=Arial size=3><span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: Arial">&lt;property name="transactionAttributes"&gt;<o:p></o:p></span></font></p>
<p class=MsoNormal><font face=Arial size=3><span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;props&gt;<o:p></o:p></span></font></p>
<p class=MsoNormal><font face=Arial size=3><span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;prop key="get*"&gt;PROPAGATION_REQUIRED,readOnly &lt;/prop&gt;<o:p></o:p></span></font></p>
<p class=MsoNormal><font face=Arial size=3><span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;prop key="save*"&gt;PROPAGATION_REQUIRED &lt;/prop&gt;<o:p></o:p></span></font></p>
<p class=MsoNormal><font face=Arial size=3><span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;prop key="delete*"&gt;PROPAGATION_REQUIRED&lt;/prop&gt;<o:p></o:p></span></font></p>
<p class=MsoNormal><font face=Arial size=3><span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;prop key="update*"&gt;PROPAGATION_REQUIRED &lt;/prop&gt;</span></font></p>
<p class=MsoNormal><font face=Arial size=3><span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/props&gt; <o:p></o:p></span></font></p>
<p class=MsoNormal><font face=Arial size=3><span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: Arial"><o:p>&nbsp;</o:p></span></font></p>
<p class=MsoNormal><font face=Arial size=3><span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: Arial">&lt;/property&gt;<o:p></o:p></span></font></p>
<p class=MsoNormal><font face=Arial size=3><span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: Arial"><o:p>&nbsp;</o:p></span></font></p>
<p class=MsoNormal><font face=宋体 size=3><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">此处，我们没有指定任何异常，那么它目前默认处理的就是</span></font><font size=3><span lang=EN-US style="FONT-SIZE: 12pt">unchecked exception</span></font><font face=宋体 size=3><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">了，再结合我们自身每个项目的模块，在我们的每个项目当中几乎都定义了自己的异常，这些异常都是继承自</span></font><font size=3><span lang=EN-US style="FONT-SIZE: 12pt">Exception</span></font><font face=宋体 size=3><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">，很不幸的是，我们继承的</span></font><font size=3><span lang=EN-US style="FONT-SIZE: 12pt">Exception</span></font><font face=宋体 size=3><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">包括自己定义的异常，都是</span></font><font size=3><span lang=EN-US style="FONT-SIZE: 12pt">checked exception</span></font><font face=宋体 size=3><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">。</span></font><font size=3><span lang=EN-US style="FONT-SIZE: 12pt"><o:p></o:p></span></font></p>
<p class=MsoNormal><font face="Times New Roman" size=3><span lang=EN-US style="FONT-SIZE: 12pt"><o:p>&nbsp;</o:p></span></font></p>
<p class=MsoNormal><font face=宋体 size=3><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">所以，在我们的事务处理机制当中，事务不管用了。</span></font><font size=3><span lang=EN-US style="FONT-SIZE: 12pt"><o:p></o:p></span></font></p>
<p class=MsoNormal><font face=宋体 size=3><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">解决办法有</span></font><font size=3><span lang=EN-US style="FONT-SIZE: 12pt">2</span></font><font face=宋体 size=3><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">个：</span></font><font size=3><span lang=EN-US style="FONT-SIZE: 12pt"><o:p></o:p></span></font></p>
<p class=MsoNormal><font face="Times New Roman" size=3><span lang=EN-US style="FONT-SIZE: 12pt">1</span></font><font face=宋体 size=3><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">，在事务属性后面加上需要回滚的</span></font><font size=3><span lang=EN-US style="FONT-SIZE: 12pt">checked exception</span></font><font face=宋体 size=3><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">。比如</span></font><font face=Arial size=3><span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: Arial">&lt;prop key="save*"&gt;PROPAGATION_REQUIRED,-XXXXException&lt;/prop&gt;(注意那个"-",对应的是"+")<o:p></o:p></span></font></p>
<p class=MsoNormal><font face=Arial size=3><span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: Arial">2, </span></font><font face=宋体 size=3><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">不改配置文件，将需要事务回滚的异常继承自</span></font><font size=3><span lang=EN-US style="FONT-SIZE: 12pt">unchecked exception</span></font><font face=宋体 size=3><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">类，也就是</span></font><span class=postbody><font size=3><span lang=EN-US style="FONT-SIZE: 12pt">RuntimeException</span></font></span><span class=postbody><font face=宋体 size=3><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">。<br><br>(nighthawk)</span></font></span></p><img src ="http://www.blogjava.net/nighthawk/aggbug/128974.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nighthawk/" target="_blank">nighthawk</a> 2007-07-09 09:32 <a href="http://www.blogjava.net/nighthawk/archive/2007/07/09/128974.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>初识EJB3.0 ---配置与运行篇</title><link>http://www.blogjava.net/nighthawk/archive/2006/07/28/60603.html</link><dc:creator>nighthawk</dc:creator><author>nighthawk</author><pubDate>Fri, 28 Jul 2006 08:21:00 GMT</pubDate><guid>http://www.blogjava.net/nighthawk/archive/2006/07/28/60603.html</guid><wfw:comment>http://www.blogjava.net/nighthawk/comments/60603.html</wfw:comment><comments>http://www.blogjava.net/nighthawk/archive/2006/07/28/60603.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/nighthawk/comments/commentRss/60603.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nighthawk/services/trackbacks/60603.html</trackback:ping><description><![CDATA[<p>          本文将不涉及EJB3.0的设计以及编码.<br />          主要内容是关于JBOSS下EJB3.0的第一个例子的配置与运行。<br />首先下载JBOSS4，并安装成功。目前JBOSS提供的ejb3有2种版本，一种是Embeddable（可嵌入），一种是直接运行。这些都可以在jboss的官方网站获得。<br />Embeddable版本的主要的好处是可以独立运行，方便测试，甚至无需部署在jboss环境当中，当然这是需要它提供的conf以及lib包里面的几个配置来支撑的。如果是在web应用当中运行，还需要将jboss-EJB-3.0_Embeddable_ALPHA_8\conf 里面的配置文件引入到web-inf\classes下的。<br />lib包里面的3个包也需要放在web-inf\lib下面。然后对web.xml进行修改，加上：<br />   &lt;context-param&gt;<br />      &lt;param-name&gt;jboss-kernel-deployments&lt;/param-name&gt;<br />      &lt;param-value&gt;embedded-jboss-beans.xml, jboss-jms-beans.xml&lt;/param-value&gt;<br />   &lt;/context-param&gt;<br />   &lt;listener&gt;<br />      &lt;listener-class&gt;org.jboss.ejb3.embedded.ServletBootstrapListener&lt;/listener-class&gt;<br />   &lt;/listener&gt;<br />否则会报关于jndi方面的错误。</p>
		<p>          前面提到的另一个版本则是需要基于JBOSS环境的完全版。它的配置相对于Embeddable来说更简单一些。   实际上针对这个版本的web应用当中调用EJB3 是无需任何额外配置的. <br />然而在此之前我走了一段弯路：<br />比如看到网上一些介绍性的文章当中提到需要将{jboss_home}\client 当中的一些包拷到web-inf\lib的下面，然后在初始化InitialContext时需要加上java.naming.factory.initial，java.naming.factory.url.pkgs等等的参数。这样反而会抛出CommunicationException: Receive timed out异常。实际上JBOSS都已经将初始化环境设置好了。<br />以下实例是web环境下调用jboss 下ejb3的客户端：<br /><a href="http://www.myjavaserver.com/~nighthawk/EJBClient.war">http://www.myjavaserver.com/~nighthawk/EJBClient.war</a><br />部署在jboss下的ejb3例子，以上2个客户端都是调用的它：<br /><a href="http://www.myjavaserver.com/~nighthawk/MyEJB.jar">http://www.myjavaserver.com/~nighthawk/MyEJB.jar</a><br />web环境下调用Embeddable ejb的客户端的实例比较大，空间不够，不往上放了。<br />不过配置起来也很简单，只需将Embeddable版本当中的conf与lib包放在war包的classed与lib下即可。<br />以上例子均在jboss-4.0.4.GA下测试过。<br />                                                                                                                              ©2006 nighthawk.All rights reserved</p><img src ="http://www.blogjava.net/nighthawk/aggbug/60603.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nighthawk/" target="_blank">nighthawk</a> 2006-07-28 16:21 <a href="http://www.blogjava.net/nighthawk/archive/2006/07/28/60603.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>