﻿<?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/tedeyang/</link><description>智慧之冰山</description><language>zh-cn</language><lastBuildDate>Fri, 01 May 2026 11:42:46 GMT</lastBuildDate><pubDate>Fri, 01 May 2026 11:42:46 GMT</pubDate><ttl>60</ttl><item><title>论见义勇为的林老板不要奖金</title><link>http://www.blogjava.net/tedeyang/archive/2009/03/27/262406.html</link><dc:creator>山巅</dc:creator><author>山巅</author><pubDate>Fri, 27 Mar 2009 05:41:00 GMT</pubDate><guid>http://www.blogjava.net/tedeyang/archive/2009/03/27/262406.html</guid><wfw:comment>http://www.blogjava.net/tedeyang/comments/262406.html</wfw:comment><comments>http://www.blogjava.net/tedeyang/archive/2009/03/27/262406.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/tedeyang/comments/commentRss/262406.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tedeyang/services/trackbacks/262406.html</trackback:ping><description><![CDATA[昨天就看到<a target="_blank" href="http://news.cz001.com.cn/social/2009/0326/167801.html">英勇救人的温州林老板捐献见义勇为奖金的新闻</a>，甚至在搜狐等媒体都有首页链接，影响不可谓不大，我也对这位有仁有德的林先生很敬佩，但同时却又相当遗憾！<br />
窃以为林老板救人是对，但捐金是无意间犯下的大错，而且是非常大错，由于网络的广泛传播，恶劣影响是救了100个人都抵消不了！<br />
为什么呢？<br />
新闻一入眼，我就不由想起两个成语：“<font color="Red">子贡赎奴，子路援溺</font>”，历史是和其相似啊，<br /><br />
以下是成语的出处：<br /><font color="Orange">       鲁国之法，鲁人为臣于诸侯，有能赎之者，取金于府。子贡赎鲁人于诸侯而让其金。孔子曰："赐失之矣！夫圣人之举事，可以移风易俗，而教导可施于百姓，非独适已之行也。今鲁国富者寡而贫者多，取其金则无损于行，不取其金，则不复赎人矣。"</font><br /><font color="Orange">　　子路拯溺者，其人拜之以牛，子路受之。孔子喜曰："鲁人必多拯溺者矣。"</font><br /><font color="Orange">----《子贡赎鲁人让金》</font><br /><br />
      孔子之为圣，确实有其超越常人的深邃思想。<br />
    
 春秋鲁国有项非常先进的政策：把流落在外为奴的鲁国人赎回本国可以获得国家的奖金，以此鼓励赎奴行为，这是常州的见义勇为奖是一个道理。孔子的一个弟子
子贡是个大富豪，很有钱，他赎奴回去却不接受政府的奖金，嗯，太有钱了，不在乎这点，行为高尚吧？拿到现代来说就是做好事不求回报，雷锋啊。可孔子却发火
了，要把子贡逐出门墙。<br />
    
 他的理由在文中也说得很清楚，“政策的目的是引导百姓，而不是让你一个人爽，这世道是穷人多富人少，拿奖金才是正当的行为，你开了这个先例，提高了道德
