﻿<?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-天行健-随笔分类-Hibernate</title><link>http://www.blogjava.net/bnlovebn/category/19920.html</link><description>《周易》曰：&lt;br&gt;
天行健，君子以自强不息(乾卦)&lt;br&gt;
地势坤，君子以厚德载物(坤卦)
</description><language>zh-cn</language><lastBuildDate>Tue, 14 Jun 2011 19:06:50 GMT</lastBuildDate><pubDate>Tue, 14 Jun 2011 19:06:50 GMT</pubDate><ttl>60</ttl><item><title>APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending tasks</title><link>http://www.blogjava.net/bnlovebn/archive/2011/06/12/352125.html</link><dc:creator>重归本垒（Bing）</dc:creator><author>重归本垒（Bing）</author><pubDate>Sun, 12 Jun 2011 05:51:00 GMT</pubDate><guid>http://www.blogjava.net/bnlovebn/archive/2011/06/12/352125.html</guid><wfw:comment>http://www.blogjava.net/bnlovebn/comments/352125.html</wfw:comment><comments>http://www.blogjava.net/bnlovebn/archive/2011/06/12/352125.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bnlovebn/comments/commentRss/352125.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bnlovebn/services/trackbacks/352125.html</trackback:ping><description><![CDATA[<div>最近orcale数据只有一台可以服务，导致hibernate 连接数据库每个13分钟就会报&#8220;APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending tasks&#8221;的错误.<br />原因是 hibernate 使用c3p0连接orcale数据后不会释放 ， c3p0的最大连接数为100，但显然c3p0有Bug，导致数据库连接池不够用，导致进程锁死。<br />后换Proxool后，观察正常。<br /><br />下面转引其它网友文章说明c3p0 、 Proxool、 <span class="hilite1" style="background-color: #ffffff">dbcp</span>&nbsp; 的区别 
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080">1</span><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;JDBC驱动程序&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">2</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="connection.driver_class"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">com.mysql.jdbc.Driver</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="connection.url"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">jdbc:mysql://localhost:3306/struts?useUnicode=true</span><span style="color: #ff0000">&amp;characterEncoding</span><span style="color: #000000">=GBK</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;数据库用户名&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">3</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="connection.username"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">root</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;数据库密码&nbsp;</span><span style="color: #008000">--&gt;</span></div><br />上面的一段配置，在<span class="hilite2" style="background-color: #ffffff">c3p0</span>和<span class="hilite1" style="background-color: #ffffff">dbcp</span>中，都是必需的，因为hibernate会根据上述的配置来生成connections，再交给<span class="hilite2" style="background-color: #ffffff">c3p0</span>或<span class="hilite1" style="background-color: #ffffff">dbcp</span>管理.<br /><br />1 <span class="hilite2" style="background-color: #ffffff">C3P0</span> <br /><br />只需在hibernate.cfg.xml中加入 <br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080">1</span><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="c3p0.min_size"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">5</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">2</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="c3p0.max_size"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">30</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">3</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="c3p0.time_out"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">1800</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">4</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="c3p0.max_statement"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">50</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">5</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div><br />还有在classespath中加入<span class="hilite2" style="background-color: #ffffff">c3p0</span>-0.8.4.5.jar <br /><br /><br />2 <span class="hilite1" style="background-color: #ffffff">dbcp</span> <br /><br />在hibernate.cfg.xml中加入 <br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080">&nbsp;1</span><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="dbcp.maxActive"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">100</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="dbcp.whenExhaustedAction"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">1</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="dbcp.maxWait"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">60000</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="dbcp.maxIdle"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">10</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="dbcp.ps.maxActive"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">100</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="dbcp.ps.whenExhaustedAction"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">1</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="dbcp.ps.maxWait"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">60000</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="dbcp.ps.maxIdle"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">10</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br /></span><span style="color: #008080">10</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div><br />还有在classespath中加入commons-pool-1.2.jar 和commons-<span class="hilite1" style="background-color: #ffffff">dbcp</span>-1.2.1.jar. <br /><br />3 proxool <br /><br />由于数据库connection在较长时间没有访问下会自动断开连接，导致浏览出错，增加proxool作为数据库pool。它有自动连接功能。<br />1)、从<a href="http://proxool.sourceforge.net/" target="_blank"><span style="color: #006600; background-color: #ffffff">http://proxool.sourceforge...</span></a><span style="background-color: #ffffff">下载proxool，释放proxool.jar到WEB-INF/lib<br /><br />2)、在hibernate.cfg.xml中增加：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080">1</span><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="hibernate.proxool.pool_alias"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">dbpool</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">2</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="hibernate.proxool.xml"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">proxool.xml</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">3</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="connection.provider_class"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">org.hibernate.connection.ProxoolConnectionProvider</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br /></span><span style="color: #008080">4</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div></span><br />3)、在与hibernate.cfg.xml同级目录（src根目录下）增加proxool.xml文件：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080">&nbsp;1</span><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">&lt;?</span><span style="color: #ff00ff">xml&nbsp;version="1.0"&nbsp;encoding="utf-8"</span><span style="color: #0000ff">?&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;the&nbsp;proxool&nbsp;configuration&nbsp;can&nbsp;be&nbsp;embedded&nbsp;within&nbsp;your&nbsp;own&nbsp;application's.&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">&nbsp;3</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;Anything&nbsp;outside&nbsp;the&nbsp;"proxool"&nbsp;tag&nbsp;is&nbsp;ignored.&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">something-else-entirely</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">proxool</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">alias</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">dbpool</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">alias</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">proxool只能管理由自己产生的连接</span><span style="color: #008000">--&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">driver-url</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jdbc:mysql://127.0.0.1:3306/wlsh?characterEncoding=GBK</span><span style="color: #ff0000">&amp;useUnicode</span><span style="color: #000000">=true</span><span style="color: #ff0000">&amp;autoReconnect</span><span style="color: #000000">=true&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">driver-url</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">10</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">driver-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">com.mysql.jdbc.Driver</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">driver-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">11</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">driver-properties</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">12</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="user"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="root"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">13</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="password"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="123456"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">14</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">driver-properties</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">15</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁</span><span style="color: #008000">--&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">16</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">house-keeping-sleep-time</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">90000</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">house-keeping-sleep-time</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">17</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;最少保持的空闲连接数</span><span style="color: #008000">--&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">18</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">prototype-count</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">5</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">prototype-count</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">19</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;允许最大连接数,超过了这个连接，再有请求时，就排在队列中等候，最大的等待请求数由maximum-new-connections决定</span><span style="color: #008000">--&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">20</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">maximum-connection-count</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">100</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">maximum-connection-count</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">21</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;最小连接数</span><span style="color: #008000">--&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">22</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">minimum-connection-count</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">10</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">minimum-connection-count</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">23</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">proxool</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">24</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">something-else-entirely</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br /></span><span style="color: #008080">25</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div><br />于在hibernate3.0中，已经不再支持dbcp了，hibernate的作者在hibernate.org中，明确指出在实践中发现dbcp有 BUG,在某些种情会产生很多空连接不能释放，所以抛弃了对dbcp的支持。至于c3p0，有评论说它的算法不是最优的，因为网上查资料得知：有网友做了一个实验，在同一项目中分别用了几个常用的连接池，然后测试其性能，发现c3p0占用资源比较大，效率也不高。所以，基于上述原因，proxool不少行家推荐使用，而且暂时来说，是负面评价是最少的一个。在三星中也有项目是用proxool的。从性能和出错率来说，proxool稍微比前两种好些。C3P0，稳定性似乎不错，在这方面似乎有很好的口碑。至于性能，应该不是最好的，算是中规中矩的类型。 <br />　　Proxool的口碑似乎很好，不大见到负面的评价，从官方资料上来看，有许多有用的特性和特点，也是许多人推荐的。<br /></div><img src ="http://www.blogjava.net/bnlovebn/aggbug/352125.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bnlovebn/" target="_blank">重归本垒（Bing）</a> 2011-06-12 13:51 <a href="http://www.blogjava.net/bnlovebn/archive/2011/06/12/352125.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>org.hibernate.exception.JDBCConnectionException: could not execute query</title><link>http://www.blogjava.net/bnlovebn/archive/2008/06/03/205470.html</link><dc:creator>重归本垒（Bing）</dc:creator><author>重归本垒（Bing）</author><pubDate>Tue, 03 Jun 2008 00:55:00 GMT</pubDate><guid>http://www.blogjava.net/bnlovebn/archive/2008/06/03/205470.html</guid><wfw:comment>http://www.blogjava.net/bnlovebn/comments/205470.html</wfw:comment><comments>http://www.blogjava.net/bnlovebn/archive/2008/06/03/205470.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bnlovebn/comments/commentRss/205470.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bnlovebn/services/trackbacks/205470.html</trackback:ping><description><![CDATA[<p>最近的一个项目在<span class="hilite9">Hibernate</span>使用C3P0的连接池，数据库为Mysql。开发测试没有问题，在运行中每个一段长的空闲时间就出现异常:</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">org.hibernate.exception.JDBCConnectionException:&nbsp;could&nbsp;not&nbsp;execute&nbsp;query&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />at&nbsp;org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:</span><span style="color: #000000">74</span><span style="color: #000000">)&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />at&nbsp;org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:</span><span style="color: #000000">43</span><span style="color: #000000">)&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" />.&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />Caused&nbsp;by:&nbsp;com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException:&nbsp;No&nbsp;operations&nbsp;allowed&nbsp;after&nbsp;connection&nbsp;closed.Connection&nbsp;was&nbsp;implicitly&nbsp;closed&nbsp;due&nbsp;to&nbsp;underlying&nbsp;exception</span><span style="color: #000000">/</span><span style="color: #000000">error:&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">**</span><span style="color: #000000">&nbsp;BEGIN&nbsp;NESTED&nbsp;EXCEPTION&nbsp;</span><span style="color: #000000">**</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />com.mysql.jdbc.CommunicationsException&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />MESSAGE:&nbsp;Communications&nbsp;link&nbsp;failure&nbsp;due&nbsp;to&nbsp;underlying&nbsp;exception:&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">**</span><span style="color: #000000">&nbsp;BEGIN&nbsp;NESTED&nbsp;EXCEPTION&nbsp;</span><span style="color: #000000">**</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />java.net.SocketException&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />MESSAGE:&nbsp;Broken&nbsp;pipe&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />STACKTRACE:&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />java.net.SocketException:&nbsp;Broken&nbsp;pipe&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />at&nbsp;java.net.SocketOutputStream.socketWrite0(Native&nbsp;Method)&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" />&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">**</span><span style="color: #000000">&nbsp;END&nbsp;NESTED&nbsp;EXCEPTION&nbsp;</span><span style="color: #000000">**</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<br />
<br />
<p>查看了Mysql的文档，以及Connector/J的文档以及在线说明发现，出现这种异常的原因是：</p>
<p>Mysql服务器默认的&#8220;wait_timeout&#8221;是8小时，也就是说一个connection空闲超过8个小时，Mysql将自动断开该connection。这就是问题的所在，在C3P0 pools中的connections如果空闲超过8小时，Mysql将其断开，而C3P0并不知道该connection已经失效，如果这时有Client请求connection，C3P0将该失效的Connection提供给Client，将会造成上面的异常。</p>
<p>解决的方法有3种：</p>
<ol>
    <li>增加wait_timeout的时间。
    <li>减少Connection pools中connection的lifetime。
    <li>测试Connection pools中connection的有效性。 </li>
