<?xml version="1.0" encoding="GB2312"?>   
<rdf:RDF 
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
xmlns:dc="http://purl.org/dc/elements/1.1/" 
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" 
xmlns:admin="http://webns.net/mvcb/" 
xmlns:cc="http://web.resource.org/cc/" 
xmlns="http://purl.org/rss/1.0/"> 

<channel rdf:about="http://hellboys.bokee.com/index.html"> 
<title><![CDATA[地狱男爵之博客无限]]></title> 
<link>http://hellboys.bokee.com/index.html</link> 
<description><![CDATA[<br>搬家 http://www.blogjava.net/hellboys
<br>从此不在这里写，这里封贴<br>
<br>个人擅长:java,j2ee,linux应用,网络
<br>个人爱好:钢琴,计算机,篮球,游泳<br>
]]></description> 
<dc:language>zh-cn</dc:language> 
<dc:creator>hellboys</dc:creator> 
<dc:date>2006-10-27T12:09:11Z</dc:date> 
<admin:generatorAgent rdf:resource="http://blog.bokee.com/" /> 

<items> 
<rdf:Seq>
<rdf:li rdf:resource="http://hellboys.bokee.com/5537043.html" />
<rdf:li rdf:resource="http://hellboys.bokee.com/3772517.html" />
<rdf:li rdf:resource="http://hellboys.bokee.com/3563187.html" />
<rdf:li rdf:resource="http://hellboys.bokee.com/3470246.html" />
<rdf:li rdf:resource="http://hellboys.bokee.com/3394064.html" />
<rdf:li rdf:resource="http://hellboys.bokee.com/3001688.html" />
<rdf:li rdf:resource="http://hellboys.bokee.com/2993062.html" />
<rdf:li rdf:resource="http://hellboys.bokee.com/2993055.html" />
<rdf:li rdf:resource="http://hellboys.bokee.com/2862542.html" />
<rdf:li rdf:resource="http://hellboys.bokee.com/2851080.html" />
</rdf:Seq> 
</items> 

</channel>