的门槛，以后就没人敢再接受奖金了”，事实果然是和孔子的分析一致，鲁国的这项仁政慢慢地没人响应，逐渐荒废了。林老板与子贡和其相似！<br />
      子路也是孔子的弟子，是大贤，他下水救人，别人送他一头牛，一头牛的价值在农耕社会相当于现代的10万人民币吧，他不矫情，收下了，孔子很高兴，说：“以后鲁国人救落水的一定会越来越多”<br />
      孔子显然是懂得人性的，利之所趋，义之所致，<font color="Blue">利与义的完美结合才是长远之道</font>，福利彩票就是这类典范。<br /><br /><font color="Red"><strong>林老板不懂这个道理，可我们的政府工作人员怎么也不懂这个道理？今人还不如古人吗？</strong></font><br /><font color="Red"><strong>我建议今后见义勇为奖的颁发要确立一个原则，不鼓励受奖人捐赠或拒收奖金，工作人员应该向每个人解释政策的目的，制止盲目的善行，得行百年之政。</strong></font><img src ="http://www.blogjava.net/tedeyang/aggbug/262406.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tedeyang/" target="_blank">山巅</a> 2009-03-27 13:41 <a href="http://www.blogjava.net/tedeyang/archive/2009/03/27/262406.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>女人是不能和她讲道理的</title><link>http://www.blogjava.net/tedeyang/archive/2009/01/16/251574.html</link><dc:creator>山巅</dc:creator><author>山巅</author><pubDate>Fri, 16 Jan 2009 06:33:00 GMT</pubDate><guid>http://www.blogjava.net/tedeyang/archive/2009/01/16/251574.html</guid><wfw:comment>http://www.blogjava.net/tedeyang/comments/251574.html</wfw:comment><comments>http://www.blogjava.net/tedeyang/archive/2009/01/16/251574.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tedeyang/comments/commentRss/251574.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tedeyang/services/trackbacks/251574.html</trackback:ping><description><![CDATA[女人会对你莫名其妙发火,幽怨,掉泪,真的不能和她们讲道理.<br />不能讲,越讲你越黑,本来是见小事,你要和她顶真不认错,她就会慢慢粉面含泪,渐渐泪流成河,最后哭着赶你走.<br />说不通的,只有哄着.<br /><img src ="http://www.blogjava.net/tedeyang/aggbug/251574.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tedeyang/" target="_blank">山巅</a> 2009-01-16 14:33 <a href="http://www.blogjava.net/tedeyang/archive/2009/01/16/251574.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>inner class与重载问题</title><link>http://www.blogjava.net/tedeyang/archive/2008/08/21/223489.html</link><dc:creator>山巅</dc:creator><author>山巅</author><pubDate>Thu, 21 Aug 2008 06:22:00 GMT</pubDate><guid>http://www.blogjava.net/tedeyang/archive/2008/08/21/223489.html</guid><wfw:comment>http://www.blogjava.net/tedeyang/comments/223489.html</wfw:comment><comments>http://www.blogjava.net/tedeyang/archive/2008/08/21/223489.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tedeyang/comments/commentRss/223489.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tedeyang/services/trackbacks/223489.html</trackback:ping><description><![CDATA[
		<p>今天貌似发现了一个java的bug.<br />这是一个内部匿名类调用外部类方法的问题.<br />我在外部类中有个notifyAll(Object me)方法,在内部匿名类里却无法调用它，编译报错。<br />尝试把notifyAll改名为tellAll，——恩，蛮好，可以调用。<br />尝试写成 OuterClassName.this.notifyAll(me)——恩，也可以调用。<br />看起来如果在外部类中重载Object的方法，java无法区分。<br /></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 id="Codehighlighter1_0_10_Open_Image" onclick="this.style.display='none'; Codehighlighter1_0_10_Open_Text.style.display='none'; Codehighlighter1_0_10_Closed_Image.style.display='inline'; Codehighlighter1_0_10_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
				<img id="Codehighlighter1_0_10_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_0_10_Closed_Text.style.display='none'; Codehighlighter1_0_10_Open_Image.style.display='inline'; Codehighlighter1_0_10_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				<span id="Codehighlighter1_0_10_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/** */</span>
				<span id="Codehighlighter1_0_10_Open_Text">
						<span style="COLOR: #008000">/**</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * <br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /> </span>
						<span style="COLOR: #008000">*/</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">package</span>
				<span style="COLOR: #000000"> cn.roob.webdown.statistic;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">import</span>
				<span style="COLOR: #000000"> java.util.concurrent.Executors;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">import</span>
				<span style="COLOR: #000000"> java.util.concurrent.ScheduledExecutorService;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">import</span>
				<span style="COLOR: #000000"> java.util.concurrent.TimeUnit;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">import</span>
				<span style="COLOR: #000000"> org.apache.log4j.Logger;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">import</span>
				<span style="COLOR: #000000"> cn.roob.webdown.persist.StatisticDAO;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">import</span>
				<span style="COLOR: #000000"> cn.roob.webdown.persist.TaskCountRecord;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">import</span>
				<span style="COLOR: #000000"> cn.roob.webdown.util.Config;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_343_461_Open_Image" onclick="this.style.display='none'; Codehighlighter1_343_461_Open_Text.style.display='none'; Codehighlighter1_343_461_Closed_Image.style.display='inline'; Codehighlighter1_343_461_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_343_461_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_343_461_Closed_Text.style.display='none'; Codehighlighter1_343_461_Open_Image.style.display='inline'; Codehighlighter1_343_461_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span id="Codehighlighter1_343_461_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/** */</span>
				<span id="Codehighlighter1_343_461_Open_Text">
						<span style="COLOR: #008000">/**</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * 任务状态定时统计线程,只记录发生了变动的统计结果.&lt;br&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * 以单例模式运行,通过观察者模式发送统计结果&lt;br&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * 典型的观察者有客户端通讯和统计曲线图<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * </span>
						<span style="COLOR: #808080">@author</span>
						<span style="COLOR: #008000"> tedeyang<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * <br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /> </span>
						<span style="COLOR: #008000">*/</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img id="Codehighlighter1_520_1969_Open_Image" onclick="this.style.display='none'; Codehighlighter1_520_1969_Open_Text.style.display='none'; Codehighlighter1_520_1969_Closed_Image.style.display='inline'; Codehighlighter1_520_1969_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
						<img id="Codehighlighter1_520_1969_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_520_1969_Closed_Text.style.display='none'; Codehighlighter1_520_1969_Open_Image.style.display='inline'; Codehighlighter1_520_1969_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">public</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">class</span>
				<span style="COLOR: #000000"> TaskStatistic </span>
				<span style="COLOR: #0000ff">extends</span>
				<span style="COLOR: #000000"> CommonStatisticSource </span>
				<span id="Codehighlighter1_520_1969_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_520_1969_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">static</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">private</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> statisticRate </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> Config.getApplicationConfig().statisticRate();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">static</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">private</span>
						<span style="COLOR: #000000"> TaskStatistic thread </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">null</span>
						<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">private</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">static</span>
						<span style="COLOR: #000000"> Logger log </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> Logger.getLogger(TaskStatistic.</span>
						<span style="COLOR: #0000ff">class</span>
						<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">private</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">final</span>
						<span style="COLOR: #000000"> ScheduledExecutorService schedule </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> Executors.newSingleThreadScheduledExecutor();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">private</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">boolean</span>
						<span style="COLOR: #000000"> started </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">false</span>
						<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_875_878_Open_Image" onclick="this.style.display='none'; Codehighlighter1_875_878_Open_Text.style.display='none'; Codehighlighter1_875_878_Closed_Image.style.display='inline'; Codehighlighter1_875_878_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_875_878_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_875_878_Closed_Text.style.display='none'; Codehighlighter1_875_878_Open_Image.style.display='inline'; Codehighlighter1_875_878_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">private</span>
						<span style="COLOR: #000000"> TaskStatistic() </span>
						<span id="Codehighlighter1_875_878_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_875_878_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								<br />
								<img id="Codehighlighter1_937_1018_Open_Image" onclick="this.style.display='none'; Codehighlighter1_937_1018_Open_Text.style.display='none'; Codehighlighter1_937_1018_Closed_Image.style.display='inline'; Codehighlighter1_937_1018_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_937_1018_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_937_1018_Closed_Text.style.display='none'; Codehighlighter1_937_1018_Open_Image.style.display='inline'; Codehighlighter1_937_1018_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">static</span>
						<span style="COLOR: #000000"> TaskStatistic getSingleScheduledThread() </span>
						<span id="Codehighlighter1_937_1018_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_937_1018_Open_Text">
								<span style="COLOR: #000000">{<br /><img id="Codehighlighter1_961_998_Open_Image" onclick="this.style.display='none'; Codehighlighter1_961_998_Open_Text.style.display='none'; Codehighlighter1_961_998_Closed_Image.style.display='inline'; Codehighlighter1_961_998_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_961_998_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_961_998_Closed_Text.style.display='none'; Codehighlighter1_961_998_Open_Image.style.display='inline'; Codehighlighter1_961_998_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">if</span>
								<span style="COLOR: #000000"> (thread </span>
								<span style="COLOR: #000000">==</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">null</span>
								<span style="COLOR: #000000">) </span>
								<span id="Codehighlighter1_961_998_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
										<img src="http://www.blogjava.net/images/dot.gif" />
								</span>
								<span id="Codehighlighter1_961_998_Open_Text">
										<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            thread </span>
										<span style="COLOR: #000000">=</span>
										<span style="COLOR: #000000"> </span>
										<span style="COLOR: #0000ff">new</span>
										<span style="COLOR: #000000"> TaskStatistic();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span>
								</span>
								<span style="COLOR: #000000">
										<br />
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">return</span>
								<span style="COLOR: #000000"> thread;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								<br />
								<img id="Codehighlighter1_1022_1081_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1022_1081_Open_Text.style.display='none'; Codehighlighter1_1022_1081_Closed_Image.style.display='inline'; Codehighlighter1_1022_1081_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_1022_1081_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1022_1081_Closed_Text.style.display='none'; Codehighlighter1_1022_1081_Open_Image.style.display='inline'; Codehighlighter1_1022_1081_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span id="Codehighlighter1_1022_1081_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/** */</span>
						<span id="Codehighlighter1_1022_1081_Open_Text">
								<span style="COLOR: #008000">/**</span>
								<span style="COLOR: #008000">
										<br />
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     * 在垃圾收集前停止线程<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     * </span>
								<span style="COLOR: #808080">@see</span>
								<span style="COLOR: #008000"> java.lang.Object#finalize()<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />     </span>
								<span style="COLOR: #008000">*/</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img id="Codehighlighter1_1127_1165_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1127_1165_Open_Text.style.display='none'; Codehighlighter1_1127_1165_Closed_Image.style.display='inline'; Codehighlighter1_1127_1165_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_1127_1165_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1127_1165_Closed_Text.style.display='none'; Codehighlighter1_1127_1165_Open_Image.style.display='inline'; Codehighlighter1_1127_1165_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">protected</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">void</span>
						<span style="COLOR: #000000"> finalize() </span>
						<span style="COLOR: #0000ff">throws</span>
						<span style="COLOR: #000000"> Throwable </span>
						<span id="Codehighlighter1_1127_1165_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_1127_1165_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">this</span>
								<span style="COLOR: #000000">.stop();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">super</span>
								<span style="COLOR: #000000">.finalize();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								<br />
								<img id="Codehighlighter1_1169_1223_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1169_1223_Open_Text.style.display='none'; Codehighlighter1_1169_1223_Closed_Image.style.display='inline'; Codehighlighter1_1169_1223_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_1169_1223_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1169_1223_Closed_Text.style.display='none'; Codehighlighter1_1169_1223_Open_Image.style.display='inline'; Codehighlighter1_1169_1223_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span id="Codehighlighter1_1169_1223_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/** */</span>
						<span id="Codehighlighter1_1169_1223_Open_Text">
								<span style="COLOR: #008000">/**</span>
								<span style="COLOR: #008000">
										<br />
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     * 启动,以固定的延迟频率统计数据库中任务的状态,如果状态发生变化则通知监听者,并记录.<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />     </span>
								<span style="COLOR: #008000">*/</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img id="Codehighlighter1_1246_1830_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1246_1830_Open_Text.style.display='none'; Codehighlighter1_1246_1830_Closed_Image.style.display='inline'; Codehighlighter1_1246_1830_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_1246_1830_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1246_1830_Closed_Text.style.display='none'; Codehighlighter1_1246_1830_Open_Image.style.display='inline'; Codehighlighter1_1246_1830_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">void</span>
						<span style="COLOR: #000000"> start() </span>
						<span id="Codehighlighter1_1246_1830_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_1246_1830_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">if</span>
								<span style="COLOR: #000000"> (started)<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            </span>
								<span style="COLOR: #0000ff">return</span>
								<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">if</span>
								<span style="COLOR: #000000"> (log.isInfoEnabled())<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            log.info(</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">启动任务统计线程</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        started </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">true</span>
								<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">final</span>
								<span style="COLOR: #000000"> StatisticDAO dao </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">new</span>
								<span style="COLOR: #000000"> StatisticDAO();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        schedule.scheduleWithFixedDelay(<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                <br /><img id="Codehighlighter1_1451_1760_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1451_1760_Open_Text.style.display='none'; Codehighlighter1_1451_1760_Closed_Image.style.display='inline'; Codehighlighter1_1451_1760_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1451_1760_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1451_1760_Closed_Text.style.display='none'; Codehighlighter1_1451_1760_Open_Image.style.display='inline'; Codehighlighter1_1451_1760_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />                </span>
								<span style="COLOR: #0000ff">new</span>
								<span style="COLOR: #000000"> Runnable() </span>
								<span id="Codehighlighter1_1451_1760_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
										<img src="http://www.blogjava.net/images/dot.gif" />
								</span>
								<span id="Codehighlighter1_1451_1760_Open_Text">
										<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                    TaskCountRecord lastRecord </span>
										<span style="COLOR: #000000">=</span>
										<span style="COLOR: #000000"> </span>
										<span style="COLOR: #0000ff">null</span>
										<span style="COLOR: #000000">;<br /><img id="Codehighlighter1_1516_1754_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1516_1754_Open_Text.style.display='none'; Codehighlighter1_1516_1754_Closed_Image.style.display='inline'; Codehighlighter1_1516_1754_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1516_1754_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1516_1754_Closed_Text.style.display='none'; Codehighlighter1_1516_1754_Open_Image.style.display='inline'; Codehighlighter1_1516_1754_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />                    </span>
										<span style="COLOR: #0000ff">public</span>
										<span style="COLOR: #000000"> </span>
										<span style="COLOR: #0000ff">void</span>
										<span style="COLOR: #000000"> run() </span>
										<span id="Codehighlighter1_1516_1754_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
												<img src="http://www.blogjava.net/images/dot.gif" />
										</span>
										<span id="Codehighlighter1_1516_1754_Open_Text">
												<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                        TaskCountRecord totalCount </span>
												<span style="COLOR: #000000">=</span>
												<span style="COLOR: #000000"> dao.countTaskStatus();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                        </span>
												<span style="COLOR: #008000">//</span>
												<span style="COLOR: #008000"> 任务数没有变化则不更新</span>
												<span style="COLOR: #008000">
														<br />
														<img id="Codehighlighter1_1639_1746_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1639_1746_Open_Text.style.display='none'; Codehighlighter1_1639_1746_Closed_Image.style.display='inline'; Codehighlighter1_1639_1746_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
														<img id="Codehighlighter1_1639_1746_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1639_1746_Closed_Text.style.display='none'; Codehighlighter1_1639_1746_Open_Image.style.display='inline'; Codehighlighter1_1639_1746_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />
												</span>
												<span style="COLOR: #000000">                        </span>
												<span style="COLOR: #0000ff">if</span>
												<span style="COLOR: #000000"> (</span>
												<span style="COLOR: #000000">!</span>
												<span style="COLOR: #000000">totalCount.equals(lastRecord)) </span>
												<span id="Codehighlighter1_1639_1746_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
														<img src="http://www.blogjava.net/images/dot.gif" />
												</span>
												<span id="Codehighlighter1_1639_1746_Open_Text">
														<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                            lastRecord </span>
														<span style="COLOR: #000000">=</span>
														<span style="COLOR: #000000"> totalCount;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                            <font color="#ff0099">tellAllObservers(totalCount);</font><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                            dao.save(totalCount); <br />                                <font color="#ff3300"><strong>notifyAll(totalCount);//该方法在父类中<br /></strong></font><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />                        }</span>
												</span>
												<span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />                    }</span>
										</span>
										<span style="COLOR: #000000">
												<br />
												<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />                }</span>
								</span>
								<span style="COLOR: #000000">,<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                statisticRate, <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                statisticRate, <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                TimeUnit.SECONDS<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        );<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								<br />
								<img id="Codehighlighter1_1834_1848_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1834_1848_Open_Text.style.display='none'; Codehighlighter1_1834_1848_Closed_Image.style.display='inline'; Codehighlighter1_1834_1848_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_1834_1848_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1834_1848_Closed_Text.style.display='none'; Codehighlighter1_1834_1848_Open_Image.style.display='inline'; Codehighlighter1_1834_1848_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span id="Codehighlighter1_1834_1848_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/** */</span>
						<span id="Codehighlighter1_1834_1848_Open_Text">
								<span style="COLOR: #008000">/**</span>
								<span style="COLOR: #008000">
										<br />
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     * 结束<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />     </span>
								<span style="COLOR: #008000">*/</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img id="Codehighlighter1_1870_1967_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1870_1967_Open_Text.style.display='none'; Codehighlighter1_1870_1967_Closed_Image.style.display='inline'; Codehighlighter1_1870_1967_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_1870_1967_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1870_1967_Closed_Text.style.display='none'; Codehighlighter1_1870_1967_Open_Image.style.display='inline'; Codehighlighter1_1870_1967_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">void</span>
						<span style="COLOR: #000000"> stop() </span>
						<span id="Codehighlighter1_1870_1967_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_1870_1967_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        schedule.shutdown();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        started </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">false</span>
								<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">if</span>
								<span style="COLOR: #000000"> (log.isInfoEnabled())<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            log.info(</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">停止任务统计线程</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
		</div>
<img src ="http://www.blogjava.net/tedeyang/aggbug/223489.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tedeyang/" target="_blank">山巅</a> 2008-08-21 14:22 <a href="http://www.blogjava.net/tedeyang/archive/2008/08/21/223489.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>陆春龙得金</title><link>http://www.blogjava.net/tedeyang/archive/2008/08/19/223111.html</link><dc:creator>山巅</dc:creator><author>山巅</author><pubDate>Tue, 19 Aug 2008 13:14:00 GMT</pubDate><guid>http://www.blogjava.net/tedeyang/archive/2008/08/19/223111.html</guid><wfw:comment>http://www.blogjava.net/tedeyang/comments/223111.html</wfw:comment><comments>http://www.blogjava.net/tedeyang/archive/2008/08/19/223111.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tedeyang/comments/commentRss/223111.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tedeyang/services/trackbacks/223111.html</trackback:ping><description><![CDATA[今天是2008年8月19日,在电视机前我亲眼看到陆春龙得到奥运会蹦床金牌,与其他金牌得主不同的是,陆春龙是离我距离最近的奥运英雄.<br />呵呵,想不到,这19岁的小子,他老爸和我老爸居然是认识的.<br />陆春龙的父亲陆建平,以前做包工头,承建过江阴西石桥镇的一个厂房,因此和我爸认识.<br />是富裕之家.<br />唉,真是想不到啊.<img src ="http://www.blogjava.net/tedeyang/aggbug/223111.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tedeyang/" target="_blank">山巅</a> 2008-08-19 21:14 <a href="http://www.blogjava.net/tedeyang/archive/2008/08/19/223111.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat崩溃事件</title><link>http://www.blogjava.net/tedeyang/archive/2008/06/04/205740.html</link><dc:creator>山巅</dc:creator><author>山巅</author><pubDate>Wed, 04 Jun 2008 03:05:00 GMT</pubDate><guid>http://www.blogjava.net/tedeyang/archive/2008/06/04/205740.html</guid><wfw:comment>http://www.blogjava.net/tedeyang/comments/205740.html</wfw:comment><comments>http://www.blogjava.net/tedeyang/archive/2008/06/04/205740.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/tedeyang/comments/commentRss/205740.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tedeyang/services/trackbacks/205740.html</trackback:ping><description><![CDATA[今天一大早产品一部项目经理就来找我，他们的一台服务器昨天晚上tomcat服务崩溃，还不能重启服务，最后将服务器重启才OK。<br />我将事件过程和分析过程记录如下：<br /><br />服务器：win 2000 sp4，apache 2 + tomcat 5.0 采用mod_jk级联。内存2G，硬盘剩余空间充足，CPU基本空闲。<br />主要应用：J2EE 1.4，JDBC（连接另一台mysql服务器）<br />崩溃时间： 2008-6-3 18：37：50<br /><br /><h3><font color="#000000"><b>一.</b>各种日志综合如下：</font></h3>   <b>1.</b>37分45秒，操作系统事件中诺顿杀毒软件报内存过低警报<br />   <b>2.</b>37分45秒，web应用抛出JDBC连接异常： 
<div style="BORDER-RIGHT: rgb(204,204,204) 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: rgb(204,204,204) 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: rgb(204,204,204) 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: rgb(204,204,204) 1px solid; BACKGROUND-COLOR: rgb(238,238,238)"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="FONT-WEIGHT: bold; COLOR: rgb(128,0,0)">2008</span><span style="COLOR: rgb(128,128,128)">-</span><span style="FONT-WEIGHT: bold; COLOR: rgb(128,0,0)">06</span><span style="COLOR: rgb(128,128,128)">-</span><span style="FONT-WEIGHT: bold; COLOR: rgb(128,0,0)">03</span><span style="COLOR: rgb(0,0,0)"> </span><span style="FONT-WEIGHT: bold; COLOR: rgb(128,0,0)">18</span><span style="COLOR: rgb(0,0,0)">:</span><span style="FONT-WEIGHT: bold; COLOR: rgb(128,0,0)">37</span><span style="COLOR: rgb(0,0,0)">:</span><span style="FONT-WEIGHT: bold; COLOR: rgb(128,0,0)">45</span><span style="COLOR: rgb(0,0,0)"> cn.</span><span style="COLOR: rgb(128,128,128)">*</span><span style="COLOR: rgb(0,0,0)">.db.DBManager.getConnection(DBManager.java:</span><span style="FONT-WEIGHT: bold; COLOR: rgb(128,0,0)">157</span><span style="COLOR: rgb(0,0,0)">) ERROR swim.db.DBManager   com.mysql.jdbc.CommunicationsException: Communications link failure due </span><span style="COLOR: rgb(0,0,255)">to</span><span style="COLOR: rgb(0,0,0)"> underlying exception:<br /></span><span style="COLOR: rgb(128,128,128)">**</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,255)">BEGIN</span><span style="COLOR: rgb(0,0,0)"> NESTED EXCEPTION </span><span style="COLOR: rgb(128,128,128)">**</span><span style="COLOR: rgb(0,0,0)"><br />java.net.SocketException<br />MESSAGE: java.net.SocketException: No buffer </span><span style="COLOR: rgb(255,0,255)">space</span><span style="COLOR: rgb(0,0,0)"> available (maximum connections reached?): JVM_Bind</span></div><br />   <b>3.</b>37分50秒，tomcat抛出session无法save异常： 
<div style="BORDER-RIGHT: rgb(204,204,204) 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: rgb(204,204,204) 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: rgb(204,204,204) 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: rgb(204,204,204) 1px solid; BACKGROUND-COLOR: rgb(238,238,238)"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: rgb(0,0,0)">2008</span><span style="COLOR: rgb(0,0,0)">-</span><span style="COLOR: rgb(0,0,0)">06</span><span style="COLOR: rgb(0,0,0)">-</span><span style="COLOR: rgb(0,0,0)">03</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,0)">18</span><span style="COLOR: rgb(0,0,0)">:</span><span style="COLOR: rgb(0,0,0)">37</span><span style="COLOR: rgb(0,0,0)">:</span><span style="COLOR: rgb(0,0,0)">50</span><span style="COLOR: rgb(0,0,0)"> ERROR</span><span style="COLOR: rgb(0,0,0)">-</span><span style="COLOR: rgb(0,0,0)"> IOException </span><span style="COLOR: rgb(0,0,255)">while</span><span style="COLOR: rgb(0,0,0)"> saving persisted sessions: java.io.FileNotFoundException: \izzs\SESSIONS.ser (系统资源不足，无法完成请求的服务。)<br />java.io.FileNotFoundException: \izzs\SESSIONS.ser (系统资源不足，无法完成请求的服务。)<br />    at java.io.FileOutputStream.open(Native Method)<br />    at java.io.FileOutputStream.</span><span style="COLOR: rgb(0,0,0)">&lt;</span><span style="COLOR: rgb(0,0,0)">init</span><span style="COLOR: rgb(0,0,0)">&gt;</span><span style="COLOR: rgb(0,0,0)">(FileOutputStream.java:</span><span style="COLOR: rgb(0,0,0)">179</span><span style="COLOR: rgb(0,0,0)">)<br />    at java.io.FileOutputStream.</span><span style="COLOR: rgb(0,0,0)">&lt;</span><span style="COLOR: rgb(0,0,0)">init</span><span style="COLOR: rgb(0,0,0)">&gt;</span><span style="COLOR: rgb(0,0,0)">(FileOutputStream.java:</span><span style="COLOR: rgb(0,0,0)">70</span><span style="COLOR: rgb(0,0,0)">)<br />    at org.apache.catalina.session.StandardManager.doUnload(StandardManager.java:</span><span style="COLOR: rgb(0,0,0)">511</span><span style="COLOR: rgb(0,0,0)">)<br />    at org.apache.catalina.session.StandardManager.unload(StandardManager.java:</span><span style="COLOR: rgb(0,0,0)">485</span><span style="COLOR: rgb(0,0,0)">)<br />    at org.apache.catalina.session.StandardManager.stop(StandardManager.java:</span><span style="COLOR: rgb(0,0,0)">687</span><span style="COLOR: rgb(0,0,0)">)<br />    at org.apache.catalina.core.StandardContext.stop(StandardContext.java:</span><span style="COLOR: rgb(0,0,0)">4496</span><span style="COLOR: rgb(0,0,0)">)<br />    at org.apache.catalina.core.StandardContext.reload(StandardContext.java:</span><span style="COLOR: rgb(0,0,0)">3037</span><span style="COLOR: rgb(0,0,0)">)<br />    at org.apache.catalina.core.StandardContext.backgroundProcess(StandardContext.java:</span><span style="COLOR: rgb(0,0,0)">4658</span><span style="COLOR: rgb(0,0,0)">)<br />    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:</span><span style="COLOR: rgb(0,0,0)">1619</span><span style="COLOR: rgb(0,0,0)">)<br />    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:</span><span style="COLOR: rgb(0,0,0)">1628</span><span style="COLOR: rgb(0,0,0)">)<br />    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:</span><span style="COLOR: rgb(0,0,0)">1628</span><span style="COLOR: rgb(0,0,0)">)<br />    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:</span><span style="COLOR: rgb(0,0,0)">1608</span><span style="COLOR: rgb(0,0,0)">)<br />    at java.lang.Thread.run(Thread.java:</span><span style="COLOR: rgb(0,0,0)">534</span><span style="COLOR: rgb(0,0,0)">)</span></div><br /><h3>二.简单分析</h3>崩溃原因：内存不足导致资源不足，引起Tomcat的session崩溃。<br />  这台服务器上运行着很多应用，是什么原因引起内存不足还无法确定。<br />初步判断罪魁祸首可能是apache，该进程平常占用500MB内存，经常会飚到1G以上。<br /><br />Apache2的配置文件中：<b>KeepAlive=On，MaxKeepAliveRequests=100，KeepAliveTimeout=15</b>，分析aceess.log文件可以发现每个页面触发的request数量在10个以下，点击率较低，可能使连接过多。<br />我建议将keepAlive设为off，增加CPU负载，降低内存消耗。<br /><br /><h3>三.效果</h3> 有待观察......<br /><br />参考资料：<br />http://www.withend.com/post/78.html<br /><br /><strong>四.结局 </strong><br />时隔一天，晚上九点再次崩溃，黑暗事件重演。<br />这一次，我才得知原来该apache还配置有其他域名，于是调出该域名下的access.log。项目经理去了机房，在轰轰地风扇声中打电话给我，让我分析分析。<br />仔细看访问日志，发现原来有N多Connect 443连接，443是什么？是SSL端口！HTTPS！，Connect命令则显然是代理功能！<br />而且这些connect的IP来自全球各地，加拿大、美国、澳洲、新西兰、北京、上海、英国、哪都有。<br />看来这台服务器是被人当代理服务器用了。<br />怪不得半夜会死机，人家西半球那时正大白天撒欢儿呢。<br /><br />问题就出在apache的配置上，由于应用众多，并且这台服务器还是其他几台web服务器的对外出口，因此apache中配置了反向代理，不过不小心把正向代理（mod_proxy模块的<a id="ProxyRequests" name="ProxyRequests">ProxyRequests</a><a id="proxyrequests" name="proxyrequests">指令</a>）也打开了。<br />看看<a href="http://doc.chinahtml.com/Manual/ApacheManual/mod/mod_proxy.html" target="_blank">apache2.0的官方文档中mod_proxy部分</a>，里面明明白白写着：<br /><div class="warning"><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" /><span style="COLOR: #000000">警告<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />在您没有对服务器采取安全措施之前，请不要用ProxyRequests启用您的代理。一个开放的代理服务器不仅对您的网络有威胁，对整个因特网来说也同样如此。<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>真的是很有威胁！大量代理请求急剧消耗内存，最终造成死机！<br /><br />解决办法就是把正向代理关掉：<font face="Courier New">ProxyRequests Off<br /></font><br /><br /></div><img src ="http://www.blogjava.net/tedeyang/aggbug/205740.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tedeyang/" target="_blank">山巅</a> 2008-06-04 11:05 <a href="http://www.blogjava.net/tedeyang/archive/2008/06/04/205740.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>我无法把握我的心</title><link>http://www.blogjava.net/tedeyang/archive/2008/05/06/198820.html</link><dc:creator>山巅</dc:creator><author>山巅</author><pubDate>Tue, 06 May 2008 14:49:00 GMT</pubDate><guid>http://www.blogjava.net/tedeyang/archive/2008/05/06/198820.html</guid><wfw:comment>http://www.blogjava.net/tedeyang/comments/198820.html</wfw:comment><comments>http://www.blogjava.net/tedeyang/archive/2008/05/06/198820.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tedeyang/comments/commentRss/198820.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tedeyang/services/trackbacks/198820.html</trackback:ping><description><![CDATA[
		<p>有篇文章写了一个好程序员的选材标准，首当其冲的就是“激情”。<br />看到此处，我不由脑袋一昏，恍惚心动。<br />“我们需要互联网疯子加入到我们的队伍里来，他睡觉想着互联网、吃饭想着互联网、走路想着互联网”<br />这样的激情，曾几何时我也拥有啊，不是对互联网，而是对编程。<br />那是充实、激动、兴奋、灵感组成的感情。<br />曾几何时？直到年前，我还全身心地洋溢着这样的激情，编程是我的灵魂我能因此而快乐。<br />为什么！现在的我，坐在电脑前，看的是新闻，想的是其他无关紧要的事？几天不写一行代码？<br />是我太忙了吗，还是我懈怠了？<br />也许是环境改变了，事情变杂了，心境改变了、、、<br />编程不再，似乎青春不再！<br />该死的CMMI！该死的管理工作！该死的驾驶课！该死的爱情！该死的日常琐事！该死的感冒病毒！<br />我要结结实实诅咒一切让我远离可爱代码的元凶！<br />也许唯一需要诅咒只是我自己罢！<br />我还是需要热爱程序的单纯。<br /><br /><br /><br /></p>