</ol>
<p>当然最好的办法是同时综合使用上述3种方法，下面就DBCP和C3P0分别做一说明，假设wait_timeout为默认的8小时</p>
<p>DBCP增加以下配置信息:</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #008000">//</span><span style="color: #008000">set&nbsp;to&nbsp;'SELECT&nbsp;1'&nbsp;</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">validationQuery&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">SELECT&nbsp;1</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">set&nbsp;to&nbsp;'true'&nbsp;</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">testWhileIdle&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">true</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">some&nbsp;positive&nbsp;integer&nbsp;</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">timeBetweenEvictionRunsMillis&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">3600000</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">set&nbsp;to&nbsp;something&nbsp;smaller&nbsp;than&nbsp;'wait_timeout'&nbsp;</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">minEvictableIdleTimeMillis&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">18000000</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">if&nbsp;you&nbsp;don't&nbsp;mind&nbsp;a&nbsp;hit&nbsp;for&nbsp;every&nbsp;getConnection(),&nbsp;set&nbsp;to&nbsp;"true"&nbsp;</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">testOnBorrow&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">true</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<br />
C3P0增加以下配置信息:<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #008000">//</span><span style="color: #008000">获取connnection时测试是否有效&nbsp;</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">testConnectionOnCheckin&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">自动测试的table名称</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />automaticTestTable</span><span style="color: #000000">=</span><span style="color: #000000">C3P0TestTable<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">set&nbsp;to&nbsp;something&nbsp;much&nbsp;less&nbsp;than&nbsp;wait_timeout,&nbsp;prevents&nbsp;connections&nbsp;from&nbsp;going&nbsp;stale&nbsp;</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">idleConnectionTestPeriod&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">18000</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">set&nbsp;to&nbsp;something&nbsp;slightly&nbsp;less&nbsp;than&nbsp;wait_timeout,&nbsp;preventing&nbsp;'stale'&nbsp;connections&nbsp;from&nbsp;being&nbsp;handed&nbsp;out&nbsp;</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">maxIdleTime&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">25000</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">if&nbsp;you&nbsp;can&nbsp;take&nbsp;the&nbsp;performance&nbsp;'hit',&nbsp;set&nbsp;to&nbsp;"true"&nbsp;</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">testConnectionOnCheckout&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<br />
更多的配置信息大家可以查看C3P0文档，Connector/J文档，以及DBCP的文档。
<img src ="http://www.blogjava.net/bnlovebn/aggbug/205470.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bnlovebn/" target="_blank">重归本垒（Bing）</a> 2008-06-03 08:55 <a href="http://www.blogjava.net/bnlovebn/archive/2008/06/03/205470.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Initialization of bean failed; Cannot configure CacheManager;文件提前结束　等错误</title><link>http://www.blogjava.net/bnlovebn/archive/2007/07/19/131202.html</link><dc:creator>重归本垒（Bing）</dc:creator><author>重归本垒（Bing）</author><pubDate>Thu, 19 Jul 2007 01:45:00 GMT</pubDate><guid>http://www.blogjava.net/bnlovebn/archive/2007/07/19/131202.html</guid><wfw:comment>http://www.blogjava.net/bnlovebn/comments/131202.html</wfw:comment><comments>http://www.blogjava.net/bnlovebn/archive/2007/07/19/131202.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bnlovebn/comments/commentRss/131202.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bnlovebn/services/trackbacks/131202.html</trackback:ping><description><![CDATA[<span style="FONT-SIZE: 12pt">org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactoryId' defined in ServletContext resource [/WEB-INF/classes/applicationContext.xml]: Initialization of bean failed; nested exception is org.hibernate.cache.CacheException: net.sf.ehcache.CacheException: Cannot configure CacheManager: 文件过早结束。<br><br>昨天rebase后出现了这个问题，费了我一个下午的时间，多方查找资料都没有办法，到今天早上后看到</span><a style="FONT-SIZE: 12pt" href="http://forum.springframework.org/showthread.php?t=25528">http://forum.springframework.org/showthread.php?t=25528</a><span style="FONT-SIZE: 12pt">上说的。才知道大概是ehcache配制不当造成的,于是从同事那里拷贝ehcache.xml过来，解决了！血的教训！<br><br>ehcache是一个很不错的轻量级缓存实现，速度快，功能全面（一般的应用完全足够了），从1.2版后可以支持分布式缓存，可以用在集群环境中。除了可以缓存普通的对象，还可以用来作为Web页面的缓存。缓存静态HTML、JSP、Velocity、FreeMarker等等的页面。Hibernate选择ehcache作为默认的缓存实现的。<br><br><br><br><br><br><br></span>
<img src ="http://www.blogjava.net/bnlovebn/aggbug/131202.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bnlovebn/" target="_blank">重归本垒（Bing）</a> 2007-07-19 09:45 <a href="http://www.blogjava.net/bnlovebn/archive/2007/07/19/131202.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>翻译的Hibernate的Session的javadoc[转]</title><link>http://www.blogjava.net/bnlovebn/archive/2007/07/13/130043.html</link><dc:creator>重归本垒（Bing）</dc:creator><author>重归本垒（Bing）</author><pubDate>Fri, 13 Jul 2007 05:02:00 GMT</pubDate><guid>http://www.blogjava.net/bnlovebn/archive/2007/07/13/130043.html</guid><wfw:comment>http://www.blogjava.net/bnlovebn/comments/130043.html</wfw:comment><comments>http://www.blogjava.net/bnlovebn/archive/2007/07/13/130043.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bnlovebn/comments/commentRss/130043.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bnlovebn/services/trackbacks/130043.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Hibernate的透明持久化用起来非常舒服，有时甚至忘记了数据库的存在。我身边的朋友经常会分不清save、saveOrUpdate、update的区别，lock、merge、replicate、refresh、evict甚至不知道是干什么用的。而且关于实体对象的生命周期也有很多概念不清，分不清transient、persistent、detached的区别，只是知道PO、VO这样的通俗叫法。其实...&nbsp;&nbsp;<a href='http://www.blogjava.net/bnlovebn/archive/2007/07/13/130043.html'>阅读全文</a><img src ="http://www.blogjava.net/bnlovebn/aggbug/130043.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bnlovebn/" target="_blank">重归本垒（Bing）</a> 2007-07-13 13:02 <a href="http://www.blogjava.net/bnlovebn/archive/2007/07/13/130043.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>load,get;find,iterator;merge,saveOrUpdate,lock的区别</title><link>http://www.blogjava.net/bnlovebn/archive/2007/07/13/130025.html</link><dc:creator>重归本垒（Bing）</dc:creator><author>重归本垒（Bing）</author><pubDate>Fri, 13 Jul 2007 03:18:00 GMT</pubDate><guid>http://www.blogjava.net/bnlovebn/archive/2007/07/13/130025.html</guid><wfw:comment>http://www.blogjava.net/bnlovebn/comments/130025.html</wfw:comment><comments>http://www.blogjava.net/bnlovebn/archive/2007/07/13/130025.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bnlovebn/comments/commentRss/130025.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bnlovebn/services/trackbacks/130025.html</trackback:ping><description><![CDATA[<p>一、load,get<br>（1）当记录不存在时候，get方法返回null,load方法产生异常</p>
<p>（2）load方法可以返回实体的代理类，get方法则返回真是的实体类</p>
<p>（3）load方法可以充分利用hibernate的内部缓存和二级缓存中的现有数据，而get方法仅仅在内部缓存中进行数据查找，如果没有发现数据則将越过二级缓存，直接调用SQL查询数据库。<br>&nbsp;&nbsp;&nbsp;(４)&nbsp;也许别人把数据库中的数据修改了，load如何在缓存中找到了数据，则不会再访问数据库，而get则会返回最新数据。<br>&nbsp;<br>二、find,iterator<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1) iterator首先会获取符合条件的记录的id，再跟据id在本地缓存中查找数据，查找不到的再在数据库中查找，结果再存在缓存中。N+１条SQL。<br>　(2)find跟据生成的sql语句，直接访问数据库，查到的数据存在缓存中，一条sql。<br><br>三、Hibernate生成的DAO类中函数功能说明(merge,saveOrUpdate,lock)<br><br></p>
<p><font color=#3366ff>/**<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 将传入的detached状态的对象的属性复制到持久化对象中，并返回该持久化对象。 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 如果该session中没有关联的持久化对象，加载一个。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 如果传入对象未保存，保存一个副本并作为持久对象返回，传入对象依然保持detached状态。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */</font><br>public Sysuser merge(Sysuser detachedInstance) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log.debug("merging Sysuser instance");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sysuser result = (Sysuser) getHibernateTemplate().merge(<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; detachedInstance);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log.debug("merge successful");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return result;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (RuntimeException re) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log.error("merge failed", re);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw re;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>}</p>
<p><font color=#3366ff>/**<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 将传入的对象持久化并保存。 如果对象未保存（Transient状态），调用save方法保存。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 如果对象已保存（Detached状态），调用update方法将对象与Session重新关联。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br></font>public void attachDirty(Sysuser instance) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log.debug("attaching dirty Sysuser instance");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getHibernateTemplate().saveOrUpdate(instance);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log.debug("attach successful");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (RuntimeException re) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log.error("attach failed", re);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw re;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>}</p>
<p><font color=#3366ff>/**<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 将传入的对象状态设置为Transient状态<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */</font><br>public void attachClean(Sysuser instance) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log.debug("attaching clean Sysuser instance");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getHibernateTemplate().lock(instance, LockMode.NONE);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log.debug("attach successful");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (RuntimeException re) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log.error("attach failed", re);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw re;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>}</p>
<img src ="http://www.blogjava.net/bnlovebn/aggbug/130025.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bnlovebn/" target="_blank">重归本垒（Bing）</a> 2007-07-13 11:18 <a href="http://www.blogjava.net/bnlovebn/archive/2007/07/13/130025.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate SQL方言 (hibernate.dialect)</title><link>http://www.blogjava.net/bnlovebn/archive/2007/06/26/126307.html</link><dc:creator>重归本垒（Bing）</dc:creator><author>重归本垒（Bing）</author><pubDate>Tue, 26 Jun 2007 03:53:00 GMT</pubDate><guid>http://www.blogjava.net/bnlovebn/archive/2007/06/26/126307.html</guid><wfw:comment>http://www.blogjava.net/bnlovebn/comments/126307.html</wfw:comment><comments>http://www.blogjava.net/bnlovebn/archive/2007/06/26/126307.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bnlovebn/comments/commentRss/126307.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bnlovebn/services/trackbacks/126307.html</trackback:ping><description><![CDATA[如果出现如下错误，则可能是Hibernate SQL方言 (hibernate.dialect)设置不正确。<br>Caused by: java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]'last_insert_id' 不是可以识别的 函数名。<br>
<div class=bvMsg id=msgcns!fcaf12f15c37d1ba!148>
<table summary="&#10;                    Hibernate SQL方言 (hibernate.dialect)&#10;                " border=1>
    <thead>
        <tr>
            <th>RDBMS
            <th>方言
        </tr>
    </tr>