<item rdf:about="http://hellboys.bokee.com/5537043.html"> 
<title><![CDATA[简历(2006.8)]]></title> 
<link>http://hellboys.bokee.com/5537043.html</link> 
<description><![CDATA[&amp;nbsp;<style></style><table cellspacing="0" cellpadding="0" width="600" align="center" border="0"><tbody><tr><td align="right">&amp;nbsp;</td></tr></tbody></table><table cellspacing="0" cellpadding="0" width="600" align="center" border="0"><tbody><tr height="25"><td width="55%"><table height="25" cellspacing="0" cellpadding="0" width="100%" border="0"><tbody><tr><td class="ResTitleFot" align="right"><b>简 <img height="1" src="http://www.51job.com/sc/applyjob/im/space.gif" width="20" /> 历 </b></td></tr></tbody></table></td><td align="right" width="45%"><table class="hshow" id="print_icon"><tbody><tr><td></td></tr></tbody></table></td></tr></tbody></table><br /><br /><table cellspacing="0" cellpadding="1" width="600" align="center" border="0"><tbody><tr><td bgcolor="#ff811e" colspan="2" height="2"></td></tr><tr bgcolor="#ffeee0" height="25"><td class="SubTitleTbBd"><b>基 本 信 息</b> </td><td class="SubTitleTbBd" align="right"><div class="hshow" id="PersionalData_Modify"><a class="a1" href="http://www.51job.com/cv/CResume/CV_CBPI.php" target="_blank"><img height="1" src="http://www.51job.com/sc/applyjob/im/space.gif" width="8" border="0" /> </a></div></td></tr></tbody></table><table cellspacing="0" cellpadding="1" width="600" align="center" border="0"><tbody><tr height="20"><td width="18%">姓 <img height="1" src="http://www.51job.com/sc/applyjob/im/space.gif" width="12" border="0" /> 名： </td><td width="32%">李大和</td><td width="18%">性 <img height="1" src="http://www.51job.com/sc/images/space.gif" width="12" border="0" /> 别： </td><td width="32%">男 </td></tr><tr height="20"><td>出生日期：</td><td>1983年02月28日</td><td>居 住 地：</td><td>北京市 </td></tr><tr height="20"><td>工作年限：</td><td>三年以上 </td><td>户 <img height="1" src="http://www.51job.com/sc/applyjob/im/space.gif" width="12" border="0" /> 口： </td><td>北京 </td></tr><tr height="20"><td>目前年薪：</td><td colspan="3">4-5万人民币 </td></tr><tr height="20"><td>地 <img height="1" src="http://www.51job.com/sc/images/space.gif" width="12" border="0" /> 址： </td><td colspan="3">北京市海淀区清河小营</td></tr><tr height="20"><td>邮 <img height="1" src="http://www.51job.com/sc/images/space.gif" width="12" border="0" /> 编： </td><td colspan="3">100031</td></tr><tr height="20"><td>电子邮件：</td><td colspan="3">hellboys@tom.com</td></tr><tr height="20"><td>家庭电话：</td><td colspan="3">086- 010- 68826056</td></tr><tr height="20"><td>移动电话：</td><td colspan="3">086- 13520876658</td></tr><tr height="20"><td>个人主页：</td><td colspan="3">http://www.blogjava.net/hellboys</td></tr></tbody></table><table cellspacing="0" cellpadding="1" width="600" align="center" border="0"><tbody><tr><td bgcolor="#ff811e" colspan="2" height="2"></td></tr><tr bgcolor="#ffeee0" height="25"><td class="SubTitleTbBd"><b>求 职 意 向</b> </td><td class="SubTitleTbBd" align="right"><div class="hshow" id="CareerObjective_Modify"><a class="a1" href="http://www.51job.com/cv/CResume/CV_COtherSelf.php" target="_blank"><img height="1" src="http://www.51job.com/sc/applyjob/im/space.gif" width="8" border="0" /> </a></div></td></tr><tr><td colspan="2"><img height="5" src="http://www.51job.com/sc/applyjob/im/space.gif" width="1" /> </td></tr><tr height="20"><td width="18%">工作性质：</td><td width="82%">全职 </td></tr><tr height="20"><td width="18%">期望工资：</td><td width="82%">面议</td></tr></tbody></table><table cellspacing="0" cellpadding="0" width="600" align="center" border="0"><tbody><tr><td bgcolor="#ff811e" colspan="2" height="2"></td></tr><tr bgcolor="#ffeee0" height="25"><td class="SubTitleTbBd"><b>工 作 经 验</b> </td><td class="SubTitleTbBd" align="right"><div class="hshow" id="EmploymentHistory_Modify"><a class="a1" href="http://www.51job.com/cv/CResume/CV_CWork.php" target="_blank"><img height="1" src="http://www.51job.com/sc/applyjob/im/space.gif" width="8" border="0" /> </a></div></td></tr><tr><td colspan="2"><table cellspacing="0" cellpadding="1" width="580" align="center" border="0"><tbody><tr><td colspan="4">2005/09--至今：创世奇迹广告公司</td></tr><tr><td width="18%">所属行业：</td><td width="82%" colspan="3">计算机软件 </td></tr><tr><td colspan="2"><b>技术部</b> </td><td colspan="2"><b>软件工程师 </b></td></tr><tr><td id="Cur_Val" colspan="4">1.开发了国内比较先进的互联网广告投放平台maxreturn. <br />2.服务器架设和维护 <br />3.为高层提供决策支持.</td></tr><tr><td colspan="4"><hr style="COLOR: #e0e0e0" align="right" width="100%" size="1" /></td></tr><tr><td colspan="4">2003/12--2005/08：北京市经济信息中心</td></tr><tr><td width="18%">所属行业：</td><td width="82%" colspan="3">互联网/电子商务 </td></tr><tr><td colspan="2"><b>信息技术开发部</b> </td><td colspan="2"><b>软件工程师 </b></td></tr><tr><td id="Cur_Val" colspan="4">为北京市发展改革委员会提供信息化建设.提供OA,电子政务,数据传输安全,系统整合等. <br />项目开发和技术支持.技术和项目涉及领域颇多.</td></tr></tbody></table></td></tr><tr><td bgcolor="#ff811e" colspan="2" height="2"></td></tr><tr bgcolor="#ffeee0" height="25"><td class="SubTitleTbBd"><b>项 目 经 验</b> </td><td class="SubTitleTbBd" align="right"><div class="hshow" id="ProjectQualifs_Modify"><a class="a1" href="http://www.51job.com/cv/CResume/CV_CITDft.php" target="_blank"><img height="1" src="http://www.51job.com/sc/applyjob/im/space.gif" width="8" border="0" /> </a></div></td></tr><tr><td colspan="2"><table cellspacing="0" cellpadding="1" width="580" align="center" border="0"><tbody><tr><td colspan="4">2006/04--2006/06：网络广告拓展-关键字</td></tr><tr><td valign="top" width="18%">项目描述：</td><td id="Cur_Val" width="82%">以web页面上面的关键字为新的网络广告形式.提供博客,论坛等文字型网站的更大化价值.</td></tr><tr><td valign="top" width="18%">责任描述：</td><td id="Cur_Val" width="82%">页面抓群,搜索和匹配相应关键. <br />架构设计,编码,测试.</td></tr><tr><td colspan="2"><hr style="COLOR: #e0e0e0" width="100%" size="1" /></td></tr><tr><td colspan="4">2005/10--2006/08：麦克锐腾平台</td></tr><tr><td valign="top" width="18%">项目描述：</td><td id="Cur_Val" width="82%">国内比较先进的广告资助投放平台,数据量也是比较大的.广告投放到web,client game,联众世界客户端上面等.</td></tr><tr><td valign="top" width="18%">责任描述：</td><td id="Cur_Val" width="82%">3大模块之一数据采集模块,需求设计和开发. <br />决策支持.</td></tr><tr><td colspan="2"><hr style="COLOR: #e0e0e0" width="100%" size="1" /></td></tr><tr><td colspan="4">2005/05--2005/09：住房补贴预算填报系统</td></tr><tr><td width="18%">软件环境：</td><td width="82%">vb,windows</td></tr><tr><td valign="top" width="18%">项目描述：</td><td id="Cur_Val" width="82%">大型项目,涉及到各个区县和市委市财政局,主要针对事业单位员工的房屋补助问题.下级部门往上级的填报,和数据安全传输等</td></tr><tr><td valign="top" width="18%">责任描述：</td><td id="Cur_Val" width="82%">需求确认,设计和编码</td></tr><tr><td colspan="2"><hr style="COLOR: #e0e0e0" width="100%" size="1" /></td></tr><tr><td colspan="4">2005/02--2005/05：投资北京（www.bjinvest.gov.cn）</td></tr><tr><td valign="top" width="18%">项目描述：</td><td id="Cur_Val" width="82%">投资北京的窄门户型网站和推广北京.</td></tr><tr><td valign="top" width="18%">责任描述：</td><td id="Cur_Val" width="82%">投资北京后台系统模块.</td></tr><tr><td colspan="2"><hr style="COLOR: #e0e0e0" width="100%" size="1" /></td></tr><tr><td colspan="4">2004/10--2005/01：项目审批管理系统</td></tr><tr><td width="18%">软件环境：</td><td width="82%">vb,windows</td></tr><tr><td valign="top" width="18%">项目描述：</td><td id="Cur_Val" width="82%">对北京18个城区填报的建设方面的项目进行审批,杜绝不合法项目.</td></tr><tr><td valign="top" width="18%">责任描述：</td><td id="Cur_Val" width="82%">需求统计,填报部分设计和编码.</td></tr><tr><td colspan="2"><hr style="COLOR: #e0e0e0" width="100%" size="1" /></td></tr><tr><td colspan="4">2004/06--2004/10：项目开工库查询汇总</td></tr><tr><td width="18%">软件环境：</td><td width="82%">java,linux</td></tr><tr><td valign="top" width="18%">项目描述：</td><td id="Cur_Val" width="82%">由于北京市各个申报和审批项目太对,所以管理和查询比较复杂.所以进行其信息化,对里面进行改造.</td></tr><tr><td valign="top" width="18%">责任描述：</td><td id="Cur_Val" width="82%">代码开发与测试.</td></tr><tr><td colspan="2"><hr style="COLOR: #e0e0e0" width="100%" size="1" /></td></tr><tr><td colspan="4">2004/01--2004/05：北京市发展和改革委员会OA系统</td></tr><tr><td valign="top" width="18%">项目描述：</td><td id="Cur_Val" width="82%">北京市发展和改革委员会内网OA系统。</td></tr><tr><td valign="top" width="18%">责任描述：</td><td id="Cur_Val" width="82%">b/s结构,开发其中部分模块.</td></tr></tbody></table></td></tr><tr><td bgcolor="#ff811e" colspan="2" height="2"></td></tr><tr bgcolor="#ffeee0" height="25"><td class="SubTitleTbBd"><b>教 育 经 历</b> </td><td class="SubTitleTbBd" align="right"><div class="hshow" id="EducationQualifs_Modify"><a class="a1" href="http://www.51job.com/cv/CResume/CV_CEduDft.php" target="_blank"><img height="1" src="http://www.51job.com/sc/applyjob/im/space.gif" width="8" border="0" /> </a></div></td></tr><tr><td colspan="2"><table cellspacing="0" cellpadding="0" width="580" align="center" border="0"><tbody><tr height="25"><td width="25%">2001/09--2004/06</td><td width="25%">首钢工学院</td><td width="25%">计算机网络 </td><td width="25%">大专 </td></tr><tr><td id="Cur_Val" colspan="4">主修课程： <br />计算机网络原理,数据结构，操作系统，计算机组织与结构，高级语言程序设计，C/C++程序设&amp;shy;计，软件工程等课程</td></tr></tbody></table></td></tr><tr><td bgcolor="#ff811e" colspan="2" height="2"></td></tr><tr bgcolor="#ffeee0" height="25"><td class="SubTitleTbBd"><b>证 书</b> </td><td class="SubTitleTbBd" align="right"><div class="hshow" id="Certification_Modify"><a class="a1" href="http://www.51job.com/cv/CResume/CV_CCert.php" target="_blank"><img height="1" src="http://www.51job.com/sc/applyjob/im/space.gif" width="8" border="0" /> </a></div></td></tr><tr><td colspan="2"><table cellspacing="0" cellpadding="0" width="580" align="center" border="0"><tbody><tr height="25"><td width="33%">2004/02</td><td width="33%">SUN 认证Java程序员 </td><td width="33%">SCJP</td></tr></tbody></table></td></tr><tr><td bgcolor="#ff811e" colspan="2" height="2"></td></tr><tr bgcolor="#ffeee0" height="25"><td class="SubTitleTbBd"><b>语 言 能 力</b> </td><td class="SubTitleTbBd" align="right"><div class="hshow" id="ForeignLanguage_Modify"><a class="a1" href="http://www.51job.com/cv/CResume/CV_CEduDft.php" target="_blank"><img height="1" src="http://www.51job.com/sc/applyjob/im/space.gif" width="8" border="0" /> </a></div></td></tr><tr><td colspan="2"><table cellspacing="0" cellpadding="0" width="580" align="center" border="0"><tbody><tr height="25"><td width="50%"><img height="1" src="http://www.51job.com/sc/applyjob/im/space.gif" width="5" border="0" /> 英语 </td><td width="50%">良好 </td></tr></tbody></table></td></tr><tr><td bgcolor="#ff811e" colspan="2" height="2"></td></tr><tr bgcolor="#ffeee0" height="25"><td class="SubTitleTbBd"><b>IT 技 能</b> </td><td class="SubTitleTbBd" align="right"><div class="hshow" id="Skill_Modify"><a class="a1" href="http://www.51job.com/cv/CResume/CV_CITDft.php" target="_blank"><img height="1" src="http://www.51job.com/sc/applyjob/im/space.gif" width="8" border="0" /> </a></div></td></tr><tr><td colspan="2"><table cellspacing="0" cellpadding="0" width="580" align="center" border="0"><tbody><tr height="25"><td width="33%">技能名称</td><td width="33%">熟练程度</td><td width="33%">使用时间</td></tr><tr><td colspan="3"><hr style="COLOR: #e0e0e0" width="100%" size="1" /></td></tr><tr height="25"><td width="33%">TCP/IP </td><td width="33%">精通 </td><td width="33%">65月</td></tr><tr height="25"><td width="33%">Java </td><td width="33%">熟练 </td><td width="33%">48月</td></tr><tr height="25"><td width="33%">SQL </td><td width="33%">熟练 </td><td width="33%">35月</td></tr><tr height="25"><td width="33%">C/C++ </td><td width="33%">一般 </td><td width="33%">10月</td></tr><tr height="25"><td width="33%">Visual Basic </td><td width="33%">一般 </td><td width="33%">16月</td></tr><tr height="25"><td width="33%">Linux </td><td width="33%">熟练 </td><td width="33%">50月</td></tr></tbody></table></td></tr><tr><td bgcolor="#ff811e" colspan="2" height="2"></td></tr><tr bgcolor="#ffeee0" height="25"><td class="SubTitleTbBd"><b>附 加 信 息</b> </td><td class="SubTitleTbBd" align="right"><div class="hshow" id="OtherInfos_Modify"><a class="a1" href="http://www.51job.com/cv/CResume/CV_CMisc.php" target="_blank"><img height="1" src="http://www.51job.com/sc/applyjob/im/space.gif" width="8" border="0" /> </a></div></td></tr><tr><td colspan="2"><table cellspacing="0" cellpadding="0" width="580" align="center" border="0"><tbody><tr><td valign="top" width="18%">推荐证明：</td><td id="Cur_Val" width="82%"><p>刘丹 <br />matrix斑竹,bjug成员.技术了解方面广泛. <br />北京经济信息中心 工程师 与证明人关系：工作关系 <br />电话： 086-010-66415588<br />E-mail：liudan at beic.gov.cn <br /><br />夏昕 <br />开源doc发起人,业内著名技术牛人. <br />创世奇迹广告公司 技术总监 与证明人关系：工作关系 <br />电话： 010-85896801<br />E-mail：xiaxin at wonderad.com<br /></p></td></tr><tr><td valign="top" width="18%">技术成就：</td><td id="Cur_Val" width="82%">1.buffalo <br />曾为国内开源项目buffalo写中文文档.并发表在Amowa和javaeye网站上面 <br />http://www.javaeye.com/display/ajax/AJAX <br /><br />2.springside <br />springside国内开源项目,springside开发团队成员之一.为springside写compass模块提交代码,并写入门文档. <br />http://www.springside.org.cn</td></tr></tbody></table></td></tr><tr><td colspan="2"><font color="#ffffff"></font></td></tr></tbody></table>]]></description> 
<dc:subject><![CDATA[花样年华]]></dc:subject> 
<dc:creator><![CDATA[地狱男爵]]></dc:creator> 
<dc:date>2006-08-16T15:50:26Z</dc:date> 
</item> 
<item rdf:about="http://hellboys.bokee.com/3772517.html"> 
<title><![CDATA[buffalo文档之buffalo-demo(1)－－除法运算器]]></title> 
<link>http://hellboys.bokee.com/3772517.html</link> 
<description><![CDATA[<p>buffalo文档之buffalo-demo(1)－－除法运算器 &amp;lt;br&amp;gt;<br />buffalo 官方站： <a href="http://www.amowa.com/">http://www.amowa.com</a>&amp;nbsp;&amp;nbsp; &amp;lt;br&amp;gt;<br />国内的ajax,amowa开源项目&amp;lt;br&amp;gt;</p><p>doc.simle.jsp</p><p>&amp;lt;%@ page contentType=&amp;quot;text/html;charset=utf-8&amp;quot;%&amp;gt;<br />&amp;lt;!DOCTYPE HTML PUBLIC &amp;quot;-//W3C//DTD HTML 4.01 Transitional//EN&amp;quot;<br />&amp;quot;<a href="http://www.w3.org/TR/html4/loose.dtd">http://www.w3.org/TR/html4/loose.dtd</a>&amp;quot;&amp;gt;<br />&amp;lt;html&amp;gt;<br />&amp;lt;head&amp;gt;<br />&amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=utf-8&amp;quot;&amp;gt;<br />&amp;lt;title&amp;gt; 除法运算器&amp;lt;/title&amp;gt;<br />&amp;lt;script language=&amp;quot;JavaScript&amp;quot; src=&amp;quot;js/prototype.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;<br />&amp;lt;script language=&amp;quot;JavaScript&amp;quot; src=&amp;quot;js/buffalo.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;<br />&amp;lt;script language=&amp;quot;JavaScript&amp;quot; src=&amp;quot;js/template.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;</p><p>&amp;lt;script language=&amp;quot;javascript&amp;quot;&amp;gt;<br />var endPoint=&amp;quot;&amp;lt;%=request.getContextPath()%&amp;gt;/BUFFALO&amp;quot;;<br />var buffalo = new Buffalo(endPoint);</p><p>function cmdDivide() {<br />&amp;nbsp;var double1 = parseFloat(Buffalo.getElementById(&amp;quot;double1&amp;quot;).value);<br />&amp;nbsp;var double2 = parseFloat(Buffalo.getElementById(&amp;quot;double2&amp;quot;).value);<br />&amp;nbsp;var d3Handle = Buffalo.getElementById(&amp;quot;double3&amp;quot;);<br />&amp;nbsp;<br />&amp;nbsp;buffalo.remoteCall(&amp;quot;simpleService.divide&amp;quot;,[double1,double2], function(reply) {<br />&amp;nbsp;&amp;nbsp;d3Handle.value = reply.getResult();<br />&amp;nbsp;})<br />}<br />&amp;lt;/script&amp;gt;<br />&amp;lt;input name=&amp;quot;double1&amp;quot; type=&amp;quot;text&amp;quot; class=&amp;quot;input_text&amp;quot; id=&amp;quot;double1&amp;quot; size=&amp;quot;12&amp;quot;&amp;gt; <br />&amp;nbsp; /<br />&amp;nbsp; &amp;lt;input name=&amp;quot;double2&amp;quot; type=&amp;quot;text&amp;quot; class=&amp;quot;input_text&amp;quot; id=&amp;quot;double2&amp;quot; size=&amp;quot;12&amp;quot;&amp;gt; <br />&amp;nbsp; &amp;lt;input type=&amp;quot;button&amp;quot; name=&amp;quot;Submit&amp;quot; value=&amp;quot; = &amp;quot; onclick=&amp;quot;cmdDivide()&amp;quot;&amp;gt;<br />&amp;nbsp; &amp;lt;input name=&amp;quot;double3&amp;quot; type=&amp;quot;text&amp;quot; class=&amp;quot;input_text&amp;quot; id=&amp;quot;double3&amp;quot;&amp;gt;<br />&amp;lt;/html&amp;gt;</p><p>web.xml<br />&amp;lt;servlet&amp;gt;<br />&amp;nbsp;&amp;nbsp;&amp;lt;servlet-name&amp;gt;service&amp;lt;/servlet-name&amp;gt;<br />&amp;nbsp;&amp;nbsp;&amp;lt;servlet-class&amp;gt;net.buffalo.server.BuffaloServiceServlet&amp;lt;/servlet-class&amp;gt;<br />&amp;nbsp;&amp;nbsp;&amp;lt;init-param&amp;gt;<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;param-name&amp;gt;debug&amp;lt;/param-name&amp;gt;<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;param-value&amp;gt;true&amp;lt;/param-value&amp;gt;<br />&amp;nbsp;&amp;nbsp;&amp;lt;/init-param&amp;gt;<br />&amp;nbsp;&amp;lt;/servlet&amp;gt;<br />&amp;nbsp;<br />&amp;nbsp;&amp;lt;servlet-mapping&amp;gt;<br />&amp;nbsp;&amp;nbsp;&amp;lt;servlet-name&amp;gt;service&amp;lt;/servlet-name&amp;gt;<br />&amp;nbsp;&amp;nbsp;&amp;lt;url-pattern&amp;gt;/BUFFALO&amp;lt;/url-pattern&amp;gt;<br />&amp;nbsp;&amp;lt;/servlet-mapping&amp;gt;</p><p>SimpleService.java<br /><br />package net.buffalo.demo.simple;<br /><br />import ...;<br /><br />public class SimpleService {<br />&amp;nbsp;<br />&amp;nbsp;public double divide(double a, double b) {<br />&amp;nbsp;&amp;nbsp;System.out.println(&amp;quot;Calling Divide...,a=&amp;quot;+a+&amp;quot;, b=&amp;quot;+b);<br />&amp;nbsp;&amp;nbsp;try {<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;Thread.sleep(1000);<br />&amp;nbsp;&amp;nbsp;} catch (Exception e) {<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;e.printStackTrace();<br />&amp;nbsp;&amp;nbsp;}<br />&amp;nbsp;&amp;nbsp;return a/b;<br />&amp;nbsp;}</p><p>}</p><p>&amp;nbsp; </p><p>&amp;nbsp;buffalo.remoteCall(&amp;quot;simpleService.divide&amp;quot;,[double1,double2], function(reply) {<br />&amp;nbsp;&amp;nbsp;d3Handle.value = reply.getResult();<br />&amp;nbsp;})<br />buffalo对象访问 SimpleService.java 中divide方法。 返回结果(reply.getResult();)赋值给d3Handle.<br /><br />如此简单清晰的方法调用，实在是简洁。慢慢的进入buffalo,就可能清楚的明白它的原来。没什么好说的，再清楚不过的代码了。if try it first yourself again when you konw it very well.</p><p />]]></description> 
<dc:subject><![CDATA[JAVA]]></dc:subject> 
<dc:creator><![CDATA[地狱男爵]]></dc:creator> 
<dc:date>2005-12-04T23:10:28Z</dc:date> 
</item> 
<item rdf:about="http://hellboys.bokee.com/3563187.html"> 
<title><![CDATA[对于Michael的 "Don’t Lose Your Passion"]]></title> 
<link>http://hellboys.bokee.com/3563187.html</link> 
<description><![CDATA[<p /><p>看来 论Michael的 &amp;quot;Don’t Lose Your Passion&amp;quot;<br /><a href="http://michael.nona.name/archives/119">http://michael.nona.name/archives/119</a></p><p>总之有些末名的冲动与思索.每次总是想说什么,可是确不知道从何说起.不知道Michael所说是对是错.不过有些地方我确实很同意.</p><p>不好说什么,有些感触,先自省吧.</p><p>呵呵.<br /></p>]]></description> 
<dc:subject><![CDATA[花样年华]]></dc:subject> 
<dc:creator><![CDATA[地狱男爵]]></dc:creator> 
<dc:date>2005-11-18T13:58:08Z</dc:date> 
</item> 
<item rdf:about="http://hellboys.bokee.com/3470246.html"> 
<title><![CDATA[Spring JDBC DAO的两个example]]></title> 
<link>http://hellboys.bokee.com/3470246.html</link> 
<description><![CDATA[<h2 class="diaryTitle">Spring JDBC DAO的两个example - -</h2><p>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </p><p /><p>import java.sql.CallableStatement;<br />import java.sql.PreparedStatement;<br />import java.sql.ResultSet;<br />import java.sql.SQLException;<br />import java.sql.Types;<br />import java.util.List;</p><p>import org.springframework.jdbc.core.BatchPreparedStatementSetter;<br />import org.springframework.jdbc.core.CallableStatementCallback;<br />import org.springframework.jdbc.core.JdbcTemplate;<br />import org.springframework.jdbc.core.RowCallbackHandler;<br />import org.springframework.jdbc.core.RowMapper;<br />import org.springframework.jdbc.core.RowMapperResultReader;</p><p>public class SpringJDBCDAO {</p><p>&amp;nbsp;&amp;nbsp;&amp;nbsp; private class PersonRowMapper implements RowMapper {<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public Object mapRow(ResultSet rs, int index) throws SQLException {<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Person person = new Person();<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; person.setId(new Integer(rs.getInt(&amp;quot;id&amp;quot;)));<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; person.setFirstName(rs.getString(&amp;quot;first_name&amp;quot;));<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; person.setLastName(rs.getString(&amp;quot;last_name&amp;quot;));<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return person;<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }<br />&amp;nbsp;&amp;nbsp;&amp;nbsp; }</p><p>&amp;nbsp;&amp;nbsp;&amp;nbsp; private JdbcTemplate jdbcTemplate;</p><p>&amp;nbsp;&amp;nbsp;&amp;nbsp; public void processStoredProcedure() {<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CallableStatementCallback cb = new CallableStatementCallback() {<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public Object doInCallableStatement(CallableStatement cs)<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throws SQLException {<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cs.execute();<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return null;<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; jdbcTemplate.execute(&amp;quot;{ ARCHIVE_STUDENTS }&amp;quot;, cb);<br />&amp;nbsp;&amp;nbsp;&amp;nbsp; }</p><p>&amp;nbsp;&amp;nbsp;&amp;nbsp; public List getAllPersons() {<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String sql = &amp;quot;select id, first_name, last_name from person&amp;quot;;<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return jdbcTemplate.query(sql, new RowMapperResultReader(<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new PersonRowMapper()));<br />&amp;nbsp;&amp;nbsp;&amp;nbsp; }</p><p>&amp;nbsp;&amp;nbsp;&amp;nbsp; public String getLastNameForId(Integer id) {<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String sql = &amp;quot;select last_name from person where id = ?&amp;quot;;<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return (String) jdbcTemplate.queryForObject(sql, new Object[] { id },<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String.class);<br />&amp;nbsp;&amp;nbsp;&amp;nbsp; }</p><p>&amp;nbsp;&amp;nbsp;&amp;nbsp; public int getNumberOfPersons() {<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return jdbcTemplate.queryForInt(&amp;quot;select count(*) from person&amp;quot;);<br />&amp;nbsp;&amp;nbsp;&amp;nbsp; }</p><p>&amp;nbsp;&amp;nbsp;&amp;nbsp; public Person getPerson1(final Integer id) {<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String sql = &amp;quot;select id, first_name, last_name from person&amp;nbsp; where id = ?&amp;quot;;<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; final Person person = new Person();<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; final Object[] params = new Object[] { id };<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; jdbcTemplate.query(sql, params, new RowCallbackHandler() {<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void processRow(ResultSet rs) throws SQLException {<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; person.setId(new Integer(rs.getInt(&amp;quot;id&amp;quot;)));<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; person.setFirstName(rs.getString(&amp;quot;first_name&amp;quot;));<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; person.setFirstName(rs.getString(&amp;quot;last_name&amp;quot;));<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return person;<br />&amp;nbsp;&amp;nbsp;&amp;nbsp; }</p><p>&amp;nbsp;&amp;nbsp;&amp;nbsp; public Person getPerson2(final Integer id) {<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String sql = &amp;quot;select id, first_name, last_name from person&amp;nbsp; where id = ?&amp;quot;;<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; final Person person = new Person();<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; final Object[] params = new Object[] { id };<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; List list = jdbcTemplate.query(sql, params, new RowMapperResultReader(<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new PersonRowMapper()));<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return (Person) list.get(0);<br />&amp;nbsp;&amp;nbsp;&amp;nbsp; }</p><p>&amp;nbsp;&amp;nbsp;&amp;nbsp; public int insertPerson(Person person) {<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String sql = &amp;quot;insert into person (id, firstName, lastName)&amp;nbsp; values (?, ?, ?)&amp;quot;;<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Object[] params = new Object[] { person.getId(), person.getFirstName(),<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; person.getFirstName() };<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int[] types = new int[] { Types.INTEGER, Types.VARCHAR, Types.VARCHAR };<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; JdbcTemplate jdbcTemplate = null;<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return jdbcTemplate.update(sql, params, types);<br />&amp;nbsp;&amp;nbsp;&amp;nbsp; }</p><p>&amp;nbsp;&amp;nbsp;&amp;nbsp; public int[] updatePersons(final List persons) {<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String sql = &amp;quot;insert into person (id, firstName, lastName) values (?, ?, ?)&amp;quot;;<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BatchPreparedStatementSetter setter = null;<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; setter = new BatchPreparedStatementSetter() {<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int getBatchSize() {<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return persons.size();<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }</p><p>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setValues(PreparedStatement ps, int index)<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throws SQLException {<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Person person = (Person) persons.get(index);<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ps.setInt(0, person.getId().intValue());<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ps.setString(1, person.getFirstName());<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ps.setString(2, person.getLastName());<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return jdbcTemplate.batchUpdate(sql, setter);<br />&amp;nbsp;&amp;nbsp;&amp;nbsp; }<br />}<br />============</p><p>import java.sql.ResultSet;<br />import java.sql.SQLException;<br />import java.sql.Types;</p><p>import javax.sql.DataSource;</p><p>import org.springframework.jdbc.core.SqlParameter;<br />import org.springframework.jdbc.object.MappingSqlQuery;<br />import org.springframework.jdbc.object.SqlUpdate;</p><p>public class SpringJDBCDAOWithObject {<br />&amp;nbsp;&amp;nbsp;&amp;nbsp; class InsertPerson extends SqlUpdate {<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public InsertPerson(DataSource ds) {<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; setDataSource(ds);<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; setSql(&amp;quot;insert into person (id, firstName, lastName) values (?, ?, ?)&amp;quot;);<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; declareParameter(new SqlParameter(Types.NUMERIC));<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; declareParameter(new SqlParameter(Types.VARCHAR));<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; declareParameter(new SqlParameter(Types.VARCHAR));<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; compile();<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }</p><p>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int insert(Person person) {<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Object[] params = new Object[] { person.getId(),<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; person.getFirstName(), person.getLastName() };<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return update(params);<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }<br />&amp;nbsp;&amp;nbsp;&amp;nbsp; }</p><p>&amp;nbsp;&amp;nbsp;&amp;nbsp; private class PersonByIdQuery extends MappingSqlQuery {<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public PersonByIdQuery(DataSource ds) {<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; super(ds, &amp;quot;select id, first_name, last_name from person &amp;quot;<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; + &amp;quot;where id = ?&amp;quot;);<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; declareParameter(new SqlParameter(&amp;quot;id&amp;quot;, Types.INTEGER));<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; compile();<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }</p><p>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public Object mapRow(ResultSet rs, int rowNumber) throws SQLException {<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Person person = new Person();<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; person.setId((Integer) rs.getObject(&amp;quot;id&amp;quot;));<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; person.setFirstName(rs.getString(&amp;quot;first_name&amp;quot;));<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; person.setLastName(rs.getString(&amp;quot;last_name&amp;quot;));<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return person;<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }<br />&amp;nbsp;&amp;nbsp;&amp;nbsp; }</p><p>&amp;nbsp;&amp;nbsp;&amp;nbsp; private InsertPerson insertPerson;<br />&amp;nbsp;&amp;nbsp;&amp;nbsp; <br />&amp;nbsp;&amp;nbsp;&amp;nbsp; private PersonByIdQuery personByIdQuery;<br />&amp;nbsp; <br />&amp;nbsp;&amp;nbsp;&amp;nbsp; public Person getPerson(Integer id) {<br />&amp;nbsp;&amp;nbsp;&amp;nbsp; Object[] params = new Object[] { id };<br />&amp;nbsp;&amp;nbsp;&amp;nbsp; return (Person) personByIdQuery.execute(params).get(0);<br />&amp;nbsp;&amp;nbsp;&amp;nbsp; }</p><p>&amp;nbsp;&amp;nbsp;&amp;nbsp; public int insertPerson(Person person) {<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return insertPerson.insert(person);<br />&amp;nbsp;&amp;nbsp;&amp;nbsp; }<br />}<br /></p><p>from </p><h1 class="HeaderTitle"><a class="HeaderMainTitle" id="Header1_HeaderTitle" href="http://www.blogjava.net/jinfeng_wang/"><font size="3">jinfeng_wang</font></a></h1>]]></description> 
<dc:subject><![CDATA[JAVA]]></dc:subject> 
<dc:creator><![CDATA[地狱男爵]]></dc:creator> 
<dc:date>2005-11-09T18:04:01Z</dc:date> 
</item> 
<item rdf:about="http://hellboys.bokee.com/3394064.html"> 
<title><![CDATA[ASCII 字符表]]></title> 
<link>http://hellboys.bokee.com/3394064.html</link> 
<description><![CDATA[<h2>ASCII 打印字符</h2><p>数字 32–126 分配给了能在键盘上找到的字符，当您查看或打印文档时就会出现。数字 127 代表 DELETE 命令。</p><p><span class="ACECollapsed" id="divExpCollAsst_1" style="DISPLAY: block" border="0"> <table><tbody><tr><th>十进制</th><th>字符</th><td width="10"></td><th>十进制</th><th>字符</th></tr><tr><td>32</td><td>space</td><td></td><td>80</td><td>P</td></tr><tr><td>33</td><td>!</td><td width="10"></td><td>81</td><td>Q</td></tr><tr><td>34</td><td>&amp;quot;</td><td width="10"></td><td>82</td><td>R</td></tr><tr><td>35</td><td>#</td><td width="10"></td><td>83</td><td>S</td></tr><tr><td>36</td><td>$</td><td width="10"></td><td>84</td><td>T</td></tr><tr><td>37</td><td>%</td><td width="10"></td><td>85</td><td>U</td></tr><tr><td>38</td><td>&amp;amp;</td><td width="10"></td><td>86</td><td>V</td></tr><tr><td>39</td><td>'</td><td width="10"></td><td>87</td><td>w</td></tr><tr><td>40</td><td>(</td><td width="10"></td><td>88</td><td>X</td></tr><tr><td>41</td><td>)</td><td width="10"></td><td>89</td><td>Y</td></tr><tr><td>42</td><td>*</td><td width="10"></td><td>90</td><td>Z</td></tr><tr><td>43</td><td>+</td><td width="10"></td><td>91</td><td>[</td></tr><tr><td>44</td><td>,</td><td width="10"></td><td>92</td><td>\</td></tr><tr><td>45</td><td>-</td><td width="10"></td><td>93</td><td>]</td></tr><tr><td>46</td><td>.</td><td width="10"></td><td>94</td><td>^</td></tr><tr><td>47</td><td>/</td><td width="10"></td><td>95</td><td>_</td></tr><tr><td>48</td><td>0</td><td width="10"></td><td>96</td><td>`</td></tr><tr><td>49</td><td>1</td><td width="10"></td><td>97</td><td>a</td></tr><tr><td>50</td><td>2</td><td width="10"></td><td>98</td><td>b</td></tr><tr><td>51</td><td>3</td><td width="10"></td><td>99</td><td>c</td></tr><tr><td>52</td><td>4</td><td width="10"></td><td>100</td><td>d</td></tr><tr><td>53</td><td>5</td><td width="10"></td><td>101</td><td>e</td></tr><tr><td>54</td><td>6</td><td width="10"></td><td>102</td><td>f</td></tr><tr><td>55</td><td>7</td><td width="10"></td><td>103</td><td>g </td></tr><tr><td>56</td><td>8</td><td width="10"></td><td>104</td><td>h</td></tr><tr><td>57</td><td>9</td><td width="10"></td><td>105</td><td>i</td></tr><tr><td>58</td><td>:</td><td width="10"></td><td>106</td><td>j</td></tr><tr><td>59</td><td>;</td><td width="10"></td><td>107</td><td>k</td></tr><tr><td>60</td><td>&amp;lt;</td><td width="10"></td><td>108</td><td>l</td></tr><tr><td>61</td><td>=</td><td width="10"></td><td>109</td><td>m</td></tr><tr><td>62</td><td>&amp;gt;</td><td width="10"></td><td>110</td><td>n</td></tr><tr><td>63</td><td>?</td><td width="10"></td><td>111</td><td>o</td></tr><tr><td>64</td><td>@</td><td width="10"></td><td>112</td><td>p</td></tr><tr><td>65</td><td>A</td><td width="10"></td><td>113</td><td>q</td></tr><tr><td>66</td><td>B</td><td width="10"></td><td>114</td><td>r</td></tr><tr><td>67</td><td>C</td><td width="10"></td><td>115</td><td>s</td></tr><tr><td>68</td><td>D</td><td width="10"></td><td>116</td><td>t</td></tr><tr><td>69</td><td>E</td><td width="10"></td><td>117</td><td>u</td></tr><tr><td>70</td><td>F</td><td width="10"></td><td>118</td><td>v</td></tr><tr><td>71</td><td>G</td><td width="10"></td><td>119</td><td>w</td></tr><tr><td>72</td><td>H</td><td width="10"></td><td>120</td><td>x</td></tr><tr><td>73</td><td>I</td><td width="10"></td><td>121</td><td>y</td></tr><tr><td>74</td><td>J</td><td width="10"></td><td>122</td><td>z</td></tr><tr><td>75</td><td>K</td><td width="10"></td><td>123</td><td>{</td></tr><tr><td>76</td><td>L</td><td width="10"></td><td>124</td><td>|</td></tr><tr><td>77</td><td>M</td><td width="10"></td><td>125</td><td>}</td></tr><tr><td>78</td><td>N</td><td width="10"></td><td>126</td><td>~</td></tr><tr><td>79</td><td>O</td><td width="10"></td><td>127</td><td>DEL</td></tr></tbody></table></span></p><h2><h2>扩展 ASCII 打印字符</h2><p>扩展的 ASCII 字符满足了对更多字符的需求。扩展的 ASCII 包含 ASCII 中已有的 128 个字符（数字 0–32 显示在下图中），又增加了 128 个字符，总共是 256 个。即使有了这些更多的字符，许多语言还是包含无法压缩到 256 个字符中的符号。因此，出现了一些 ASCII 的变体来囊括地区性字符和符号。</p><p>例如，许多软件程序把 ASCII 表（又称作 ISO 8859-1）用于北美、西欧、澳大利亚和非洲的语言。</p><p><a class="DropDown" href="javascript:ToggleDiv('divExpCollAsst_2')"><img id="divExpCollAsst_2_img" alt="隐藏" src="http://office.microsoft.com/global/images/bluedrop.gif" border="0" />扩展的 ASCII 打印字符表</a></p><span class="ACECollapsed" id="divExpCollAsst_2" style="DISPLAY: block" border="0"><table><tbody><tr><th>十进制</th><th>字符</th><td width="10"></td><th>十进制</th><th>字符</th></tr><tr><td>128</td><td>&amp;Ccedil;</td><td></td><td>192</td><td>└</td></tr><tr><td>129</td><td>ü</td><td width="10"></td><td>193</td><td>┴</td></tr><tr><td>130</td><td>é</td><td width="10"></td><td>194</td><td>┬</td></tr><tr><td>131</td><td>&amp;acirc;</td><td width="10"></td><td>195</td><td>├</td></tr><tr><td>132</td><td>&amp;auml;</td><td width="10"></td><td>196</td><td>─</td></tr><tr><td>133</td><td>à</td><td width="10"></td><td>197</td><td>┼</td></tr><tr><td>134</td><td>&amp;aring;</td><td width="10"></td><td>198</td><td>╞</td></tr><tr><td>135</td><td>&amp;ccedil;</td><td width="10"></td><td>199</td><td>╟</td></tr><tr><td>136</td><td>ê</td><td width="10"></td><td>200</td><td>╚</td></tr><tr><td>137</td><td>&amp;euml;</td><td width="10"></td><td>201</td><td>╔</td></tr><tr><td>138</td><td>è</td><td width="10"></td><td>202</td><td>╩</td></tr><tr><td>139</td><td>&amp;iuml;</td><td width="10"></td><td>203</td><td>╦</td></tr><tr><td>140</td><td>&amp;icirc;</td><td width="10"></td><td>204</td><td>╠</td></tr><tr><td>141</td><td>ì</td><td width="10"></td><td>205</td><td>═</td></tr><tr><td>142</td><td>&amp;Auml;</td><td width="10"></td><td>206</td><td>╬</td></tr><tr><td>143</td><td>&amp;Aring;</td><td width="10"></td><td>207</td><td>╧</td></tr><tr><td>144</td><td>&amp;Eacute;</td><td width="10"></td><td>208</td><td>╨</td></tr><tr><td>145</td><td>&amp;aelig;</td><td width="10"></td><td>209</td><td>╤</td></tr><tr><td>146</td><td>&amp;AElig;</td><td width="10"></td><td>210</td><td>╥</td></tr><tr><td>147</td><td>&amp;ocirc;</td><td width="10"></td><td>211</td><td>╙</td></tr><tr><td>148</td><td>&amp;ouml;</td><td width="10"></td><td>212</td><td>&amp;Ocirc;</td></tr><tr><td>149</td><td>ò</td><td width="10"></td><td>213</td><td>╒</td></tr><tr><td>150</td><td>&amp;ucirc;</td><td width="10"></td><td>214</td><td>╓</td></tr><tr><td>151</td><td>ù</td><td width="10"></td><td>215</td><td>╫</td></tr><tr><td>152</td><td>&amp;yuml;</td><td width="10"></td><td>216</td><td>╪</td></tr><tr><td>153</td><td>&amp;Ouml;</td><td width="10"></td><td>217</td><td>┘</td></tr><tr><td>154</td><td>&amp;Uuml;</td><td width="10"></td><td>218</td><td>┌</td></tr><tr><td>155</td><td>&amp;cent;</td><td width="10"></td><td>219</td><td>█</td></tr><tr><td>156</td><td>&amp;pound;</td><td width="10"></td><td>220</td><td>▄</td></tr><tr><td>157</td><td>&amp;yen;</td><td width="10"></td><td>221</td><td>▌</td></tr><tr><td>158</td><td>&amp;#8359;</td><td width="10"></td><td>222</td><td>&amp;#9616;</td></tr><tr><td>159</td><td>&amp;#402;</td><td width="10"></td><td>223</td><td>&amp;#9600;</td></tr><tr><td>160</td><td>á</td><td width="10"></td><td>224</td><td>α</td></tr><tr><td>161</td><td>í</td><td width="10"></td><td>225</td><td>&amp;szlig;</td></tr><tr><td>162</td><td>ó</td><td width="10"></td><td>226</td><td>Γ</td></tr><tr><td>163</td><td>ú</td><td width="10"></td><td>227</td><td>π</td></tr><tr><td>164</td><td>&amp;ntilde;</td><td width="10"></td><td>228</td><td>Σ</td></tr><tr><td>165</td><td>&amp;Ntilde;</td><td width="10"></td><td>229</td><td>σ</td></tr><tr><td>166</td><td>&amp;ordf;</td><td width="10"></td><td>230</td><td>&amp;micro;</td></tr><tr><td>167</td><td>&amp;ordm;</td><td width="10"></td><td>231</td><td>τ</td></tr><tr><td>168</td><td>&amp;iquest;</td><td width="10"></td><td>232</td><td>Φ</td></tr><tr><td>169</td><td>&amp;#8976;</td><td width="10"></td><td>233</td><td>Θ</td></tr><tr><td>170</td><td>&amp;not;</td><td width="10"></td><td>234</td><td>Ω</td></tr><tr><td>171</td><td>&amp;frac12;</td><td width="10"></td><td>235</td><td>δ</td></tr><tr><td>172</td><td>&amp;frac14;</td><td width="10"></td><td>236</td><td>∞</td></tr><tr><td>173</td><td>&amp;iexcl;</td><td width="10"></td><td>237</td><td>φ</td></tr><tr><td>174</td><td>&amp;laquo;</td><td width="10"></td><td>238</td><td>ε</td></tr><tr><td>175</td><td>&amp;raquo;</td><td width="10"></td><td>239</td><td>∩</td></tr><tr><td>176</td><td>&amp;#9617;</td><td width="10"></td><td>240</td><td>≡</td></tr><tr><td>177</td><td>&amp;#9618;</td><td width="10"></td><td>241</td><td>±</td></tr><tr><td>178</td><td>▓</td><td width="10"></td><td>242</td><td>≥</td></tr><tr><td>179</td><td>│</td><td width="10"></td><td>243</td><td>≤</td></tr><tr><td>180</td><td>┤</td><td width="10"></td><td>244</td><td>&amp;#8992;</td></tr><tr><td>181</td><td>╡</td><td width="10"></td><td>245</td><td>&amp;#8993;</td></tr><tr><td>182</td><td>╢</td><td width="10"></td><td>246</td><td>÷</td></tr><tr><td>183</td><td>╖</td><td width="10"></td><td>247</td><td>≈</td></tr><tr><td>184</td><td>╕</td><td width="10"></td><td>248</td><td>≈</td></tr><tr><td>185</td><td>╣</td><td width="10"></td><td>249</td><td>&amp;#8729;</td></tr><tr><td>186</td><td>║</td><td width="10"></td><td>250</td><td>·</td></tr><tr><td>187</td><td>╗</td><td width="10"></td><td>251</td><td>√</td></tr><tr><td>188</td><td>╝</td><td width="10"></td><td>252</td><td>&amp;#8319;</td></tr><tr><td>189</td><td>╜</td><td width="10"></td><td>253</td><td>&amp;sup2;</td></tr><tr><td>190</td><td>╛</td><td width="10"></td><td>254</td><td>■</td></tr><tr><td>191</td><td>┐</td><td width="10"></td><td>255</td><td>&amp;nbsp;</td></tr></tbody></table></span><h2>ASCII 非打印控制字符</h2><p>ASCII 表上的数字 0–31 分配给了控制字符，用于控制像打印机等一些外围设备。例如，12 代表换页/新页功能。此命令指示打印机跳到下一页的开头。</p><p><a class="DropDown" href="javascript:ToggleDiv('divExpCollAsst_3')"><img id="divExpCollAsst_3_img" alt="隐藏" src="http://office.microsoft.com/global/images/bluedrop.gif" border="0" />ASCII 非打印控制字符表</a></p><span class="ACECollapsed" id="divExpCollAsst_3" style="DISPLAY: block" border="0"><table><tbody><tr><th>十进制</th><th>字符</th><td width="10"></td><th>十进制</th><th>字符</th></tr><tr><td>0</td><td>空</td><td></td><td>16</td><td>数据链路转意</td></tr><tr><td>1</td><td>头标开始</td><td width="10"></td><td>17</td><td>设备控制 1</td></tr><tr><td>2</td><td>正文开始</td><td width="10"></td><td>18</td><td>设备控制 2</td></tr><tr><td>3</td><td>正文结束</td><td width="10"></td><td>19</td><td>设备控制 3</td></tr><tr><td>4</td><td>传输结束</td><td width="10"></td><td>20</td><td>设备控制 4</td></tr><tr><td>5</td><td>查询</td><td width="10"></td><td>21</td><td>反确认</td></tr><tr><td>6</td><td>确认</td><td width="10"></td><td>22</td><td>同步空闲</td></tr><tr><td>7</td><td>震铃</td><td width="10"></td><td>23</td><td>传输块结束</td></tr><tr><td>8</td><td>backspace</td><td width="10"></td><td>24</td><td>取消</td></tr><tr><td>9</td><td>水平制表符</td><td width="10"></td><td>25</td><td>媒体结束</td></tr><tr><td>10</td><td>换行/新行</td><td width="10"></td><td>26</td><td>替换</td></tr><tr><td>11</td><td>竖直制表符</td><td width="10"></td><td>27</td><td>转意</td></tr><tr><td>12</td><td>换页/新页</td><td width="10"></td><td>28</td><td>文件分隔符</td></tr><tr><td>13</td><td>回车</td><td width="10"></td><td>29</td><td>组分隔符</td></tr><tr><td>14</td><td>移出</td><td width="10"></td><td>30</td><td>记录分隔符</td></tr><tr><td>15</td><td>移入</td><td width="10"></td><td>31</td><td>单元分隔符</td></tr></tbody></table></span><h2>ASCII 之外</h2><p>另一个更新的字符表称为 <a class="glossary" href="javascript:AppendPopup(this,'ofUnicode_5')">Unicode<span class="AsstInlineDefText"><span class="ACICollapsed" id="divInlineDef_ofUnicode_5">&amp;nbsp;（Unicode：Unicode Consortium 开发的一种字符编码标准。该标准采用多（于一）个字节代表每一字符，实现了使用单个字符集代表世界上几乎所有书面语言。）</span></span></a>。 因为 Unicode 表大得多，它可以表示 65,536 个字符，而 ASCII 表只能表示 128 个字符，扩展的 ASCII 表也只能表示 256 个字符。这一更大的容量使不同语言的大多数字符都能包含在同一个字符集中。</p><!--@@FEEDBACKWIZ@@--></h2>]]></description> 
<dc:subject><![CDATA[IT程序]]></dc:subject> 
<dc:creator><![CDATA[地狱男爵]]></dc:creator> 
<dc:date>2005-11-02T16:00:05Z</dc:date> 
</item> 
<item rdf:about="http://hellboys.bokee.com/3001688.html"> 
<title><![CDATA[关于OpenSessionInViewFilter ]]></title> 
<link>http://hellboys.bokee.com/3001688.html</link> 
<description><![CDATA[<div class="post"><h2><a id="viewpost1_TitleUrl" href="http://www.cnblogs.com/timothy/archive/2004/11/18/65285.html">关于OpenSessionInViewFilter</a> </h2><div class="postbody"><div class="diaryBody"><p>转自：Potain 的BLOG</p><div class="snip-title"><h1 class="snip-name">OpenSessionInView </h1><div class="snip-info">Created by <a href="http://www.aspectoriented.org:9080//space/potian">potian</a>. Last edited by <a href="http://www.aspectoriented.org:9080//space/admin">admin</a> 61 days ago. Viewed 181 times. </div><div class="snip-buttons"><span class="inactive">[edit]</span> <span class="inactive">[attach]</span> </div></div><div class="snip-content" id="snip-content"><div class="snip-attachments"></div>Hibernate的Lazy初始化1:n关系时，你必须保证是在同一个Session内部使用这个关系集合，不然Hiernate将抛出例外。 <p class="paragraph">另外，你不愿意你的DAO测试代码每次都打开关系Session，因此，我们一般会采用OpenSessionInView模式。 </p><h3 class="heading-1"><a name="0"></a><b style="COLOR: black; BACKGROUND-COLOR: #ffff66">OpenSessionInViewFilter</b>解决Web应用程序的问题 </h3>如果程序是在正常的Web程序中运行，那么Spring的<b style="COLOR: black; BACKGROUND-COLOR: #ffff66">OpenSessionInViewFilter</b>能够解决问题，它： <p class="paragraph" /><div class="code"><pre><span class="java-keyword">protected</span> void doFilterInternal(HttpServletRequest request, 
             HttpServletResponse response,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;     FilterChain filterChain) <span class="java-keyword">throws</span> ServletException, IOException {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SessionFactory sessionFactory = lookupSessionFactory();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;logger.debug(<span class="java-quote">&amp;quot;Opening Hibernate Session in <b style="COLOR: black; BACKGROUND-COLOR: #ffff66">OpenSessionInViewFilter</b>&amp;quot;</span>);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Session session = getSession(sessionFactory);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TransactionSynchronizationManager.bindResource(sessionFactory, 
             <span class="java-keyword">new</span> SessionHolder(session));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;<span class="java-keyword">try</span> {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;filterChain.doFilter(request, response);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;<span class="java-keyword">finally</span> {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TransactionSynchronizationManager.unbindResource(sessionFactory);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;logger.debug(<span class="java-quote">&amp;quot;Closing Hibernate Session in <b style="COLOR: black; BACKGROUND-COLOR: #ffff66">OpenSessionInViewFilter</b>&amp;quot;</span>);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;closeSession(session, sessionFactory);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
}</pre></div>可以看到，这个Filter在request开始之前，把sessionFactory绑定到TransactionSynchronizationManager，和这个SessionHolder相关。这个意味着所有request执行过程中将使用这个session。而在请求结束后，将和这个sessionFactory对应的session解绑，并且关闭Session。 <p class="paragraph">为什么绑定以后，就可以防止每次不会新开一个Session呢？看看HibernateDaoSupport的情况： </p><div class="code"><pre><span class="java-keyword">public</span> <span class="java-keyword">final</span> void setSessionFactory(SessionFactory sessionFactory) {
    <span class="java-keyword">this</span>.hibernateTemplate = <span class="java-keyword">new</span> HibernateTemplate(sessionFactory);
  }
 <span class="java-keyword">protected</span> <span class="java-keyword">final</span> HibernateTemplate getHibernateTemplate() {
  <span class="java-keyword">return</span> hibernateTemplate;
 }</pre></div><p class="paragraph">我们的DAO将使用这个template进行操作： </p><div class="code"><pre><span class="java-keyword">public</span> <span class="java-keyword">abstract</span> class BaseHibernateObjectDao
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;<span class="java-keyword">extends</span> HibernateDaoSupport
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;<span class="java-keyword">implements</span> BaseObjectDao {
            <p class="paragraph">
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;<span class="java-keyword">protected</span> BaseEntityObject getByClassId(<span class="java-keyword">final</span> <span class="java-object">long</span> id) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BaseEntityObject obj =
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(BaseEntityObject) getHibernateTemplate()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.execute(<span class="java-keyword">new</span> HibernateCallback() {
            </p>
            <p class="paragraph">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;<span class="java-keyword">public</span> <span class="java-object">Object</span> doInHibernate(Session session)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;<span class="java-keyword">throws</span> HibernateException {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;<span class="java-keyword">return</span> session.get(getPersistentClass(), 
                                       <span class="java-keyword">new</span> <span class="java-object">Long</span>(id));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
            </p>
            <p class="paragraph">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;<span class="java-keyword">return</span> obj;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
            </p>
            <p class="paragraph" />
            <p class="paragraph">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;<span class="java-keyword">public</span> void save(BaseEntityObject entity) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;getHibernateTemplate().saveOrUpdate(entity);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
            </p>
            <p class="paragraph">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;<span class="java-keyword">public</span> void remove(BaseEntityObject entity) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;<span class="java-keyword">try</span> {
            </p>
            <p class="paragraph">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;getHibernateTemplate().delete(entity);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} <span class="java-keyword">catch</span> (Exception e) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;<span class="java-keyword">throw</span> <span class="java-keyword">new</span> FlexEnterpriseDataAccessException(e);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
            </p>
            <p class="paragraph">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;<span class="java-keyword">public</span> void refresh(<span class="java-keyword">final</span> BaseEntityObject entity) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;getHibernateTemplate().execute(<span class="java-keyword">new</span> HibernateCallback() {
            </p>
            <p class="paragraph">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;<span class="java-keyword">public</span> <span class="java-object">Object</span> doInHibernate(Session session)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;<span class="java-keyword">throws</span> HibernateException {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;session.refresh(entity);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;<span class="java-keyword">return</span> <span class="java-keyword">null</span>;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
            </p>
            <p class="paragraph">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}</p>
            <p class="paragraph">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;<span class="java-keyword">public</span> void replicate(<span class="java-keyword">final</span> <span class="java-object">Object</span> entity) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;getHibernateTemplate().execute(<span class="java-keyword">new</span> HibernateCallback() {
            </p>
            <p class="paragraph">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;<span class="java-keyword">public</span> <span class="java-object">Object</span> doInHibernate(Session session)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;<span class="java-keyword">throws</span> HibernateException {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;session.replicate(entity, 
                                ReplicationMode.OVERWRITE);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;<span class="java-keyword">return</span> <span class="java-keyword">null</span>;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
            </p>
            <p class="paragraph">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}</p></pre></div>而HibernateTemplate试图每次在execute之前去获得Session，执行完就力争关闭Session <div class="code"><pre><span class="java-keyword">public</span> <span class="java-object">Object</span> execute(HibernateCallback action) <span class="java-keyword">throws</span> DataAccessException {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Session session = (!<span class="java-keyword">this</span>.allowCreate ?
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SessionFactoryUtils.getSession(getSessionFactory(), 
                  <span class="java-keyword">false</span>) :
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SessionFactoryUtils.getSession(getSessionFactory(),
                  getEntityInterceptor(),
                  getJdbcExceptionTranslator()));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;<span class="java-object">boolean</span> existingTransaction =  
          TransactionSynchronizationManager.hasResource(getSessionFactory());
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;<span class="java-keyword">if</span> (!existingTransaction &amp;amp;&amp;amp; getFlushMode() == FLUSH_NEVER) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;session.setFlushMode(FlushMode.NEVER);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;<span class="java-keyword">try</span> {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;<span class="java-object">Object</span> result = action.doInHibernate(session);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;flushIfNecessary(session, existingTransaction);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;<span class="java-keyword">return</span> result;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;<span class="java-keyword">catch</span> (HibernateException ex) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;<span class="java-keyword">throw</span> convertHibernateAccessException(ex);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;<span class="java-keyword">catch</span> (SQLException ex) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;<span class="java-keyword">throw</span> convertJdbcAccessException(ex);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;<span class="java-keyword">catch</span> (RuntimeException ex) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// callback code threw application exception
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;<span class="java-keyword">throw</span> ex;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;<span class="java-keyword">finally</span> {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SessionFactoryUtils.closeSessionIfNecessary(
                    session, getSessionFactory());
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
}</pre></div>而这个SessionFactoryUtils能否得到当前的session以及closeSessionIfNecessary是否真正关闭session，端取决于这个session是否用sessionHolder和这个sessionFactory在我们最开始提到的TransactionSynchronizationManager绑定。 <div class="code"><pre><span class="java-keyword">public</span> <span class="java-keyword">static</span> void closeSessionIfNecessary(Session session, 
    SessionFactory sessionFactory)   
    <span class="java-keyword">throws</span> CleanupFailureDataAccessException {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;<span class="java-keyword">if</span> (session == <span class="java-keyword">null</span> || 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   TransactionSynchronizationManager.hasResource(sessionFactory)) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;<span class="java-keyword">return</span>;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;logger.debug(<span class="java-quote">&amp;quot;Closing Hibernate session&amp;quot;</span>);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;<span class="java-keyword">try</span> {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;session.close();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;<span class="java-keyword">catch</span> (JDBCException ex) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// SQLException underneath
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;<span class="java-keyword">throw</span> <span class="java-keyword">new</span> CleanupFailureDataAccessException(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;<span class="java-quote">&amp;quot;Cannot close Hibernate session&amp;quot;</span>, ex.getSQLException());
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;<span class="java-keyword">catch</span> (HibernateException ex) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;<span class="java-keyword">throw</span> <span class="java-keyword">new</span> CleanupFailureDataAccessException(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;<span class="java-quote">&amp;quot;Cannot close Hibernate session&amp;quot;</span>, ex);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
}</pre></div><h3 class="heading-1">HibernateInterceptor和OpenSessionInViewInterceptor的问题 </h3><p class="paragraph">使用同样的方法，这两个Interceptor可以用来解决问题。但是关键的不同之处在于，它们的力度只能定义在DAO或业务方法上，而不是在我们的Test方法上，除非我们把它们应用到TestCase的方法上，但你不大可能为TestCase去定义一个接口，然后把Interceptor应用到这个接口的某些方法上。直接使用HibernateTransactionManager也是一样的。因此，如果我们有这样的测试： </p><div class="code"><pre>Category parentCategory  = <span class="java-keyword">new</span> Category ();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;parentCategory.setName(<span class="java-quote">&amp;quot;parent&amp;quot;</span>);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dao.save(parentCategory);
            <p class="paragraph">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Category childCategory  = <span class="java-keyword">new</span> Category();
        childCategory.setName(<span class="java-quote">&amp;quot;child&amp;quot;</span>);
            </p>
            <p class="paragraph">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;parentCategory.addChild(childCategory);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dao.save(childCategory);</p>
            <p class="paragraph">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Category savedParent = dao.getCategory(<span class="java-quote">&amp;quot;parent&amp;quot;</span>);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Category savedChild = (Category ) savedParent.getChildren().get(0);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;assertEquals(savedChild, childCategory);
            </p></pre></div>将意味着两件事情： <ul class="minus"><li>每次DAO执行都会启动一个session和关闭一个session </li><li>如果我们定义了一个lazy的关系，那么最后的Category savedChild = (Category ) savedParent.getChildren().get(0);将会让hibernate报错。 </li></ul><h3 class="heading-1">解决方案 </h3><p class="paragraph">一种方法是对TestCase应用Interceptor或者TransactionManager，但这个恐怕会造成很多麻烦。除非是使用增强方式的AOP.我前期采用这种方法(Aspectwerkz)，在Eclipse里面也跑得含好。 </p><p class="paragraph">另一种方法是在TestCase的setup和teardown里面实现和Filter完全一样的处理，其他的TestCase都从这个TestCase继承，这种方法是我目前所使用的。 </p></div></div></div><p class="postfoot">posted on 2004-11-18 15:11 <a href="http://www.cnblogs.com/timothy/">逃离开发</a> 阅读(856) <a href="http://www.cnblogs.com/timothy/archive/2004/11/18/65285.html#Post">评论(1)</a> &amp;nbsp;<a href="http://www.cnblogs.com/timothy/admin/EditPosts.aspx?postid=65285">编辑</a>&amp;nbsp;<a href="http://www.cnblogs.com/timothy/AddToFavorite.aspx?id=65285">收藏</a> <a title="功能强大的网络收藏夹，一秒钟操作就可以轻松实现保存带来的价值、分享带来的快乐" href="javascript:d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&amp;u='+escape(d.location.href)+'&amp;c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();">收藏至365Key</a> </p></div><link href="http://www.cnblogs.com/timothy/Services/Pingback.aspx" rel="pingback" /><!--
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
<rdf:Description
rdf:about="http://www.cnblogs.com/timothy/archive/2004/11/18/65285.html"
dc:identifier="http://www.cnblogs.com/timothy/archive/2004/11/18/65285.html"
dc:title="关于OpenSessionInViewFilter"
trackback:ping="http://www.cnblogs.com/timothy/services/trackbacks/65285.aspx" />
</rdf:RDF>
--><a name="评论"><div id="comments"><h3>评论</h3><div class="post"><h2></h2>转自：Karl Baum's Weblog <br /><br />Karl Baum's Weblog <br /><br />All | General | Java <br /><br /><br />Thursday July 08, 2004 <br />Lazy Initialization and the DAO pattern with Hibernate and Spring <br /><br />Hibernate and Lazy Initialization <br /><br />Hibernate object relational mapping offers both lazy and non-lazy modes of object initialization. Non-lazy initialization retrieves an object and all of its related objects at load time. This can result in hundreds if not thousands of select statements when retrieving one entity. The problem is compounded when bi-directional relationships are used, often causing entire databases to be loaded during the initial request. Of course one could tediously examine each object relationship and manually remove those most costly, but in the end, we may be losing the ease of use benefit sought in using the ORM tool. <br /><br />The obvious solution is to employ the lazy loading mechanism provided by hibernate. This initialization strategy only loads an object's one-to-many and many-to-many relationships when these fields are accessed. The scenario is practically transparent to the developer and a minimum amount of database requests are made, resulting in major performance gains. One drawback to this technique is that lazy loading requires the Hibernate session to remain open while the data object is in use. This causes a major problem when trying to abstract the persistence layer via the Data Access Object pattern. In order to fully abstract the persistence mechanism, all database logic, including opening and closing sessions, must not be performed in the application layer. Most often, this logic is concealed behind the DAO implementation classes which implement interface stubs. The quick and dirty solution is to forget the DAO pattern and include database connection logic in the application layer. This works for small applications but in large systems this can prove to be a major design flaw, hindering application extensibility. <br /><br />Being Lazy in the Web Layer <br /><br />Fortunately for us, the Spring Framework has developed an out of box web solution for using the DAO pattern in combination with Hibernate lazy loading. For anyone not familiar with using the Spring Framework in combination with Hibernate, I will not go into the details here, but I encourage you to read Hibernate Data Access with the Spring Framework. In the case of a web application, Spring comes with both the OpenSessionInViewFilter and the OpenSessionInViewInterceptor. One can use either one interchangeably as both serve the same function. The only difference between the two is the interceptor runs within the Spring container and is configured within the web application context while the Filter runs in front of Spring and is configured within the web.xml. Regardless of which one is used, they both open the hibernate session during the request binding this session to the current thread. Once bound to the thread, the open hibernate session can transparently be used within the DAO implementation classes. The session will remain open for the view allowing lazy access the database value objects. Once the view logic is complete, the hibernate session is closed either in the Filter doFilter method or the Interceptor postHandle method. Below is an example of the configuration of each component: <br /><br />Interceptor Configuration <br /><br />&amp;lt;beans&amp;gt; <br />&amp;lt;bean id=&amp;quot;urlMapping&amp;quot; <br />class=&amp;quot;org.springframework.web.servlet.handler.SimpleUrlHandlerMapping&amp;quot;&amp;gt; <br />&amp;lt;property name=&amp;quot;interceptors&amp;quot;&amp;gt; <br />&amp;lt;list&amp;gt; <br />&amp;lt;ref bean=&amp;quot;openSessionInViewInterceptor&amp;quot;/&amp;gt; <br />&amp;lt;/list&amp;gt; <br />&amp;lt;/property&amp;gt; <br />&amp;lt;property name=&amp;quot;mappings&amp;quot;&amp;gt; <br />... <br />&amp;lt;/bean&amp;gt; <br />... <br />&amp;lt;bean name=&amp;quot;openSessionInViewInterceptor&amp;quot; <br />class=&amp;quot;org.springframework.orm.hibernate.support.OpenSessionInViewInterceptor&amp;quot;&amp;gt; <br />&amp;lt;property name=&amp;quot;sessionFactory&amp;quot;&amp;gt;&amp;lt;ref bean=&amp;quot;sessionFactory&amp;quot;/&amp;gt;&amp;lt;/property&amp;gt; <br />&amp;lt;/bean&amp;gt; <br />&amp;lt;/beans&amp;gt; <br />Filter Configuration <br /><br />&amp;lt;web-app&amp;gt; <br />... <br />&amp;lt;filter&amp;gt; <br />&amp;lt;filter-name&amp;gt;hibernateFilter&amp;lt;/filter-name&amp;gt; <br />&amp;lt;filter-class&amp;gt; <br />org.springframework.orm.hibernate.support.OpenSessionInViewFilter <br />&amp;lt;/filter-class&amp;gt; <br />&amp;lt;/filter&amp;gt; <br />... <br />&amp;lt;filter-mapping&amp;gt; <br />&amp;lt;filter-name&amp;gt;hibernateFilter&amp;lt;/filter-name&amp;gt; <br />&amp;lt;url-pattern&amp;gt;*.spring&amp;lt;/url-pattern&amp;gt; <br />&amp;lt;/filter-mapping&amp;gt; <br />... <br />&amp;lt;/web-app&amp;gt; <br />Implementing the Hibernate DAO's to use the open session is simple. In fact, if you are already using the Spring Framework to implement your Hibernate DAO's, most likely you will not have to change a thing. The DAO's must access Hibernate through the convenient HibernateTemplate utility, which makes database access a piece of cake. Below is an example DAO. <br /><br />Example DAO <br /><br />public class HibernateProductDAO extends HibernateDaoSupport implements ProductDAO { <br /><br />public Product getProduct(Integer productId) { <br />return (Product)getHibernateTemplate().load(Product.class, productId); <br />} <br /><br />public Integer saveProduct(Product product) { <br />return (Integer) getHibernateTemplate().save(product); <br />} <br /><br />public void updateProduct(Product product) { <br />getHibernateTemplate().update(product); <br />} <br />} <br />Being Lazy in the Business Layer <br /><br />Even outside the view, the Spring Framework makes it easy to use lazy load initialization, through the AOP interceptor HibernateInterceptor. The hibernate interceptor transparently intercepts calls to any business object configured in the Spring application context, opening a hibernate session before the call, and closing the session afterward. Let's run through a quick example. Suppose we have an interface BusinessObject: <br /><br />public interface BusinessObject { <br />public void doSomethingThatInvolvesDaos(); <br />} <br />The class BusinessObjectImpl implements BusinessObject: <br /><br /><br />public class BusinessObjectImpl implements BusinessObject { <br />public void doSomethingThatInvolvesDaos() { <br />// lots of logic that calls <br />// DAO classes Which access <br />// data objects lazily <br />} <br />} <br />Through some configurations in the Spring application context, we can instruct the HibernateInterceptor to intercept calls to the BusinessObjectImpl allowing it's methods to lazily access data objects. Take a look at the fragment below: <br /><br />&amp;lt;beans&amp;gt; <br />&amp;lt;bean id=&amp;quot;hibernateInterceptor&amp;quot; class=&amp;quot;org.springframework.orm.hibernate.HibernateInterceptor&amp;quot;&amp;gt; <br />&amp;lt;property name=&amp;quot;sessionFactory&amp;quot;&amp;gt; <br />&amp;lt;ref bean=&amp;quot;sessionFactory&amp;quot;/&amp;gt; <br />&amp;lt;/property&amp;gt; <br />&amp;lt;/bean&amp;gt; <br />&amp;lt;bean id=&amp;quot;businessObjectTarget&amp;quot; class=&amp;quot;com.acompany.BusinessObjectImpl&amp;quot;&amp;gt; <br />&amp;lt;property name=&amp;quot;someDAO&amp;quot;&amp;gt;&amp;lt;ref bean=&amp;quot;someDAO&amp;quot;/&amp;gt;&amp;lt;/property&amp;gt; <br />&amp;lt;/bean&amp;gt; <br />&amp;lt;bean id=&amp;quot;businessObject&amp;quot; class=&amp;quot;org.springframework.aop.framework.ProxyFactoryBean&amp;quot;&amp;gt; <br />&amp;lt;property name=&amp;quot;target&amp;quot;&amp;gt;&amp;lt;ref bean=&amp;quot;businessObjectTarget&amp;quot;/&amp;gt;&amp;lt;/property&amp;gt; <br />&amp;lt;property name=&amp;quot;proxyInterfaces&amp;quot;&amp;gt; <br />&amp;lt;value&amp;gt;com.acompany.BusinessObject&amp;lt;/value&amp;gt; <br />&amp;lt;/property&amp;gt; <br />&amp;lt;property name=&amp;quot;interceptorNames&amp;quot;&amp;gt; <br />&amp;lt;list&amp;gt; <br />&amp;lt;value&amp;gt;hibernateInterceptor&amp;lt;/value&amp;gt; <br />&amp;lt;/list&amp;gt; <br />&amp;lt;/property&amp;gt; <br />&amp;lt;/bean&amp;gt; <br />&amp;lt;/beans&amp;gt; <br /><br />When the businessObject bean is referenced, the HibernateInterceptor opens a hibernate session and passes the call onto the BusinessObjectImpl. When the BusinessObjectImpl has finished executing, the HibernateInterceptor transparently closes the session. The application code has no knowledge of any persistence logic, yet it is still able to lazily access data objects. <br /><br />Being Lazy in your Unit Tests <br /><br />Last but not least, we'll need the ability to test our lazy application from J-Unit. This is easily done by overriding the setUp and tearDown methods of the TestCase class. I prefer to keep this code in a convenient abstract TestCase class for all of my tests to extend. <br /><br />public abstract class MyLazyTestCase extends TestCase { <br /><br />private SessionFactory sessionFactory; <br />private Session session; <br /><br />public void setUp() throws Exception { <br />super.setUp(); <br />SessionFactory sessionFactory = (SessionFactory) getBean(&amp;quot;sessionFactory&amp;quot;); <br />session = SessionFactoryUtils.getSession(sessionFactory, true); <br />Session s = sessionFactory.openSession(); <br />TransactionSynchronizationManager.bindResource(sessionFactory, new SessionHolder(s)); <br /><br />} <br /><br />protected Object getBean(String beanName) { <br />//Code to get objects from Spring application context <br />} <br /><br />public void tearDown() throws Exception { <br />super.tearDown(); <br />SessionHolder holder = (SessionHolder) TransactionSynchronizationManager.getResource(sessionFactory); <br />Session s = holder.getSession(); <br />s.flush(); <br />TransactionSynchronizationManager.unbindResource(sessionFactory); <br />SessionFactoryUtils.closeSessionIfNecessary(s, sessionFactory); <br />} <br />} <br /><br />( Jul 08 2004, 09:39:55 AM EDT ) Permalink Comments [2] <br /><br />Trackback URL: <a href="http://jroller.com/trackback/kbaum/Weblog/orm_lazy_initialization_with_dao" target="_new">http://jroller.com/trackback/kbaum/Weblog/orm_lazy_initialization_with_dao</a> <br />Comments: <br /><br /><br />A few things to keep in the back of your mind if you take this approach; 1. If any errors occur while attempting to lazy load relationships in the view (JSP) it would be hard to present a nice error to the user. 2. This would result in at least 2 hibernate sessions (db connections being open for any one request), so you might want to up the number of connections available. Cheers, Dan <br />Posted by Dan Washusen on July 08, 2004 at 09:02 PM EDT # <br /><br />I am a little confused on why it would be difficult to show a nice error jsp. Couldn't we just use the provided servlet container error page mechanisms? In regards to the 2 hibernate sessions being opened. Are you saying that the OpenSessionInViewInterceptor would be run twice if an exception was thrown? Thanks for your feedback! <br />Posted by Karl Baum (63.170.158.133) on July 09, 2004 at 09:48 AM EDT # <br /></div></div></a><a title="permalink: re: 关于OpenSessionInViewFilter" href="http://www.cnblogs.com/timothy/archive/2004/11/18/65285.html#65288">#</a>&amp;nbsp;<a name="65288"></a>re: 关于OpenSessionInViewFilter<a name="Post"></a> <a id="Comments1_CommentList__ctl0_DeleteLink" href="javascript:__doPostBack('Comments1$CommentList$_ctl0$DeleteLink','')"></a>&amp;nbsp;&amp;nbsp;<a id="Comments1_CommentList__ctl0_EditLink"></a> ]]></description> 
<dc:subject><![CDATA[JAVA]]></dc:subject> 
<dc:creator><![CDATA[地狱男爵]]></dc:creator> 
<dc:date>2005-09-22T15:36:45Z</dc:date> 
</item> 
<item rdf:about="http://hellboys.bokee.com/2993062.html"> 
<title><![CDATA[Linux 下再配CVS服务器建立和权限配置]]></title> 
<link>http://hellboys.bokee.com/2993062.html</link> 
<description><![CDATA[<p>来源：chinaunix</p><p>建立和配置操作都是在Redhat Linux8.0上做的。系统带的CVS可执行程序在/usr/bin下面，版本信息为：Concurrent Versions System (CVS) 1.11.2 (client/server)。系统带的这个cvs可执行程序既可以当客户端使用，也可以用来建立cvs源代码库服务器。 <br /><br />建立一个源代码库主要有以下几步： <br /><br />（1）初始化cvs服务器环境。 <br />#cvs -d/usr/local/source init <br />之后进入/usr/local/source，可以看到有一个目录CVSROOT, 下面是初始化后的CVS服务器配置文件。暂且保持不动。 <br /><br />（2）把cvs服务放到xinetd系统服务中。 <br />首先在/etc/xinetd.d目录下生成任务配置文件cvspserver，文件名称可以随便用。 <br /><br />其中内容大致如下： <br /></p><table cellspacing="0" cellpadding="5" width="100%" bgcolor="#cccccc" border="1"><tbody><tr><td><pre><code>service cvspserver 
    {  
        flags           = REUSE 
        socket_type     = stream 
        wait            = no 
        user            = root  
        protocol        = tcp 
        server          = /usr/bin/cvs 
        server_args     = -f --allow-root=/usr/local/source pserver 
        disable         = no 
    }</code></pre></td></tr></tbody></table><br /><br />其中server_args一个参数指定了源代码库路径，一个指定了服务器使用密码认证方式。 <br />第二，要确认/etc/services文件中，有cvspserver关键词，并分配了端口，如：cvspserver 2401/tcp。 <br />第三，重新启动xinetd服务，cvs服务就可以用了。 <br /><br />（3）测试。假定cvs服务器在192.168.0.205上，系统上有一个用户cvs。登陆另一台linxu机器，执行下列命令可以完成测试： <br />$export CVSROOT=:pserver:cvs@192.168.0.205:2401/usr/local/source <br />$cvs login <br />输入密码，没有出错提示表示登陆成功。 <br /><br />如果想在一个linux系统上建多个源代码库，分别提供cvs服务。重复上面步骤就可以了。 <br /><br />第一步时候要注意使用一个不同路径。 <br />第二步放到xinetd系统服务中稍微麻烦点。/etc/xinetd.d目录下要生成一个新的任务配置文件，例如cvspserver1，文件中service名称一定要区分第一个，例如service cvspserver1，server_args做相应变动。还要在/etc/services文件中，加入新的服务端口号，例如：cvspserver1 2402/tcp。重新启动xinetd服务. <br /><br />第三步测试时候，可以这样设定： <br />$export CVSROOT=:pserver:cvs@192.168.0.205:2402/usr/local/source1 <br /><br />cvs作为并行版本控制系统，多用户读写是需要的。但有时候希望有些用户只能check out，不能提交新代码。有时希望cvs上的某些用户不能check out一些代码，例如和另一个开发组共用一个CVS，希望另一个组的成员不能check out自己组代码。 <br /><br />cvs服务器有一套自己的用户认证机制，我使用时候没采用，而是使用了系统上用户直接作为cvs服务器用户，采用linux组、用户权限实现了这样的功能。 <br /><br />举例说明，在linxu系统上模拟实际两个开发组a、b，分别有用户a-user1,a-user2,b-user1,b-user2。 <br /><br />模块a-source，希望a组成员都可以读写，b组成员没有任何权限。可以使用以下系列命令： <br />#chown -R a-user1 a-source <br />#chgrp -R a a-source <br />#chmod -R 770 a-source <br /><br />如果希望模块a-source,只有a-user1可以写，同组其它用户可以读，b组成员没有任何权限，把chmod命令改成-R 750就行了。 <br /><br />必须说明的，cvs中默认一个用户checkout代码时候，会在当前模块下生成一个锁文件，如果这个用户对当前模块没有写权限，读是不可能的。配合上面的权限设置，必须改一下cvs服务器配置。改成不在当前模块目录下生成锁文件，把锁文件集中到一个所有用户都有读写权限的目录。修改配置文件CVSROOT/config： <br /># Put CVS lock files in this directory rather than directly in the repository. <br />#LockDir=/var/lock/cvs<br />把LockDir设上就可以了。 <br />]]></description> 
<dc:subject><![CDATA[linux/unix]]></dc:subject> 
<dc:creator><![CDATA[地狱男爵]]></dc:creator> 
<dc:date>2005-09-21T18:11:46Z</dc:date> 
</item> 
<item rdf:about="http://hellboys.bokee.com/2993055.html"> 
<title><![CDATA[Linux 下再配CVS服务器建立和权限配置]]></title> 
<link>http://hellboys.bokee.com/2993055.html</link> 
<description><![CDATA[<p>来源：chinaunix</p><p>建立和配置操作都是在Redhat Linux8.0上做的。系统带的CVS可执行程序在/usr/bin下面，版本信息为：Concurrent Versions System (CVS) 1.11.2 (client/server)。系统带的这个cvs可执行程序既可以当客户端使用，也可以用来建立cvs源代码库服务器。 <br /><br />建立一个源代码库主要有以下几步： <br /><br />（1）初始化cvs服务器环境。 <br />#cvs -d/usr/local/source init <br />之后进入/usr/local/source，可以看到有一个目录CVSROOT, 下面是初始化后的CVS服务器配置文件。暂且保持不动。 <br /><br />（2）把cvs服务放到xinetd系统服务中。 <br />首先在/etc/xinetd.d目录下生成任务配置文件cvspserver，文件名称可以随便用。 <br /><br />其中内容大致如下： <br /></p><table cellspacing="0" cellpadding="5" width="100%" bgcolor="#cccccc" border="1"><tbody><tr><td><pre><code>service cvspserver 
    {  
        flags           = REUSE 
        socket_type     = stream 
        wait            = no 
        user            = root  
        protocol        = tcp 
        server          = /usr/bin/cvs 
        server_args     = -f --allow-root=/usr/local/source pserver 
        disable         = no 
    }</code></pre></td></tr></tbody></table><br /><br />其中server_args一个参数指定了源代码库路径，一个指定了服务器使用密码认证方式。 <br />第二，要确认/etc/services文件中，有cvspserver关键词，并分配了端口，如：cvspserver 2401/tcp。 <br />第三，重新启动xinetd服务，cvs服务就可以用了。 <br /><br />（3）测试。假定cvs服务器在192.168.0.205上，系统上有一个用户cvs。登陆另一台linxu机器，执行下列命令可以完成测试： <br />$export CVSROOT=:pserver:cvs@192.168.0.205:2401/usr/local/source <br />$cvs login <br />输入密码，没有出错提示表示登陆成功。 <br /><br />如果想在一个linux系统上建多个源代码库，分别提供cvs服务。重复上面步骤就可以了。 <br /><br />第一步时候要注意使用一个不同路径。 <br />第二步放到xinetd系统服务中稍微麻烦点。/etc/xinetd.d目录下要生成一个新的任务配置文件，例如cvspserver1，文件中service名称一定要区分第一个，例如service cvspserver1，server_args做相应变动。还要在/etc/services文件中，加入新的服务端口号，例如：cvspserver1 2402/tcp。重新启动xinetd服务. <br /><br />第三步测试时候，可以这样设定： <br />$export CVSROOT=:pserver:cvs@192.168.0.205:2402/usr/local/source1 <br /><br />cvs作为并行版本控制系统，多用户读写是需要的。但有时候希望有些用户只能check out，不能提交新代码。有时希望cvs上的某些用户不能check out一些代码，例如和另一个开发组共用一个CVS，希望另一个组的成员不能check out自己组代码。 <br /><br />cvs服务器有一套自己的用户认证机制，我使用时候没采用，而是使用了系统上用户直接作为cvs服务器用户，采用linux组、用户权限实现了这样的功能。 <br /><br />举例说明，在linxu系统上模拟实际两个开发组a、b，分别有用户a-user1,a-user2,b-user1,b-user2。 <br /><br />模块a-source，希望a组成员都可以读写，b组成员没有任何权限。可以使用以下系列命令： <br />#chown -R a-user1 a-source <br />#chgrp -R a a-source <br />#chmod -R 770 a-source <br /><br />如果希望模块a-source,只有a-user1可以写，同组其它用户可以读，b组成员没有任何权限，把chmod命令改成-R 750就行了。 <br /><br />必须说明的，cvs中默认一个用户checkout代码时候，会在当前模块下生成一个锁文件，如果这个用户对当前模块没有写权限，读是不可能的。配合上面的权限设置，必须改一下cvs服务器配置。改成不在当前模块目录下生成锁文件，把锁文件集中到一个所有用户都有读写权限的目录。修改配置文件CVSROOT/config： <br /># Put CVS lock files in this directory rather than directly in the repository. <br />#LockDir=/var/lock/cvs<br />把LockDir设上就可以了。 <br />]]></description> 
<dc:subject><![CDATA[linux/unix]]></dc:subject> 
<dc:creator><![CDATA[地狱男爵]]></dc:creator> 
<dc:date>2005-09-21T18:11:07Z</dc:date> 
</item> 
<item rdf:about="http://hellboys.bokee.com/2862542.html"> 
<title><![CDATA[不如一起有爱情..]]></title> 
<link>http://hellboys.bokee.com/2862542.html</link> 
<description><![CDATA[<p>我的名字叫沈玫绮，朋友们都简单的叫我玫玫。我是一个很阳光、很健康的女孩。<br />My name is Shen-Mai-Ji. My friends just call me MEI-MEI. I am a happy girl who is full of life.</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561484050.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561484050.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />毕业后，我来到北京，开始了自己的工作和生活。<br />After I graduated, I came to Beijing, began working and started a whole new life.</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561493620.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561493620.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />繁忙的工作让我感觉到了生活的不易，还有就是我一个人在夜晚的寂寞和落寞。<br />I find that a working life is not easy, and it is also lonely at times, especially when I am alone at night.</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561479945.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561479945.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />那是一个周二的上午，办公室来了一个新的同事，她叫方若圆。<br />It is a Tuesday morning when a new colleague start at my office. Her name is Fong-Raw-Yuen.</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561438549.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561438549.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />方是一个很健谈很有朝气的女孩，对待工作和生活，她无比热情和投入。<br />I find she is a good conversationalist, very lively. She never takes life too seriously, always looking on the positive side of situations.</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561498857.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561498857.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />同为异乡客，我们很自然地走到了一起。<br />As strangers in Beijing, although we came from different cities, we become close due to the similar situation we are now in.</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561448402.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561448402.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />一个多月的相处，使我注意到她对我朋友般地好，我也开始慢慢喜欢上了她。<br />After we have been close friends for a month, I realize Fong is always very nice to me, and I begin to really like having her as my best friend.</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561444255.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561444255.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />我开始不自觉地为她做些事情，没有别的奢求，只是愿意对她好，想做她最好的朋友。<br />I want to tread her well as my friend unconditionally.</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561422384.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561422384.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />周末的时候，我们会骑车看北京的胡同。去爬香山，还在动物园给猴子起外号。<br />At weekends we often ride bicycles around the alley ways of Beijing, climb Shi-ang Mountain or even visit the zoo to give the monkeys nick-names.</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561492907.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561492907.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />我们把工作处理得井井有条，在单位，我们是相互帮助的好姐妹。<br />we work hard in the office, helping each other like sisters,</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561456823.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561456823.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />后来，我们一起搬出单位宿舍，在北京海淀区租了一套两居室的楼房。<br />We soon left our accommodations provided by work, and rent a 2 bedroom flat in Huai-diam District</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561411114.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561411114.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />方住在靠阳光的那间，我住在背阳光的那间。我们觉得很温暖。<br />Fong’s room faces daylight but mine is always in shadow. However we both feel warmth from our friendship.</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561489463.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561489463.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />我们在客厅里看电视，写文字，还常常上网和朋友们聊天。<br />We often write our thoughts down, watch TV or chat to others on the internet</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561460594.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561460594.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />最幸福的是晚上下班，我们一起去超市买蔬菜和食品。<br />Our happiest moment of the day would be after work when we go to the super market to buy things for tea.</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561451522.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561451522.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />我喜欢吃芹菜腐竹，方喜欢吃小鸡炖蘑菇。我们两个人一般要做3个或者4个菜。<br />I know Fong would like to eat different food from me, so we often cook 3 or 4 dishes for dinner.</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561447799.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561447799.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />方的英语都过了6级，而我却还停留在初级的水平。她就找时间给我补习单词和口语。<br />My English is very basic, but she has passed level 6, so I could practice my English with her</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561428900.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561428900.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />隔壁门口经常放着一双球鞋，门永远是关的，只是经常在夜里听到梁静茹的《勇气》：只要你一个眼神肯定，我的爱就有意义……<br />Our neighbor’s door is always closed, with a pair of trainers outside. We hear the music from the room, which is sang by a famous pop star, the lyrics described a love story.</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561475343.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561475343.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />感情就是这样，说不出原因。我和方互相喜欢，愿意在一起。<br />I and Fong think that the song describes the emotions we both feel, but there is no reason for us to feel that way.</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561430960.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561430960.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />我们终究没有逃开感情的网，虽然明知没有结果。<br />We can not deny our mutual attraction any more, but we know nothing would come of it.</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561461013.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561461013.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />仿佛世间只有我们两个，幸福地过着属于我们俩的日子。<br />The happiness is ours and it feel like the world belonged to us.</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561466130.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561466130.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />方要考研究生，她说那一直是她的一个梦想。我劝她不要上班了，在家里专心复习。<br />Fong’s dream is to take the ‘Master course’, I persuade her to quit work and follow her dream.</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561467866.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561467866.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />方就真的不再上班了，在家里看书。我每天下班她都做好了晚饭等我。<br />She stays at home each day studying and preparing food for when I get home from work.</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561448546.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561448546.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />有天快下班的时候，方约我晚上去吃酸汤鱼。饭后她送我一只可爱的小熊，我才知道今天是我的生日。<br />One day after work, Fong ask me to have dinner outside. After dinner she gives me a nice teddy bear and I realize it is my birthday today.</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561440636.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561440636.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />因有了方的关心，让我觉得这个大都市是我的。我抱住她流着自己的眼泪。<br />Because I feel so secure in her presence, I hug her and cry. I feel the whole city belonged to me.</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561411190.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561411190.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />晚上睡觉我都抱着小熊，我知道，我已经找到了归属的感觉。<br />Every night when I cuddle the teddy bear, I feel that I have found the place where I belong.</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561471833.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561471833.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />方的妈妈来北京了。吃着从家乡给我们带来的咸水鸭想起了我的妈妈，我笑笑也管方妈妈叫妈妈。<br />Fong’s Mother come to visit us in Beijing, she bring some traditional food from their hometown. She reminds me of my Mum. I even begin to call her ‘Mum’.</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561435845.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561435845.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />方妈妈给我讲了很多方的童年趣事，方小的时候和我一样，也玩过过家家游戏。<br />Her Mum tells me lots of interesting stories about when Fong was younger. She would play ‘house’</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561480927.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561480927.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />方妈妈就这一个宝贝女儿，她希望方早点结婚成家，她好来抱外孙。我和方相视一笑，都低下了头。<br />Fong is the only child in her family. Her Mum wants her to marry earlier, so she could be able to see</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561483621.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561483621.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />其实很多时候我也在想，我和方的感情到底是什么？<br />We do not know what our feeling for each other really is.</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561414473.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561414473.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />方妈妈走后，我问方，我们这样会有结果吗？我们刚刚开始，还是分开吧。<br />After Fong’s Mum left, I suggest that we should split apart because I am not sure about our future.</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561420763.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561420763.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />门里门外，我们俩都泣不成声。<br />We stand either side of the door crying heavily</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561471226.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561471226.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />我没有告诉方，周一上班的时候我带了很多的衣服，我准备回公司去住。<br />I take my belongings back to work on the following Monday, and plan to stay at the arranged accommodation, without telling Fong.</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561425254.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561425254.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />夜晚还是来了。我想方，辗转反侧。<br />The night finally comes, but I can not sleep. I am tossing and turning on the bed, thinking about Fong.</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561487953.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561487953.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />我决定给方打电话。在号码还没有拨完的时候，我收到了方发来的短信：玫玫，回来吧，我想你~-~。<br />I decide to call Fong, but receive a text message form her as I was dialing. It said that she miss me and ask me to come back to hers.</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561458710.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561458710.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />我擦下眼泪拿起包就往外跑，全然不顾同事的劝阻和莫名的表情。<br />I grab my clothes and things and run out the office. My colleagues try to stop me from going, but I ignore their confused expressions and leave.</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561446809.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561446809.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />道理我们都明白，但感情却是实实在在的。<br />We know it won’t be accepted, but our feeling is too strong</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561432991.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561432991.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />我的英语进步很快，方说是因为我聪明。我打她一下说，那当然了。<br />Fong say my English really improved because I am very clever. I laugh and playfully tap her.</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561473184.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561473184.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />打开日记本，这里面装的都是我和方的昨天。我认真记录着今天，也憧憬着我们的明天。<br />Looking at my journal, I read the past time shared between us, and write what I feel now, and ponder our future</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561463393.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561463393.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />天冷了。冬天还是来了。<br />The weather is getting colder as winter draws closer.</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561421974.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561421974.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />方是南方人，我怕她承受不了北京冬天的冷，去商场买了毛线，我要织件毛衣给她穿。<br />Fong is from southern China, so I worry that the weather in Beijing will be too cold for her. I go to buy wool to knit her a jumper.</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561485788.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561485788.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />最近单位老是加班，回到家都很晚了。每次进家总是方在看书，饭桌上放着做好的饭菜。我的心里有种莫名的感动。<br />Recently, I work at lot of OT, so I get home late, but I find Fong is studying and the food is ready. I fall touch by this.</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561439410.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561439410.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />毛衣织好了。方穿在身上高兴得什么似的，不停地照着镜子。<br />I finish the jumper for Fong. She is very happy and wears it in front of the mirror.</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561465942.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561465942.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />有天夜里我醒来，走到方的屋子，她睡着的姿势完全像个孩子，我轻轻地吻了一下她的额，我突然觉得，我们俩是那么的平凡和幸福啊！<br />At midnight one night I awake, and go into Fong’s room. She is sleeping like a baby; I kiss her forehead and realized how happy we are.</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561477793.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561477793.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />今天晚上有流星雨。我站在楼顶看流星，我想让流星等一等，我要许个愿，可是等一等就什么也看不见了。<br />At night there is a meteor shower. I stand at the top of the building to watch them, I hope the shooting stars could continue long enough for me to make a wish, but they never stop.</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561479518.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561479518.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />方来接我下班，雨伞下我搂着她的肩膀。看着路边行人望过来的目光，我赶紧松开了手。<br />Fong pick me up from work. I get under her umbrella ant put my arm around her. When I see people’s reactions to this, I put my arm back down.</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561486288.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561486288.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />方考上了研究生，真为她高兴。周末我拉着她一起去逛街。<br />We find out that Fong have got on to the ‘master course’. I am very proud and happy for her. We go shopping together at the weekend to celebrate.</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561447015.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561447015.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />夏天真好，蝉儿欢跃，街上到处都是漂亮的男生和女生。<br />The summer is come, and the cicada bug’s are singing loudly. The streets are filled with good looking boys and girls.</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561425077.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561425077.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />方经常给我讲她在学校的故事，还有排队去食堂打饭和有个连普通话都说不好的同学。<br />Fong tell me funny stories about her friends in university, who she chat in the canteen with. Some of them have strong regional accents, even sometimes she can not understand them.</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561411031.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561411031.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />上楼时看见一个男生手里拿个篮球匆匆忙忙地往下跑。我打开房门，方还没有回来。<br />One day, when I go into our apartment, I see a boy past me in the opposite direction carrying a basketball. I soon find that Fong is not in.</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561462177.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561462177.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />方最近总是回来很晚。我边看电视边收拾房间<br />Often lately, Fong has been coming home late. I have the television on while I tidy up.</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561425961.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561425961.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />慢慢地我发现，方说话的时候经常提到广这个名字。<br />After a few days I realize Fong have mentioned a boy called Gu-ang several times.</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561452229.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561452229.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />广是她们学校别的系的研究生，人很好。方说这话看我的时候，眼神有点游离。<br />Gu-ang is in a different department of Fong in university, he is always nice to people. When Fong talk about him, she avoids eye contact with me.</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561455907.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561455907.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />我披件衣服在自己身上，我觉得有点冷，心里。<br />Even though I throw on the clothes, I still felt cold in my heart.</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561471917.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561471917.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />今年的苹果不甜。望着远处的香山，叶子应该还没有红吧。<br />This year’s apples do not taste as good. I look into the distance at the red leaves on Shi-ang mountain should not be that colour yet</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561455462.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561455462.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />去学校看方，她和几个同学在操场上打羽毛球，还有个男生，我想就是广吧。<br />I visit Fong at her university and see her playing badminton with her friends. She is also whit a boy. I realize he must be Gu-ang.</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561420336.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561420336.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />傍晚，我和方去肯德基吃东西。<br />I and Fong go to KFC for dinner in the evening</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561451685.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561451685.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />我讲着未来也说些过去。方望过来的目光，让我假装自己做了个深呼吸。<br />We discuss the past and the future of us, she seems different from before, and this make me feel cold inside.</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561425895.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561425895.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />眼前的方模糊与清晰并存。模糊的是身影，清晰的是感觉。<br />I can not see Fong clearly, but her coldness towards me is easy to see.</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561424121.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561424121.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />我煮好她喜欢吃的小鸡炖蘑菇。我们专心地吃，没有一句对话。其实，这菜的盐放多了，非常咸，可我们却吃得干干净净...<br />I cook her favorite food. We ate without talking. Actually, I put too much salt in, but we still eat it all.</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561475232.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch/Upfiles/200561475232.jpg" onload="function anonymous()
{
function anonymous()
{
if(this.width>screen.width-333)this.width=screen.width-333
}
}" border="0" /></a></p><p><br />夜晚是美丽伤感的。天黑黑，心灰灰。<br />The night is beautiful but sad. It is black, but my heart feels darker.</p><br /><p align="center"><a onfocus="function anonymous()
{
function anonymous()
{
this.blur()
}
}" href="http://www.waynet.cn/conch/Upfiles/200561412676.jpg" target="_blank"><img alt="按此在新窗口浏览图片" src="http://www.waynet.cn/conch