<img src ="http://www.blogjava.net/tedeyang/aggbug/198820.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tedeyang/" target="_blank">山巅</a> 2008-05-06 22:49 <a href="http://www.blogjava.net/tedeyang/archive/2008/05/06/198820.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring的ContextLoaderListener与DispatcherServlet在WebApplicationContext上的细微区别</title><link>http://www.blogjava.net/tedeyang/archive/2008/04/09/191628.html</link><dc:creator>山巅</dc:creator><author>山巅</author><pubDate>Wed, 09 Apr 2008 01:29:00 GMT</pubDate><guid>http://www.blogjava.net/tedeyang/archive/2008/04/09/191628.html</guid><wfw:comment>http://www.blogjava.net/tedeyang/comments/191628.html</wfw:comment><comments>http://www.blogjava.net/tedeyang/archive/2008/04/09/191628.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/tedeyang/comments/commentRss/191628.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tedeyang/services/trackbacks/191628.html</trackback:ping><description><![CDATA[
		<p>我们知道spring在web.xml中可以有三种方式来配置其xml路径：<br />org.springframework.web.servlet.DispatcherServlet<br />org.springframework.web.context.ContextLoaderListener<br />org.springframework.web.context.ContextLoaderServlet<br />当使用第一种方式配置时，spring载入的WebApplicationContext是隶属于此Servlet的（所以spring可以配置多个分别拥有各自环境的DispatcherServlet），因此其他servlet无法获取到该Context。这一现象在buffalo配置时曾经出现（无法找到服务bean）。分析了buffalo和spring的源码后，将xml在ContextLoaderListener配置才得以解决。</p>