</tr>
</tr>
</tr>
</tr>
</tr>
<tbody>
    <tr>
        <td>DB2
        <td><tt>org.hibernate.dialect.DB2Dialect</tt>
        <tr>
            <td>DB2 AS/400
            <td><tt>org.hibernate.dialect.DB2400Dialect</tt>
            <tr>
                <td>DB2 OS390
                <td><tt>org.hibernate.dialect.DB2390Dialect</tt>
                <tr>
                    <td>PostgreSQL
                    <td><tt>org.hibernate.dialect.PostgreSQLDialect</tt>
                    <tr>
                        <td>MySQL
                        <td><tt>org.hibernate.dialect.MySQLDialect</tt>
                        <tr>
                            <td>MySQL with InnoDB
                            <td><tt>org.hibernate.dialect.MySQLInnoDBDialect</tt>
                            <tr>
                                <td>MySQL with MyISAM
                                <td><tt>org.hibernate.dialect.MySQLMyISAMDialect</tt>
                                <tr>
                                    <td>Oracle (any version)
                                    <td><tt>org.hibernate.dialect.OracleDialect</tt>
                                    <tr>
                                        <td>Oracle 9i/10g
                                        <td><tt>org.hibernate.dialect.Oracle9Dialect</tt>
                                        <tr>
                                            <td>Sybase
                                            <td><tt>org.hibernate.dialect.SybaseDialect</tt>
                                            <tr>
                                                <td>Sybase Anywhere
                                                <td><tt>org.hibernate.dialect.SybaseAnywhereDialect</tt>
                                                <tr>
                                                    <td>Microsoft SQL Server
                                                    <td><tt>org.hibernate.dialect.SQLServerDialect</tt>
                                                    <tr>
                                                        <td>SAP DB
                                                        <td><tt>org.hibernate.dialect.SAPDBDialect</tt>
                                                        <tr>
                                                            <td>Informix
                                                            <td><tt>org.hibernate.dialect.InformixDialect</tt>
                                                            <tr>
                                                                <td>HypersonicSQL
                                                                <td><tt>org.hibernate.dialect.HSQLDialect</tt>
                                                                <tr>
                                                                    <td>Ingres
                                                                    <td><tt>org.hibernate.dialect.IngresDialect</tt>
                                                                    <tr>
                                                                        <td>Progress
                                                                        <td><tt>org.hibernate.dialect.ProgressDialect</tt>
                                                                        <tr>
                                                                            <td>Mckoi SQL
                                                                            <td><tt>org.hibernate.dialect.MckoiDialect</tt>
                                                                            <tr>
                                                                                <td>Interbase
                                                                                <td><tt>org.hibernate.dialect.InterbaseDialect</tt>
                                                                                <tr>
                                                                                    <td>Pointbase
                                                                                    <td><tt>org.hibernate.dialect.PointbaseDialect</tt>
                                                                                    <tr>
                                                                                        <td>FrontBase
                                                                                        <td><tt>org.hibernate.dialect.FrontbaseDialect</tt>
                                                                                        <tr>
                                                                                            <td>Firebird
                                                                                            <td><tt>org.hibernate.dialect.FirebirdDialect</tt></td>
                                                                                        </tr>
                                                                                    </tbody>
                                                                                </table>
                                                                                <br></div><img src ="http://www.blogjava.net/bnlovebn/aggbug/126307.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bnlovebn/" target="_blank">重归本垒（Bing）</a> 2007-06-26 11:53 <a href="http://www.blogjava.net/bnlovebn/archive/2007/06/26/126307.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>