<img src ="http://www.blogjava.net/tedeyang/aggbug/191628.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tedeyang/" target="_blank">山巅</a> 2008-04-09 09:29 <a href="http://www.blogjava.net/tedeyang/archive/2008/04/09/191628.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>从“the chinese victory”到“谁在掠夺国民财富并出卖民族利益”</title><link>http://www.blogjava.net/tedeyang/archive/2008/04/08/191576.html</link><dc:creator>山巅</dc:creator><author>山巅</author><pubDate>Tue, 08 Apr 2008 14:51:00 GMT</pubDate><guid>http://www.blogjava.net/tedeyang/archive/2008/04/08/191576.html</guid><wfw:comment>http://www.blogjava.net/tedeyang/comments/191576.html</wfw:comment><comments>http://www.blogjava.net/tedeyang/archive/2008/04/08/191576.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tedeyang/comments/commentRss/191576.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tedeyang/services/trackbacks/191576.html</trackback:ping><description><![CDATA[
		<p>今天看到两篇长文。<br />卡斯特罗在古巴发表的两章：<a href="http://www.cubanews.ain.cu/2008/0331reflexionfidel.htm">http://www.cubanews.ain.cu/2008/0331reflexionfidel.htm</a> 论述了东亚和中国的历史，并言及西藏最近的骚乱。文章分两章，part I和II，末尾写到“中国的胜利”、“我不信任达赖”。感谢在遥远的古巴有这样睿智的领导人！（我看的是英文翻译，原文是西班牙语，关键字：the chinese victory）<br /><br />另外，今天<font face="Verdana">中央民族大学教授张宏良写了《谁在掠夺国民财富并出卖民族利益》一文（<a href="http://future.chinaiiss.org/content/2008-4-8/8114838.shtml">http://future.chinaiiss.org/content/2008-4-8/8114838.shtml</a>）<br /><br /><em>     在《拉萨暴乱：超越1840年的最大买单》中我们指出，台湾322公投、拉萨暴乱、抵制北京奥运会等一系列手段，目的是控制中国金融，让中国为西方信用危机买单。现在第一单已经下来了，中国银监会刚刚发布的<strong>《银行控股股东监管办法（征求意见稿）》中，取消了对外资控股中国银行的比例限制（此前规定，外资单独控股中国银行不能超过20%，联合控股中国银行不能超过25%），中国将成为有史以来国有银行任凭外资控股的唯一国家，成为世界一体化过程中国民丧失经济和金融控制权的第一个国家</strong>。该决定将成为中国现代史上具有重大历史分期意义的里程碑式文件，是中国将由此开始丧失经济和金融主导权的历史性标志。西方国家终于在满足中国人奥运梦想之前，率先满足了控股中国银行进而控制中国经济的历史梦想。面对天安门广场人民英雄纪念碑上的血色碑文，我们不禁泪如雨下，中国输了！1840年以来一代接一代人的流血牺牲、一代又一代人的艰苦奋斗，终究还是没有跳出西方列强的魔掌，当初夹着尾巴逃跑了的帝国主义，现在夹着皮包又回来了，并且比当初逃跑前回来的更加风光，成为了可以控股中国金融和中国经济的总老板。</em></font></p>
		<p>
				<font face="Verdana">
						<em>　　从去年9月美国国会通过决议要求中国银行对美国企业完全开放，到现在中国银监会发文取消限制，期间仅仅6个月时间，贯彻落实美国决议的效率之高，恐怕超过了历史上任何一个国家。当时美国国会通过了关于2个国家的决议，一个是伊拉克分治的决议，一个是中国开放金融市场的决议，目前，关于伊拉克决议的落实还没个影子，关于中国的决议就变成了现实。两个决议实施的不同结果，证明了美国21世纪外交政策的转变是卓有成效的：用“美国鹦鹉”代替巡航导弹，更加有利于实现美国的国家利益。此前美国国务卿赖斯就曾声明，21世纪美国对外政策的重点，要从以军事打击和情报渗透为主，转向以培养对方国家的学术政治精英（美国鹦鹉）为主，以此来实现美国的国家利益。打开中国金融市场，就是21世纪美国鹦鹉外交最富成就的卓越胜利。</em>
				</font>
		</p>
		<p>此言不虚！看过《货币战争》一书的读者都应该知道，控制银行就是控制金融，控制金融就是控制国家。我无法想像居然有这样的卖国行为在21世纪初赤裸裸地冒出来！前日看到伦敦华人游行反藏独，今天看到统治集团卖国，实在是心中苦闷！<br /><br />再想到：<br />       人民币升值，为什么美联储主席欣喜若狂！为什么国内反而面临严重的通货膨胀！为什么股市会突然猛涨又猛然崩溃？国内贬值而国际升值，人民币在此挤压中产生的巨额差值都去哪了！<br />全国财政收入从2000年到2007年增长了5倍（从1万亿到5万亿），我们的收入增长了多少？我们的日常消费支出增加了多少？<br /><br />       我目前所居住的江苏常州市（因为工作关系对税务比较了解）地税局税收每年的硬指标是增长20%，因此税率经常调整，名目繁多，企业负担已经极为沉重！据我所知，如果完全不能避税偷税漏税，50%以上的企业会很快倒闭，因为它们的利润率远远小于税率的15%~30%，而外企反而能享受超国民待遇减免甚至全免税款！<br />      就我个人而言，去年上缴的个人所得税已经占我年收入的10%！中国是世界排名第三的重税国家，这不是遥远的排名！是在工资单上每天上演的弱肉强食！<br /><br />中国还有希望吗？<br />我一直拒买日货，并劝说周围人抵制日货，但街道上奔涌而过的丰田车流每每使我无奈感伤。<br />这就是我的祖国！<br />勤劳腐败、正义肮脏、希望绝望！上流社会卖国，底层百姓爱国，一切又回到百年之前。<br /><br />2008年，我确信中国21世纪历史的转折点已经呈现。何去何从，唯拭目以待！<br /><br /></p>
<img src ="http://www.blogjava.net/tedeyang/aggbug/191576.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tedeyang/" target="_blank">山巅</a> 2008-04-08 22:51 <a href="http://www.blogjava.net/tedeyang/archive/2008/04/08/191576.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>bug记录：mysql生成id后获取出错</title><link>http://www.blogjava.net/tedeyang/archive/2008/04/07/191323.html</link><dc:creator>山巅</dc:creator><author>山巅</author><pubDate>Mon, 07 Apr 2008 09:48:00 GMT</pubDate><guid>http://www.blogjava.net/tedeyang/archive/2008/04/07/191323.html</guid><wfw:comment>http://www.blogjava.net/tedeyang/comments/191323.html</wfw:comment><comments>http://www.blogjava.net/tedeyang/archive/2008/04/07/191323.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tedeyang/comments/commentRss/191323.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tedeyang/services/trackbacks/191323.html</trackback:ping><description><![CDATA[今天同事给我看一段代码，是我前年写的。<br />他发现了一个bug。<br />代码的作用是用jdbc向mysql中插入一条主键自增的数据，然后使用mysql的select last_insert_id()语法获取生成的主键值。<br /><strong>问题出在两次sql执行用的不是同一个数据库连接，而从数据源里获取了两次</strong>。<br />我们都知道，<strong>mysql的last_insert_id()函数是针对connection的</strong>，所以这是个严重bug。<br />之前两年负载小，所以数据源大概每次都返回同一个connection，于是bug被遮盖住了。最近服务器压力增加，两次连接就可能不是同一个了。<br />因此last_insert_id()得到的主键值出错！<br /><br />那时候我怎么会获取两次连接来执行一个方法里的两句sql，包括我在内所有人都莫名其妙。错误比较明显，这项目已经交接给他们了，不过出于对我的信任，还是屁颠屁颠来问我：获取两个连接是不是还有其他特殊考虑？我苦思冥想了一会，答曰：忘了。<img height="20" src="http://www.blogjava.net/Emoticons/hitwall.gif" width="25" border="0" /><br /><br />没想到我曾经养过的臭虫还到处潜伏着，等着我出丑呢。<img src ="http://www.blogjava.net/tedeyang/aggbug/191323.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tedeyang/" target="_blank">山巅</a> 2008-04-07 17:48 <a href="http://www.blogjava.net/tedeyang/archive/2008/04/07/191323.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>读取本机动态ip到远程网页</title><link>http://www.blogjava.net/tedeyang/archive/2007/12/10/166584.html</link><dc:creator>山巅</dc:creator><author>山巅</author><pubDate>Mon, 10 Dec 2007 02:38:00 GMT</pubDate><guid>http://www.blogjava.net/tedeyang/archive/2007/12/10/166584.html</guid><wfw:comment>http://www.blogjava.net/tedeyang/comments/166584.html</wfw:comment><comments>http://www.blogjava.net/tedeyang/archive/2007/12/10/166584.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tedeyang/comments/commentRss/166584.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tedeyang/services/trackbacks/166584.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 如何通过自己的ADSL使家里的电脑成为服务器呢？像花生壳这样的应用可以帮助你动态解析ip，不过这个程序太庞大了，根本没有必要。下面介绍我的做法：条件：  上网方式：ADSL   台式机：linux  中继网页：在某虚拟主机申请一个免费空间，需要支持动态脚本（php、jsp等）方案：  在本机运行一个Java程序，定时读取本机的外网IP，自动向中继网页用GET方式提交该数据。中继网页保存IP记录在内...&nbsp;&nbsp;<a href='http://www.blogjava.net/tedeyang/archive/2007/12/10/166584.html'>阅读全文</a><img src ="http://www.blogjava.net/tedeyang/aggbug/166584.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tedeyang/" target="_blank">山巅</a> 2007-12-10 10:38 <a href="http://www.blogjava.net/tedeyang/archive/2007/12/10/166584.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>