﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Thinking in XiaoQiang-文章分类-J2EE</title><link>http://www.blogjava.net/uiiang/category/4177.html</link><description>世人皆有悲哀，只有你不明白</description><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 11:43:42 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 11:43:42 GMT</pubDate><ttl>60</ttl><item><title>css模板</title><link>http://www.blogjava.net/uiiang/articles/78864.html</link><dc:creator>小强</dc:creator><author>小强</author><pubDate>Fri, 03 Nov 2006 02:23:00 GMT</pubDate><guid>http://www.blogjava.net/uiiang/articles/78864.html</guid><wfw:comment>http://www.blogjava.net/uiiang/comments/78864.html</wfw:comment><comments>http://www.blogjava.net/uiiang/articles/78864.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/uiiang/comments/commentRss/78864.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/uiiang/services/trackbacks/78864.html</trackback:ping><description><![CDATA[css模板集1：<a href="http://www.csswebs.org/">http://www.csswebs.org/</a><br />css模板集2：<a href="http://tools.i-use.it/index.aspx">http://tools.i-use.it/index.aspx</a><br />css模板集3：<a href="http://www.intensivstation.ch/en/templates/">http://www.intensivstation.ch/en/templates/</a><br />css例子 <a href="http://qjjerry.bokee.com/5236112.html">http://qjjerry.bokee.com/5236112.html</a><img src ="http://www.blogjava.net/uiiang/aggbug/78864.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/uiiang/" target="_blank">小强</a> 2006-11-03 10:23 <a href="http://www.blogjava.net/uiiang/articles/78864.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>prototype.js开发者手册</title><link>http://www.blogjava.net/uiiang/articles/78486.html</link><dc:creator>小强</dc:creator><author>小强</author><pubDate>Wed, 01 Nov 2006 08:04:00 GMT</pubDate><guid>http://www.blogjava.net/uiiang/articles/78486.html</guid><wfw:comment>http://www.blogjava.net/uiiang/comments/78486.html</wfw:comment><comments>http://www.blogjava.net/uiiang/articles/78486.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/uiiang/comments/commentRss/78486.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/uiiang/services/trackbacks/78486.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 转自http://www.cnblogs.com/thinhunan/archive/2006/04/01/DeveloperNotesForPrototype.html到一个很好的东西在国内没有被很多人使用起来，实在是不爽，所以花了很大功夫把这个手册翻译成中文，由于这篇文章很长，所以，翻译的工作量很大而且有些地方英文版也没有说清楚，虽得查看源代码，好在不是坚持做完了，大家鼓励下啊！^o^prot...&nbsp;&nbsp;<a href='http://www.blogjava.net/uiiang/articles/78486.html'>阅读全文</a><img src ="http://www.blogjava.net/uiiang/aggbug/78486.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/uiiang/" target="_blank">小强</a> 2006-11-01 16:04 <a href="http://www.blogjava.net/uiiang/articles/78486.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Weblogic服务器性能调优</title><link>http://www.blogjava.net/uiiang/articles/26083.html</link><dc:creator>小强</dc:creator><author>小强</author><pubDate>Fri, 30 Dec 2005 08:27:00 GMT</pubDate><guid>http://www.blogjava.net/uiiang/articles/26083.html</guid><wfw:comment>http://www.blogjava.net/uiiang/comments/26083.html</wfw:comment><comments>http://www.blogjava.net/uiiang/articles/26083.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/uiiang/comments/commentRss/26083.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/uiiang/services/trackbacks/26083.html</trackback:ping><description><![CDATA[

<p class="MsoNormal" style="margin: 13pt 0cm; text-align: left;" align="left"><a name="_Toc123696092"><b><span style="font-size: 18pt; font-family: 宋体;" lang="EN-US">Weblogic</span></b></a><span style=""></span><b><span style="font-size: 18pt; font-family: 宋体;">服务器性能调优<span lang="EN-US"><o:p></o:p></span></span></b></p>

<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 12pt; font-family: 宋体;">注：在下面做的介绍都是以</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">Weblogic8.1</span><span style="font-size: 12pt; font-family: 宋体;">为例的，其它版本的</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">Weblogic</span><span style="font-size: 12pt; font-family: 宋体;">可能会有些许不同。<span lang="EN-US"><o:p></o:p></span></span></p>

<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1) </span><span style="font-size: 12pt; font-family: 宋体;">设置</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">JAVA</span><span style="font-size: 12pt; font-family: 宋体;">参数；<span lang="EN-US"><o:p></o:p></span></span></p>

<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a) </span><span style="font-size: 12pt; font-family: 宋体;">编辑</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">Weblogic Server</span><span style="font-size: 12pt; font-family: 宋体;">启动脚本文件；<span lang="EN-US"><o:p></o:p></span></span></p>

<p class="MsoNormal" style="margin-left: 42pt; text-align: left; text-indent: -21pt;" align="left"><span style="font-size: 7pt; font-family: 宋体;" lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">BEA_HOME\user_projects\domains\domain-name\startWebLogic.cmd(startWebLogic.sh
on Unix)</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"><o:p></o:p></span></p>

<p class="MsoNormal" style="margin-left: 42pt; text-align: left; text-indent: -21pt;" align="left"><span style="font-size: 7pt; font-family: 宋体;" lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">BEA_HOME\user_projects\domains\domain-name\startManagedWebLogic.cmd(startManagedWebLogic.sh
on Unix)</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"><o:p></o:p></span></p>

<p class="MsoNormal" style="margin-left: 21pt; text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">b) </span><span style="font-size: 12pt; font-family: 宋体;">编辑</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">set JAVA_OPTIONS</span><span style="font-size: 12pt; font-family: 宋体;">命令，如：</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">set JAVA_OPTIONS=-Xms256m –Xmx256m</span><span style="font-size: 12pt; font-family: 宋体;">；<span lang="EN-US"><o:p></o:p></span></span></p>

<p class="MsoNormal" style="margin-left: 21pt; text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">c) </span><span style="font-size: 12pt; font-family: 宋体;">保存，重启即可。<span lang="EN-US"><o:p></o:p></span></span></p>

<p class="MsoNormal" style="margin-left: 21pt; text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体; color: blue;">注：在</span><span style="font-size: 12pt; font-family: 宋体; color: blue;" lang="EN-US">WebLogic</span><span style="font-size: 12pt; font-family: 宋体; color: blue;">中，为了获得更好的性能，</span><span style="font-size: 12pt; font-family: 宋体; color: blue;" lang="EN-US">BEA</span><span style="font-size: 12pt; font-family: 宋体; color: blue;">公司推荐最小</span><span style="font-size: 12pt; font-family: 宋体; color: blue;" lang="EN-US">Java</span><span style="font-size: 12pt; font-family: 宋体; color: blue;">堆等于最大</span><span style="font-size: 12pt; font-family: 宋体; color: blue;" lang="EN-US">Java</span><span style="font-size: 12pt; font-family: 宋体; color: blue;">堆。</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"><o:p></o:p></span></p>

<p class="MsoNormal" style="margin-left: 21pt; text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">2) </span><span style="font-size: 12pt; font-family: 宋体;">开发模式</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"> vs. </span><span style="font-size: 12pt; font-family: 宋体;">产品模式；<span lang="EN-US"><o:p></o:p></span></span></p>

<p class="MsoNormal" style="text-align: left; text-indent: 21pt;" align="left"><span style="font-size: 12pt; font-family: 宋体;">开发模式和产品模式的一些参数的默认值不同，可能会对性能造成影响，下面是对性能有影响的参数列表：<span lang="EN-US"><o:p></o:p></span></span></p>

<table class="MsoNormalTable" style="border-collapse: collapse;" border="0" cellpadding="0" cellspacing="0">
 <tbody><tr style="">
  <td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 194.4pt;" valign="top" width="259">
  <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;">参数<span lang="EN-US"><o:p></o:p></span></span></p>
  </td>
  <td style="border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; width: 134.05pt;" valign="top" width="179">
  <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;">开发模式默认值<span lang="EN-US"><o:p></o:p></span></span></p>
  </td>
  <td style="border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; width: 164.25pt;" valign="top" width="219">
  <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;">产品模式默认值<span lang="EN-US"><o:p></o:p></span></span></p>
  </td>
 </tr>
 <tr style="">
  <td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 194.4pt;" valign="top" width="259">
  <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">Execute Queue: Thread Count</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"><o:p></o:p></span></p>
  </td>
  <td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 134.05pt;" valign="top" width="179">
  <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">15 threads</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"><o:p></o:p></span></p>
  </td>
  <td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 164.25pt;" valign="top" width="219">
  <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">25 threads</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"><o:p></o:p></span></p>
  </td>
 </tr>
 <tr style="">
  <td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 194.4pt;" valign="top" width="259">
  <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">JDBC Connection Pool: MaxCapacity</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"><o:p></o:p></span></p>
  </td>
  <td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 134.05pt;" valign="top" width="179">
  <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">15 connnections</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"><o:p></o:p></span></p>
  </td>
  <td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 164.25pt;" valign="top" width="219">
  <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">25 connections</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"><o:p></o:p></span></p>
  </td>
 </tr>
</tbody></table>

<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 12pt; font-family: 宋体;">通过启动管理控制台，在域（如：</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">mydomain</span><span style="font-size: 12pt; font-family: 宋体;">）</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">&gt; </span><span style="font-size: 12pt; font-family: 宋体;">配置</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"> &gt; </span><span style="font-size: 12pt; font-family: 宋体;">常规选择产品模式。<span lang="EN-US"><o:p></o:p></span></span></p>

<p class="MsoNormal" style="margin-left: 21pt; text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">3) </span><span style="font-size: 12pt; font-family: 宋体;">尽量开启本地</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">I/O</span><span style="font-size: 12pt; font-family: 宋体;">；<span lang="EN-US"><o:p></o:p></span></span></p>

<p class="MsoNormal" style="margin-left: 21pt; text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;">通过启动管理控制台，在域（如：</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">mydomain</span><span style="font-size: 12pt; font-family: 宋体;">）</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">&gt; </span><span style="font-size: 12pt; font-family: 宋体;">服务器</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"> &gt; server</span><span style="font-size: 12pt; font-family: 宋体;">实例（如：</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">myserver</span><span style="font-size: 12pt; font-family: 宋体;">）</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">&gt; </span><span style="font-size: 12pt; font-family: 宋体;">配置</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"> &gt; </span><span style="font-size: 12pt; font-family: 宋体;">调整选择启用本地</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">I/O</span><span style="font-size: 12pt; font-family: 宋体;">。<span lang="EN-US"><o:p></o:p></span></span></p>

<p class="MsoNormal" style="margin-left: 21pt; text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体; color: blue;">注：此值也可通过手动的修改</span><span style="font-size: 12pt; font-family: 宋体; color: blue;" lang="EN-US">config.xml</span><span style="font-size: 12pt; font-family: 宋体; color: blue;">配置文件。</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"><o:p></o:p></span></p>

<p class="MsoNormal" style="margin-left: 21pt; text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">4) </span><span style="font-size: 12pt; font-family: 宋体;">调优执行队列线程；<span lang="EN-US"><o:p></o:p></span></span></p>

<p class="MsoNormal" style="margin-left: 21pt; text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">a) </span><span style="font-size: 12pt; font-family: 宋体;">修改默认执行线程数<span lang="EN-US"><o:p></o:p></span></span></p>

<p class="MsoNormal" style="text-align: left; text-indent: 21pt;" align="left"><span style="font-size: 12pt; font-family: 宋体;">在这里，执行队列的线程数表示执行队列能够同时执行的操作的数量。但此值不是设的越大越好，应该恰到好处的去设置它，太小了，执行队列中将会积累很多待处理的任务，太大了，则会消耗大量的系统资源从而影响整体的性能。在产品模式下默认为</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">25</span><span style="font-size: 12pt; font-family: 宋体;">个执行线程。<span lang="EN-US"><o:p></o:p></span></span></p>

<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;">为了设置理想的执行队列的线程数，我们可以启动管理控制台，在域（如：</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">mydomain</span><span style="font-size: 12pt; font-family: 宋体;">）</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">&gt; </span><span style="font-size: 12pt; font-family: 宋体;">服务器</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"> &gt; server</span><span style="font-size: 12pt; font-family: 宋体;">实例（如：</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">myserver</span><span style="font-size: 12pt; font-family: 宋体;">）</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">&gt; </span><span style="font-size: 12pt; font-family: 宋体;">监视</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"> &gt; </span><span style="font-size: 12pt; font-family: 宋体;">性能中监控最大负载时执行队列的吞吐量和队列中的等待请求数，据此确定理想的数值。<span lang="EN-US"><o:p></o:p></span></span></p>

<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 12pt; font-family: 宋体;">理想的默认执行线程数是由多方面的因素决定的，比如机器</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">CPU</span><span style="font-size: 12pt; font-family: 宋体;">性能、总体体系架构、</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">I/O</span><span style="font-size: 12pt; font-family: 宋体;">、操作系统的进程调度机制、</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">JVM</span><span style="font-size: 12pt; font-family: 宋体;">的线程调度机制。随着</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">CPU</span><span style="font-size: 12pt; font-family: 宋体;">个数的增加，</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">WebLogic</span><span style="font-size: 12pt; font-family: 宋体;">可以近乎线性地提高线程数。线程数越多，花费在线程切换的时间也就越多；线程数越小，</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">CPU</span><span style="font-size: 12pt; font-family: 宋体;">可能无法得到充分的利用。为获取一个理想的线程数，需要经过反复的测试。在测试中，可以以</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">25*CPU</span><span style="font-size: 12pt; font-family: 宋体;">个数为基准进行调整。当空闲线程较少，</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">CPU</span><span style="font-size: 12pt; font-family: 宋体;">利用率较低时，可以适当增加线程数的大小（每五个递增）。对于</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">PC Server</span><span style="font-size: 12pt; font-family: 宋体;">和</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">Windows 2000</span><span style="font-size: 12pt; font-family: 宋体;">，则最好每个</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">CPU</span><span style="font-size: 12pt; font-family: 宋体;">小于</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">50</span><span style="font-size: 12pt; font-family: 宋体;">个线程，以</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">CPU</span><span style="font-size: 12pt; font-family: 宋体;">利用率为</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">90%</span><span style="font-size: 12pt; font-family: 宋体;">左右为最佳。<span lang="EN-US"><o:p></o:p></span></span></p>

<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 12pt; font-family: 宋体;">通过启动管理控制台，在域（如：</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">mydomain</span><span style="font-size: 12pt; font-family: 宋体;">）</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">&gt; </span><span style="font-size: 12pt; font-family: 宋体;">服务器</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"> &gt; server</span><span style="font-size: 12pt; font-family: 宋体;">实例（如：</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">myserver</span><span style="font-size: 12pt; font-family: 宋体;">）</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">&gt; Execute Queue &gt;
weblogic.kernel.Defalt &gt; </span><span style="font-size: 12pt; font-family: 宋体;">配置中修改线程计数。<span lang="EN-US"><o:p></o:p></span></span></p>

<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b) </span><span style="font-size: 12pt; font-family: 宋体;">设定执行队列的溢出条件；<span lang="EN-US"><o:p></o:p></span></span></p>

<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Weblogic Server</span><span style="font-size: 12pt; font-family: 宋体;">提供给默认的执行队列或用户自定义的执行队列自定义溢出条件的功能，当满足此溢出条件时，服务器改变其状态为“警告”状态，并且额外的再分配一些线程去处理在队列中的请求，而达到降低队列长度的目的。<span lang="EN-US"><o:p></o:p></span></span></p>

<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 12pt; font-family: 宋体;">通过启动管理控制台，在域（如：</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">mydomain</span><span style="font-size: 12pt; font-family: 宋体;">）</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">&gt; </span><span style="font-size: 12pt; font-family: 宋体;">服务器</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"> &gt; server</span><span style="font-size: 12pt; font-family: 宋体;">实例（如：</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">myserver</span><span style="font-size: 12pt; font-family: 宋体;">）</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">&gt; Execute Queue &gt;
weblogic.kernel.Defalt &gt; </span><span style="font-size: 12pt; font-family: 宋体;">配置下面几项：<span lang="EN-US"><o:p></o:p></span></span></p>

<p class="MsoNormal" style="margin-left: 42pt; text-align: left; text-indent: -21pt;" align="left"><span style="font-size: 7pt; font-family: 宋体;" lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><span style="font-size: 12pt; font-family: 宋体;">队列长度：此值表示执行队列中可容纳的最大请求数，默认值是</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">65536</span><span style="font-size: 12pt; font-family: 宋体;">，最后不要手动改变此值。<span lang="EN-US"><o:p></o:p></span></span></p>

<p class="MsoNormal" style="margin-left: 42pt; text-align: left; text-indent: -21pt;" align="left"><span style="font-size: 7pt; font-family: 宋体;" lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 12pt; font-family: 宋体;">队列长度阈值百分比：此值表示溢出条件，在此服务器指出队列溢出之前可以达到的队列长度大小的百分比。<span lang="EN-US"><o:p></o:p></span></span></p>

<p class="MsoNormal" style="margin-left: 42pt; text-align: left; text-indent: -21pt;" align="left"><span style="font-size: 7pt; font-family: 宋体;" lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 12pt; font-family: 宋体;">线程数增加：当检测到溢出条件时，将增加到执行队列中的线程数量。如果</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">CPU</span><span style="font-size: 12pt; font-family: 宋体;">和内存不是足够的高，尽量不要改变默认值“</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">0</span><span style="font-size: 12pt; font-family: 宋体;">”。因为</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">Weblogic</span><span style="font-size: 12pt; font-family: 宋体;">一旦增加后不会自动缩减，虽然最终可能确实起到了降低请求的作用，但在将来的运行中将影响程序的性能。<span lang="EN-US"><o:p></o:p></span></span></p>

<p class="MsoNormal" style="margin-left: 42pt; text-align: left; text-indent: -21pt;" align="left"><span style="font-size: 7pt; font-family: 宋体;" lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 12pt; font-family: 宋体;">最大线程数：为了防止创建过多的线程数量，可以通过设定最大的线程数进行控制。<span lang="EN-US"><o:p></o:p></span></span></p>

<p class="MsoNormal" style="margin-left: 21pt; text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;">在实际的应用场景中，应根据具体情况适当的调整以上参数。<span lang="EN-US"><o:p></o:p></span></span></p>

<p class="MsoNormal" style="margin-left: 21pt; text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">c) </span><span style="font-size: 12pt; font-family: 宋体;">设定执行队列监测行为<span lang="EN-US"><o:p></o:p></span></span></p>

<p class="MsoNormal" style="text-align: left; text-indent: 21pt;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">Weblogic Server</span><span style="font-size: 12pt; font-family: 宋体;">能够自动监测到当一个执行线程变为“阻塞”。变为“阻塞”状态的执行线程将无法完成当前的工作，也无法再执行新请求。如果执行队列中的所有执行线程都变为“阻塞”状态，</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">Weblogic server</span><span style="font-size: 12pt; font-family: 宋体;">可能改变状态为“警告”或“严重”状态。如果</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">Weblogic server</span><span style="font-size: 12pt; font-family: 宋体;">变为“严重”状态，可以通过</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">Node Manager</span><span style="font-size: 12pt; font-family: 宋体;">来自动关闭此服务器并重新启动它。具体请参考：</span><span style="font-size: 10pt; font-family: 宋体; color: black;" lang="EN"><a href="http://e-docs.bea.com/wls/docs81/adminguide/nodemgr.html#NodeManagerCapabilities"><span style="">Node Manager Capabilities</span></a></span><span style="font-size: 10pt; font-family: 宋体; color: black;">文档。</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"><o:p></o:p></span></p>

<p class="MsoNormal" style="text-align: left; text-indent: 21pt;" align="left"><span style="font-size: 12pt; font-family: 宋体;">通过启动管理控制台，在域（如：</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">mydomain</span><span style="font-size: 12pt; font-family: 宋体;">）</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">&gt; </span><span style="font-size: 12pt; font-family: 宋体;">服务器</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"> &gt; server</span><span style="font-size: 12pt; font-family: 宋体;">实例（如：</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">myserver</span><span style="font-size: 12pt; font-family: 宋体;">）</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">&gt;</span><span style="font-size: 12pt; font-family: 宋体;">配置</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"> &gt; </span><span style="font-size: 12pt; font-family: 宋体;">调整下可配置下面几项：<span lang="EN-US"><o:p></o:p></span></span></p>

<p class="MsoNormal" style="margin-left: 42pt; text-align: left; text-indent: -21pt;" align="left"><span style="font-size: 7pt; font-family: 宋体;" lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 12pt; font-family: 宋体;">阻塞线程最长时间：在此服务器将线程诊断为阻塞线程之前，线程必须连续工作的时间长度</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">(</span><span style="font-size: 12pt; font-family: 宋体;">秒</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">)</span><span style="font-size: 12pt; font-family: 宋体;">。默认情况下，</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">WebLogic Server </span><span style="font-size: 12pt; font-family: 宋体;">认为线程在连续工作</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"> 600 </span><span style="font-size: 12pt; font-family: 宋体;">秒后成为阻塞线程。<span lang="EN-US"><o:p></o:p></span></span></p>

<p class="MsoNormal" style="margin-left: 42pt; text-align: left; text-indent: -21pt;" align="left"><span style="font-size: 7pt; font-family: 宋体;" lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><span style="font-size: 12pt; font-family: 宋体;">阻塞线程计时器间隔：</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">WebLogic Server
</span><span style="font-size: 12pt; font-family: 宋体;">定期扫描线程以查看它们是否已经连续工作了</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"> "</span><span style="font-size: 12pt; font-family: 宋体;">阻塞线程最长时间</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">" </span><span style="font-size: 12pt; font-family: 宋体;">字段中指定的时间长度的间隔时间</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">(</span><span style="font-size: 12pt; font-family: 宋体;">秒</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">)</span><span style="font-size: 12pt; font-family: 宋体;">。默认情况下，</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">WebLogic Server </span><span style="font-size: 12pt; font-family: 宋体;">将此时间间隔设置为</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"> 600 </span><span style="font-size: 12pt; font-family: 宋体;">秒。<span lang="EN-US"><o:p></o:p></span></span></p>

<p class="MsoNormal" style="margin-left: 21pt; text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">5) </span><span style="font-size: 12pt; font-family: 宋体;">调优</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">TCP</span><span style="font-size: 12pt; font-family: 宋体;">连接缓存数；<span lang="EN-US"><o:p></o:p></span></span></p>

<p class="MsoNormal" style="text-align: left; text-indent: 21pt;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">WebLogic Server</span><span style="font-size: 12pt; font-family: 宋体;">用</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">Accept Backlog</span><span style="font-size: 12pt; font-family: 宋体;">参数规定服务器向操作系统请求的队列大小，默认值为</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">50</span><span style="font-size: 12pt; font-family: 宋体;">。当系统重载负荷时</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">,</span><span style="font-size: 12pt; font-family: 宋体;">这个值可能过小</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">,</span><span style="font-size: 12pt; font-family: 宋体;">日志中报</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">Connection Refused,</span><span style="font-size: 12pt; font-family: 宋体;">导致有效连接请求遭到拒绝</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">,</span><span style="font-size: 12pt; font-family: 宋体;">此时可以提高</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">Accept Backlog 25%</span><span style="font-size: 12pt; font-family: 宋体;">直到连接拒绝错误消失。对于</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">Portal</span><span style="font-size: 12pt; font-family: 宋体;">类型的应用</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">,</span><span style="font-size: 12pt; font-family: 宋体;">默认值往往是不够的。</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">Login Timeout</span><span style="font-size: 12pt; font-family: 宋体;">和</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">SSL Login Timeout</span><span style="font-size: 12pt; font-family: 宋体;">参数表示普通连接和</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">SSL</span><span style="font-size: 12pt; font-family: 宋体;">连接的超时时间</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">,</span><span style="font-size: 12pt; font-family: 宋体;">如果客户连接被服务器中断或者</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">SSL</span><span style="font-size: 12pt; font-family: 宋体;">容量大</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">,</span><span style="font-size: 12pt; font-family: 宋体;">可以尝试增加该值。<span lang="EN-US"><o:p></o:p></span></span></p>

<p class="MsoNormal" style="text-align: left; text-indent: 21pt;" align="left"><span style="font-size: 12pt; font-family: 宋体;">通过启动管理控制台，在域（如：</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">mydomain</span><span style="font-size: 12pt; font-family: 宋体;">）</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">&gt; </span><span style="font-size: 12pt; font-family: 宋体;">服务器</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"> &gt; server</span><span style="font-size: 12pt; font-family: 宋体;">实例（如：</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">myserver</span><span style="font-size: 12pt; font-family: 宋体;">）</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">&gt;</span><span style="font-size: 12pt; font-family: 宋体;">配置</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"> &gt; </span><span style="font-size: 12pt; font-family: 宋体;">调整下可配置“接受预备连接”。<span lang="EN-US"><o:p></o:p></span></span></p>

<p class="MsoNormal" style="margin-left: 21pt; text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">6) </span><span style="font-size: 12pt; font-family: 宋体;">改变</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">Java</span><span style="font-size: 12pt; font-family: 宋体;">编译器；<span lang="EN-US"><o:p></o:p></span></span></p>

<p class="MsoNormal" style="text-align: left; text-indent: 21pt;" align="left"><span style="font-size: 12pt; font-family: 宋体;">标准的</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">Java</span><span style="font-size: 12pt; font-family: 宋体;">编译器是</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">javac</span><span style="font-size: 12pt; font-family: 宋体;">，但编译</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">JSP servlets</span><span style="font-size: 12pt; font-family: 宋体;">速度太慢，为了提高编译速度，可以使用</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">sj</span><span style="font-size: 12pt; font-family: 宋体;">或</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">jikes</span><span style="font-size: 12pt; font-family: 宋体;">编译器取代</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">javac</span><span style="font-size: 12pt; font-family: 宋体;">编译器。下面说说更改</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">Java</span><span style="font-size: 12pt; font-family: 宋体;">编译器：<span lang="EN-US"><o:p></o:p></span></span></p>

<p class="MsoNormal" style="text-align: left; text-indent: 21pt;" align="left"><span style="font-size: 12pt; font-family: 宋体;">通过启动管理控制台，在域（如：</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">mydomain</span><span style="font-size: 12pt; font-family: 宋体;">）</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">&gt; </span><span style="font-size: 12pt; font-family: 宋体;">服务器</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"> &gt; server</span><span style="font-size: 12pt; font-family: 宋体;">实例（如：</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">myserver</span><span style="font-size: 12pt; font-family: 宋体;">）</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">&gt;</span><span style="font-size: 12pt; font-family: 宋体;">配置</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"> &gt; </span><span style="font-size: 12pt; font-family: 宋体;">常规下改变</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">Java </span><span style="font-size: 12pt; font-family: 宋体;">编译器</span><span style="font-size: 12pt; font-family: 宋体;">，默认为<span lang="EN-US">javac</span></span><span style="font-size: 12pt; font-family: 宋体;">。输入完整路径，如：</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">c:\visualcafe31\bin\sj.exe</span><span style="font-size: 12pt; font-family: 宋体;">。然后打开高级选项，在预规划到类路径填写</span><span style="font-size: 12pt; font-family: 宋体;">编译<span lang="EN-US"> Java </span></span><span style="font-size: 12pt; font-family: 宋体;">代码时为</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"> Java </span><span style="font-size: 12pt; font-family: 宋体;">编译器类路径预规划的选项，如：</span><a name="1104268"></a><span style="font-size: 10pt; font-family: 宋体;" lang="EN-US">BEA_HOME\jdk141_02\jre\lib\rt.jar</span><span style="font-size: 12pt; font-family: 宋体;">。<span lang="EN-US"><o:p></o:p></span></span></p>

<p class="MsoNormal" style="text-align: left; text-indent: 21pt;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN">7) </span><span style="font-size: 12pt; font-family: 宋体;">使用</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN">Webogic Server</span><span style="font-size: 12pt; font-family: 宋体;">集群提高性能；<span lang="EN-US"><o:p></o:p></span></span></p>

<p class="MsoNormal" style="text-align: left; text-indent: 21pt;" align="left"><span style="font-size: 12pt; font-family: 宋体;">具体关于如何配置</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">Weblogic</span><span style="font-size: 12pt; font-family: 宋体;">集群，我就不细说了。详情可参考：</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN"><a href="http://e-docs.bea.com/wls/docs81/cluster/overview.html"><span style="">Introduction to WebLogic Server Clustering</span></a></span><span style="font-size: 12pt; font-family: 宋体;">。<span lang="EN-US"><o:p></o:p></span></span></p>

<p class="MsoNormal" style="text-align: left; text-indent: 21pt;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN">8)
Weblogic EJB</span><span style="font-size: 12pt; font-family: 宋体;">调优<span lang="EN-US"><o:p></o:p></span></span></p>

<p class="MsoNormal" style="text-align: left; text-indent: 21pt;" align="left"><span style="font-size: 12pt; font-family: 宋体;">由于</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">EJB2.0</span><span style="font-size: 12pt; font-family: 宋体;">已经很少项目在用了，</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">EJB3.0</span><span style="font-size: 12pt; font-family: 宋体;">再成熟一点，我再补充这一部分吧！<span lang="EN-US"><o:p></o:p></span></span></p>

<p class="MsoNormal" style="text-align: left; text-indent: 21pt;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">9) JDBC</span><span style="font-size: 12pt; font-family: 宋体;">应用调优<span lang="EN-US"><o:p></o:p></span></span></p>

<p class="MsoNormal" style="text-align: left; text-indent: 21pt;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">JDBC Connection
Pool</span><span style="font-size: 12pt; font-family: 宋体;">的调优受制于</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">WebLogic Server</span><span style="font-size: 12pt; font-family: 宋体;">线程数的设置和数据库进程数</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">,</span><span style="font-size: 12pt; font-family: 宋体;">游标的大小。通常我们在一个线程中使用一个连接</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">,</span><span style="font-size: 12pt; font-family: 宋体;">所以连接数并不是越多越好</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">,</span><span style="font-size: 12pt; font-family: 宋体;">为避免两边的资源消耗，建议设置连接池的最大值等于或者略小于线程数。同时为了减少新建连接的开销</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">,</span><span style="font-size: 12pt; font-family: 宋体;">将最小值和最大值设为一致。<span lang="EN-US"><o:p></o:p></span></span></p>

<p class="MsoNormal" style="text-align: left; text-indent: 21pt;" align="left"><span style="font-size: 12pt; font-family: 宋体;">增加</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">Statement Cache Size</span><span style="font-size: 12pt; font-family: 宋体;">对于大量使用</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">PreparedStatement</span><span style="font-size: 12pt; font-family: 宋体;">对象的应用程序很有帮助</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">,WebLogic</span><span style="font-size: 12pt; font-family: 宋体;">能够为每一个连接缓存这些对象</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">,</span><span style="font-size: 12pt; font-family: 宋体;">此值默认为</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">10</span><span style="font-size: 12pt; font-family: 宋体;">。在保证数据库游标大小足够的前提下</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">,</span><span style="font-size: 12pt; font-family: 宋体;">可以根据需要提高</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">Statement Cache
Size</span><span style="font-size: 12pt; font-family: 宋体;">。比如当你设置连接数为</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">25,Cache
Size</span><span style="font-size: 12pt; font-family: 宋体;">为</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">10</span><span style="font-size: 12pt; font-family: 宋体;">时</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">,</span><span style="font-size: 12pt; font-family: 宋体;">数据库可能需要打开</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">25*10=250</span><span style="font-size: 12pt; font-family: 宋体;">个游标。不幸的是</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">,</span><span style="font-size: 12pt; font-family: 宋体;">当遇到与</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">PreparedStatement Cache</span><span style="font-size: 12pt; font-family: 宋体;">有关的应用程序错误时</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">,</span><span style="font-size: 12pt; font-family: 宋体;">你需要将</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">Cache Size</span><span style="font-size: 12pt; font-family: 宋体;">设置为</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">0</span><span style="font-size: 12pt; font-family: 宋体;">。<span lang="EN-US"><o:p></o:p></span></span></p>

<p class="MsoNormal" style="text-align: left; text-indent: 21pt;" align="left"><span style="font-size: 12pt; font-family: 宋体;">尽管</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">JDBC Connection Pool</span><span style="font-size: 12pt; font-family: 宋体;">提供了很多高级参数</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">,</span><span style="font-size: 12pt; font-family: 宋体;">在开发模式下比较有用</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">,</span><span style="font-size: 12pt; font-family: 宋体;">但大部分在生产环境下不需调整。这里建议最好不要设置测试表</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">, </span><span style="font-size: 12pt; font-family: 宋体;">同时</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">Test Reserved Connections</span><span style="font-size: 12pt; font-family: 宋体;">和</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">Test Released Connections</span><span style="font-size: 12pt; font-family: 宋体;">也无需勾上。</span><span style="font-size: 12pt; font-family: 宋体;"> </span><span style="font-size: 12pt; font-family: 宋体;">当然如果你的数据库不稳定</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">,</span><span style="font-size: 12pt; font-family: 宋体;">时断时续</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">,</span><span style="font-size: 12pt; font-family: 宋体;">你就可能需要上述的参数打开。<span lang="EN-US"><o:p></o:p></span></span></p>

<p class="MsoNormal" style="margin-left: 21pt; text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;">最后提一下驱动程序类型的选择</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">,</span><span style="font-size: 12pt; font-family: 宋体;">以</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">Oracle</span><span style="font-size: 12pt; font-family: 宋体;">为例</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">,Oracle</span><span style="font-size: 12pt; font-family: 宋体;">提供</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">thin</span><span style="font-size: 12pt; font-family: 宋体;">驱动和</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">oci</span><span style="font-size: 12pt; font-family: 宋体;">驱动</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">,</span><span style="font-size: 12pt; font-family: 宋体;">从性能上来讲</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">,oci</span><span style="font-size: 12pt; font-family: 宋体;">驱动强于</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">thin</span><span style="font-size: 12pt; font-family: 宋体;">驱动</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">,</span><span style="font-size: 12pt; font-family: 宋体;">特别是大数据量的操作。但在简单的数据库操作中</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">,</span><span style="font-size: 12pt; font-family: 宋体;">性能相差不大</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">,</span><span style="font-size: 12pt; font-family: 宋体;">随着</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">thin</span><span style="font-size: 12pt; font-family: 宋体;">驱动的不断改进</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">,</span><span style="font-size: 12pt; font-family: 宋体;">这一弱势将得到弥补。而</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">thin</span><span style="font-size: 12pt; font-family: 宋体;">驱动的移植性明显强于</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">oci</span><span style="font-size: 12pt; font-family: 宋体;">驱动。所以在通常情况下建议使用</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">thin</span><span style="font-size: 12pt; font-family: 宋体;">驱动。而最新驱动器由于</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">WebLogic server/bin</span><span style="font-size: 12pt; font-family: 宋体;">目录下的类包可能不是最新的</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">,</span><span style="font-size: 12pt; font-family: 宋体;">请以</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">Oracle</span><span style="font-size: 12pt; font-family: 宋体;">网站为准</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">: </span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"><a href="http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/htdocs/jdbc9201.html"><span style="">http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/htdocs/jdbc9201.html</span></a>。<o:p></o:p></span></p>

<p class="MsoNormal" style="text-align: left; text-indent: 21pt;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">10) JSP</span><span style="font-size: 12pt; font-family: 宋体;">调优<span lang="EN-US"><o:p></o:p></span></span></p>

<p class="MsoNormal" style="margin-left: 42pt; text-align: left; text-indent: -21pt;" align="left"><span style="font-size: 7pt; font-family: 宋体;" lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 12pt; font-family: 宋体;">设置</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">jsp-param pageCheckSeconds=-1</span><span style="font-size: 12pt; font-family: 宋体;">；<span lang="EN-US"><o:p></o:p></span></span></p>

<p class="MsoNormal" style="margin-left: 42pt; text-align: left; text-indent: -21pt;" align="left"><span style="font-size: 7pt; font-family: 宋体;" lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 12pt; font-family: 宋体;">设置</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">serlet-reload-check=-1</span><span style="font-size: 12pt; font-family: 宋体;">或</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">ServletReloadCheckSecs=-1</span><span style="font-size: 12pt; font-family: 宋体;">；<span lang="EN-US"><o:p></o:p></span></span></p>

<p class="MsoNormal" style="margin-left: 42pt; text-align: left; text-indent: -21pt;" align="left"><span style="font-size: 7pt; font-family: 宋体;" lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 12pt; font-family: 宋体;">设置</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">jsp-param precompile=true</span><span style="font-size: 12pt; font-family: 宋体;">，关闭</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">JSP</span><span style="font-size: 12pt; font-family: 宋体;">预编译选项。<span lang="EN-US"><o:p></o:p></span></span></p>

<img src ="http://www.blogjava.net/uiiang/aggbug/26083.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/uiiang/" target="_blank">小强</a> 2005-12-30 16:27 <a href="http://www.blogjava.net/uiiang/articles/26083.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一篇已经忘记的文章</title><link>http://www.blogjava.net/uiiang/articles/21750.html</link><dc:creator>小强</dc:creator><author>小强</author><pubDate>Mon, 28 Nov 2005 15:43:00 GMT</pubDate><guid>http://www.blogjava.net/uiiang/articles/21750.html</guid><wfw:comment>http://www.blogjava.net/uiiang/comments/21750.html</wfw:comment><comments>http://www.blogjava.net/uiiang/articles/21750.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/uiiang/comments/commentRss/21750.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/uiiang/services/trackbacks/21750.html</trackback:ping><description><![CDATA[这是很久以前看到的一篇文章了，分析的很有条理，但唯一给我留下印象的只是文章中的一句话：Struts是一个很成功的开源框架，它的地位短期内还无法动摇，JavaEye有一项使命，就是动摇Struts在Java Web领域的地位，把它赶下王座，把Webwork扶上位！<BR><BR>今天听到了webwork加入struts的消息，不知道文章的作者有何感想。<BR><BR><STRONG>整理一下技术路线<BR></STRONG>这是Java视线论坛 robbin斑竹2005-6-28 发的帖子，希望能对大家将来技术发展有所帮助。<BR><BR>一、软件开发技术 <BR><BR>1）服务器端 <BR><BR>在最近5年内，Java还是主流，不光是因为当前的普及程度和遗留系统问题，而且除Microsoft几乎所有大公司都投资到Java上面的原因，此外开源也是一股无法忽略的力量：除了Java方面的开源框架在推动Java，也有Linux在带动java企业应用在普及（别忘记dotnet只能在 Windows Server上面运行） <BR><BR>dotnet有自己的优势，但是在五年内无法和Java取得均势，不光是因为Java普及带来的优势，也不光因为开源界对java的推动，也不光因为其他大公司在java上面的投资，而是很多公司的行业性质决定了dotnet的出局，例如电信行业，金融行业，电子政务行业等等，是根本没有可能采用 dotnet的。 <BR><BR>Python和Ruby算不上后起，但是很有竞争实力，不过基于上面的原因，仍然不能成为主流。 <BR><BR>在Java服务器端技术中，清晰的分为两条路线：高端的商业路线，这条路线是EJB3，J2EE5.0；低端的开源路线，这条路线是Hibernate， Spring。这两条路线也有重叠的地方，例如开源的Struts几乎成为J2EE Web层的标准，开源的Hibernate奠定了EJB3的基础。但是划分路线不是基于技术上的区别，而是基于商业运作上的区别。注重技术支持和商业服务的公司会选择前者，注重成本控制和选择自由的公司会选择后者。 <BR><BR>商业路线的技术方案是：EJB3＋Struts； <BR>开源路线的技术方案是：Spring＋Hibernate＋Struts/Webwork <BR><BR>Struts是一个很成功的开源框架，它的地位短期内还无法动摇，JavaEye有一项使命，就是动摇Struts在Java Web领域的地位，把它赶下王座，把Webwork扶上位！ <BR><BR>商业的Web层技术，JSTL算是一个不错的东西，但是和灵活的模板语言如FreeMarker相比，却有很大的差距。JSF基本上是一个没有前途的东西。商业Web层技术因为一直没有出现好的应用，这样也导致了Struts的上位。 <BR><BR>服务器端业务层和持久层框架，我非常看好EJB3，原因也不用多谈了，从商业上来说，需要这样一个东西，跨国公司们也需要这样一个产品来卖，来取代糟糕的 EJB2。开源的方案里面，Spring＋Hibenrate是一个很好的商业方案的开源替代，他们不存在很直接的竞争，而是一个互补的关系。这里比较尴尬的反而是JDO：JDO是商业产品（目前没有好的开源实现），造成开源应用不会对它感兴趣，JDO没有一个像EJB容器那样的脱管环境，造成商业方案对它不感兴趣。不过有了JDO，我觉得是对EJB3，对Hibernate形成一个良好的竞争环境，这一点是非常有利的。 <BR><BR>2）客户端技术 <BR><BR>准确的说是RIA应用。虽然我前面对XAML进行了正面的评价，但是我认为我前面有些结论给错了。经过这段时间，我觉得，XAML即时在多年之后，也未必能够成为一个非常成功的解决方案。道理很二： <BR><BR>1、XAML会带来比ActiveX更严重的安全性问题。 <BR>XAML本质上就是一个本地应用程序，虽然号称可以在IE浏览器里面运行，但IE就是一个皮而已，XAML应用具备对本地资源完全的访问能力（就算IE限制也没有用，IE限制就丧失功能，那样的话，功能并不会比Javascript来得更多；不限制的话，就为所欲为了），因此只要IE具备了运行XAML的能力，黑客将可以非常轻易的通过IE进行入侵，这仅仅需要引导用户在不知不觉中访问一个恶意的网页就搞定了！用户必须面临选择：要么禁止IE对XAML的运行能力，要么接受随时被攻击的危险。 <BR><BR>2、XAML应用本质上也是RIA应用，因此必须进行大量的RPC调用 <BR>当前XAML采用XML Web Services进行通讯，这是一种低效的RPC。当前的XAML案例中并没有注意到RPC领域，实际上根据我现在做RIA的体验来说，RPC绝对不是一个简单的事情，要考虑的问题非常多。 <BR><BR>从当前的阶段来说，最实际可用的方案有两个： <BR><BR>1、AJAX <BR>实际上就是基于XMLHTTP的JS异步交互，这个东西已经出现很多年了，最近随着Google应用和Sun Blueprint的推出开始火热。我原来对这个东西持否定态度，但是后来转变了。我原来否定态度的一个前提就是：XMLHTTP缺乏成熟的组件库！但是没有想到的是，现在XMLHTTP从去年下半年开始，如雨后春笋般冒出来。AJAX应用最大的好处就是充分利用现有资源，我认为应成为RIA应用的首选。 <BR><BR>2、Flash <BR>Flash的优势也很明显，强大的AS支持，强大的组件可视化设计，强大的交互能力和很炫的用户体验，并且Flash Remoting也已经非常成熟了。Flash的缺点就是Flash虽然嵌入网页，但是和网页没有数据交互能力，Flash另一个缺点就是不适合处理大量文本内容（HTML最适合）。现在有些人开始滥用Flash了。 <BR><BR>因此比较好的方式可能是两种混用，一般不过度复杂的交互交给AJAX，非常复杂，甚至需要托拽操作的，交给Flash。 <BR><BR>总结一下： <BR><BR>软件开发领域服务器端技术Java是主流，两个技术路线，一个是EJB3，一个是Spring＋Hibernate，此外iBATIS也有一席之地；客户端技术就是AJAX和Flash。 <BR><BR>二、数据库技术 <BR><BR>基本上格局不会发生多大变化，Oracle还是高高在上，SQL Server进一步蚕食NT平台其他数据库的领地。开源方面，MySQL将一枝独秀，但是开源数据库在很多方面还是和商业数据库有无法拉近的巨大差距。这也使得商业数据库的地位不可替代。我会比较关注Oracle，MySQL这两个数据库。面向对象数据库仍然不会有什么起色。 <BR><BR>三、桌面编程技术 <BR><BR>我还是相信一点，对于桌面应用来说，本地代码的位置永远无法被取代，所以我总觉得XAML那样的东西效率实在很成问题。Longhorn要像成熟，也不是第一个版本就可以达到的。当前桌面应用开发技术，还是首推Delphi，不过我觉得Python是后起之秀，非常有可能在未来取代Delphi。<BR>初探在下一代 Windows 中编写和部署应用程序 <BR><A href="http://www.microsoft.com/china/MSDN/library/windev/longhorn/DevelopAppLonghorn.mspx" target=_blank>http://www.microsoft.com/china/MSDN/library/windev/longhorn/DevelopAppLonghorn.mspx</A> <BR><BR>首先，以Microsoft公司的实力和Windows操作系统的占有率来说，Longhorn迟早会被普及，而XAML的开发方式也有可能普及的。记得当初WindowsXP刚出来的时候，因为资源占用率和新的激活制度招致一片骂声，但是慢慢的，现在也都接受了下来。由此可以推断，Longhorn以其更加丰富的桌面功能和诱人的外观，会在将来成为主流。 <BR><BR>但是Longhorn什么时候才会全面普及，这是很值得琢磨的问题。WindowsXP是2001年推出的，在随后的几年，Microsoft采用了一些商业手段来迫使用户升级，例如企图取消Windows98的技术支持，不再提供WindowsNT技术支持，不再销售 WindowsNT/Windows98，将Windows2000保持在一个比较高的售价的同时，对WindowsXP推出优惠价格，让 WindowsXP的售价低于Windows2000等等手段。但是直到现在，Windows2000仍然占据了非常高的份额，据我个人的观察是比 WindowsXP略高。按照这种情况来推断，Longhorn要普及，恐怕难度更大，非常多的用户现在仍然是Windows2000的死忠派， WindowsXP推广了四年还未能超过Windows2000，那么Longhorn究竟要几年才能超过WindowsXP呢？我估计四年以上是起码的。 <BR><BR>XAML应用程序不同以往，它只能跑在Longhorn上面，甚至比Java和dotnet要求更严格，后者仅仅下载安装一个运行环境就可以了，但是前者要求你必须更新操作系统。XAML在IE浏览器中运行虽然肯定是下一代RIA的主流，但是不可忽视的问题是，只要Longhorn没有彻底淘汰 Windows2000/XP，软件开发商和网站开发商就不敢大面积采用XAML。而根据我的观察，现在企业中，Windows98仍有少部分市场份额。因此Longhorn必须要等待到彻底的，毫不残留的淘汰Windows98，Windows2000，WindowsXP之后，才会全面普及，而在此之前，不得不经历一个漫长的过渡期。 <BR><BR>就好像现在，假设你开发桌面应用程序，你敢只针对WindowsXP开发吗？而彻底不支持98和2000吗？我想，没有哪个软件开发商敢这样做。除非 Windows2000几乎被彻底淘汰了，你才敢这样做，但是WindowsXP已经推出四年了，还没有Windows2000占用率高，哪全面淘汰究竟要几年呢？再看看现在dotnet winforms应用，推出也已经五年时间了，但是到现在仍然没有普及开来，根本的原因就是Windows2000/WindowsXP没有预装 dotnet framework。仅仅是需要打包安装一个运行环境就使得winforms五年都推广不了，更何况要求你升级操作系统呢？ <BR><BR>我个人的估计是，假设2006年Longhorn如期上市，那么将需要7-9年时间来彻底淘汰Windows2000/WindowsXP。 Longhorm上面XAML应用的初步普及也至少需要4-5年时间以后才会有软件开发商大量去做（想向dotnet是2000年开始宣传和推广的，到 2004年开始普及，今年和明年才会全面普及)。因此，基于XAML应用的普及可能是在2010年以后！上面的估计中还没有包括MacOS 和Linux在桌面会否有什么表现。 <BR><BR>先说说服务器端吧： <BR><BR>从可预见的未来来看，服务器和客户端TCP通讯的主流方式一定是HTTP协议（即时通讯软件走UDP端口，不在讨论范围）。在基于HTTP协议之上，又分为两类：一类是SOAP协议，异构系统支持良好，但是性能很差，目前Microsoft很喜欢用这种方式；一类是轻量级二进制协议，例如Flash的 AMF协议，Resin的Hessian协议。值得一提的是，不管哪种方式，他们都支持异构的系统，所以完全可用在客户端采用dotnet，在服务器端采用Java或者Python。因此，XAML的流行不会对服务器端技术产生致命的影响（肯定会提高dotnet的服务器的市场份额）。所以我们可用抛开客户端影响，单独来看服务器端技术： <BR><BR>1、Java <BR>Java是当前服务器端技术当之无愧的王者，在未来五年内，也不会有任何动摇（受到dotnet和python的影响，市场份额会下降一些）。Java特别有利的一点是，现在有太多的现存系统基于Java，这些系统都不会轻易迁移到其他平台上。另外还有一个决定因素是除了Microsoft之外的几乎全部 IT大公司都在Java方面的投资巨大，放弃Java对他们来说也意味着沉重的打击，甚至毁灭性的打击。这些公司可以列很长很长，IBM，HP， Oracle，SAP，Sun，BEA，Macromedia等等。 <BR><BR>2、dotnet <BR>由于Microsoft的影响力，dotnet会成为为仅次于Java的第二大服务器端技术，但是Microsoft有一个隐忧，就是Linux操作系统在服务器端的高速成长。虽然现在Linux在整个服务器端市场的出货量只有13%左右，但是成长率惊人，根据我看到的资料显示，到2008年，将占据 25%以上的市场份额。考虑到很多公司是自己安装Linux，因此不会被硬件服务器厂商统计进来，因此Linux的服务器端的市场份额应该比25%高一些。并且现在主要的服务器厂商都对Linux有非常巨大的投入和支持，这些公司包括IBM，HP，Dell（只有Sun不支持），因此Linux在未来会对Windows在服务器端的市场构成最严重的威胁。 <BR><BR>不要忘记dotnet只能在Windows平台上面跑，虽然有mono，但是你不可能移植MTS，COM+，SQL Server etc。所以只要Linux在服务器市场对Windows构成持续的威胁，dotnet就不可能超过Java，Java的地位还是稳稳的老大。从某种程度上来说，Java的命运是和Linux联系在一起的，只要Linux在服务器端不输于Windows，Java就稳稳压制dotnet。 <BR><BR>BTW:从未来来看，Linux和Windows会在低端和中端服务器市场成为主要竞争对手，由于各自都有其不可替代性，所以双方都不可能彻底消灭对方，最大的可能性是Linux和Windows平分市场，或者Windows市场份额略高一点。 <BR><BR>3、Python <BR>我个人认为Python会成长为第三大服务器端技术，Python成长于开源，但是又有商业公司来商业运作，并且背后还有大公司的支持，在欧洲普及的非常好。当然最重要的原因是我觉得Python在技术上非常先进，并且技术发展方向上比较统一，不会出现Java那种吵架的事情。 <BR><BR>4、PHP <BR>PHP这东西是不错，Yahoo也在用，IBM现在也对他感兴趣，但是我还是要说PHP没有太广阔的前途，原因很简单，PHP没有服务端中间件，例如 Java有App Server，dotnet有IIS/MTS，Python有Zope，但是PHP他就是一个脚本，没有自己的中间件就是致命问题。Yahoo用PHP有其特定的原因，主要是从原先自己的技术迁移到PHP很方便，而IBM支持PHP，显然醉翁之意不在酒，IBM意不在推广PHP，而在于争取到那些使用 PHP的商业大客户们，向他们卖服务。 <BR><BR>BTW：感觉欧洲用Python/PHP的很多，似乎开源在欧洲非常深入人心。 <BR><BR>从服务器端技术来说，Java还是我们最需要下功夫去学习和掌握的，此外，我会比较倾向于钻研和应用Python，而不是dotnet。原因也很简单，跟随Micorsoft的技术会很辛苦，Microsoft产生的新概念多，他总是会猛的推出n多种技术，然后让他们在市场上自己生存，最后根据市场反馈，无情的抛弃某些东西，大力推进有市场前景的东西，这样的例子太多了，举不胜举了。我的感觉就是这种方式会让Microsft经过市场尝试在技术竞争中筛选最优秀的技术，但是对于Microsoft技术的跟随者来说，未免有点太不公平，整天吭哧吭哧被Microsoft拿来当免费的试验品来用。我特别不理解的是MSDN宇宙版，Microsoft总是把无穷无尽的文档灌给你，让你永远学不完，但实际上我真的不需要那么多概念，我只需要能够很好的完成我工作的技术，并且这个技术可以持续的完善就好了。而不是今天给我这样一个东西，明天灌给我无穷的文档，后天当我用顺手以后，又告诉我这东西作废了，你给我重新学习新东西，然后又是无穷的文档，总之很恼火。 <BR><BR>所以就是：重点学习Java，有时间去学习Python，保持对dotnet的关注即可。 <BR><BR><BR>客户端： <BR><BR>前面说了那么多XAML的东西，都是和这有关，七年以后肯定是XAML的天下，但是五到七年之内还不是： <BR><BR>1、Java <BR>Java在客户端真的是扶不起的阿斗，这都怪Sun。Sun造就了Java的成功，又一手毁了Java在客户端的市场。那些个Swing和SWT的死忠团也不要和我争什么，我也懒得和你们争，你们觉得好就好吧，道不同不相与谋，你觉得好你就用你的，我觉得不好我就用别的。用不着缠着我非逼我说Java做客户端好，没必要，况且就算你逼我承认又怎样？我就是玉皇大帝金口玉言了？得到我的承认，Java就有前途了？我好像还没有那么大本领吧？就是IBM， Sun也没有那么大本领，所以好不好也不是我说了算，用不着逼我。 <BR><BR>2、dotnet winforms <BR>由于Windows2000/WindowsXP不带dotnet CLR，所以winforms一直没有能够普及得很好，等Longhorn一出来，又变成了XAML了，winforms又被淘汰了，所以 winforms的地位特别尴尬，但是在这5-7年中，你想开发既能够在Windows2000/WindowsXP，又能够在Longhorn上面跑的桌面程序，winforms好像又是Microsoft技术中最好的选择。所以只好一直尴尬下去。 <BR><BR>3、VC，VB <BR>dotnet出来以后就开始尴尬了，说用吧，好像很落伍了，都dotnet时代了，说不用吧，又没有好的替代品，现阶段开发桌面程序，还真得不得不用，而且还挺好用的。所以VC6SP5，VB6的死忠团也比较多。 <BR><BR>4、Delphi <BR>dotnet出来以后Borland就开始跟风了，这一跟风，连老本都跟没有了。未来的XAML时代，我也不知道Borland怎样找自己的定位，但不管怎么说，从历史来看，本地代码的应用程序永远有它一席之地！就算XAML又如何如何做得漂亮了，关键的地方，和特定资源处理相关的部分，还是本地代码的程序管用。你看VB出来多少年了，用VB开发的都是一些上层的项目级别的应用软件，一旦涉及产品领域，还是VC和Delphi管用。所以现在大家还是不得不用Delphi7阿。 <BR><BR>BTW：XAML应用致力于快速开发项目级别的应用，特别是可以跑在IE浏览器里面的，因此是RIA的首选。但是毕竟也有很多不适合用RIA的场所，特别是例如我要备份某些文件，你用XAML？那性能就不用提了。所以Delphi如果好好发展VCL，封装Windows32 API，我觉得也是一条路，未必比现在跟随dotnet差。 <BR><BR>5、Flash RIA <BR>其实我觉得Flash不适合做RIA的，但是Flash普及率太高，XAML又离普及太遥远，而Flash现在就可以用了，所以是当前RIA的首选。不过我对Macromedia公司比较失望，如果Macromedia能够公布Flash实现细节，作为一个公开的标准向ISO提交，同时免费开源Flex，我敢说，Flash RIA会迅速普及的。等5-7年XAML的时代，由于Flash的市场占有率，XAML就未必能拼得过Flash。可惜的是Macromedia公司目光过于短浅，只知道赚眼前的小钱。 <BR><BR>6、Python <BR>这5-7年内，RIA应用和RCP应用不会统一，XAML才具备将RIA和RCP统一的实力。从这5-7年来看，Flash是RIA的首选，而RCP的首选，我要推荐Python。原因前面已经提过，简单总结一下： <BR>1）wxWidgets是一个比MFC优雅的库，TortoiseCVS用wxWidges而不用MFC，就是因为wxWidgets好用，而不是为了可以移植。 <BR>2）Python的面向对象脚本语言编程适合快速界面开发 <BR>3）Python在服务器端和客户端都非常有前途，可以形成一个统一的解决方案，这一点明显比Java有优势 <BR>4）Python桌面应用程序可以完全编译为本地代码，脱离Python运行环境，这一点比dotnet winforms都有优势 <BR>5）Python可以不受限制的任意调用Windows32 API，所以凡是VC6可以做的事情，Python就可以做 <BR><BR>试想一下，现在我们开发桌面应用程序有什么要求？ <BR>一、不要附带一个JRE或者CLR的累赘 <BR>二、可以快速开发 <BR>三、性能要有保证 <BR>四、方便的远程方法调用支持 <BR>此外如果能够跨平台就最好了 <BR><BR>Java前三点都不符合；dotnet winforms不符合一；VC6不符合二和四，VB6不符合三和四；Delphi7符合前四点；Flash RIA不符合三；Python全部都符合！并且请记住Python是一个完全开源免费的方案！ <BR><BR>客户端技术在这5-7年中，在RIA领域我会学习一下Flash，在RCP领域我会重点学习Python，此外会观望一下XAML<BR><img src ="http://www.blogjava.net/uiiang/aggbug/21750.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/uiiang/" target="_blank">小强</a> 2005-11-28 23:43 <a href="http://www.blogjava.net/uiiang/articles/21750.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>轻量级开发的成功秘诀，第 1 部分: 核心原则及原理</title><link>http://www.blogjava.net/uiiang/articles/16946.html</link><dc:creator>小强</dc:creator><author>小强</author><pubDate>Thu, 27 Oct 2005 01:14:00 GMT</pubDate><guid>http://www.blogjava.net/uiiang/articles/16946.html</guid><wfw:comment>http://www.blogjava.net/uiiang/comments/16946.html</wfw:comment><comments>http://www.blogjava.net/uiiang/articles/16946.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/uiiang/comments/commentRss/16946.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/uiiang/services/trackbacks/16946.html</trackback:ping><description><![CDATA[<SPAN class=atitle2>打基础</SPAN><BR>
<TABLE cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR vAlign=top align=left>
<TD>
<P>级别: 初级</P></TD></TR></TBODY></TABLE>
<P><A href="http://www-128.ibm.com/developerworks/cn/opensource/os-lightweight1/#author1"><NAME>Bruce Tate</NAME></A><BR>总裁, J2Life, LLC<BR>2005 年 5 月 30 日</P>
<BLOCKQUOTE>轻量级开发是一个很大的主题，开发人员经常提到这个术语，但却很难讲明它的意思。本文是一系列讲述轻量级开发的文章中的首篇，介绍了该技术背后的核心原则及原理。</BLOCKQUOTE>
<P>1990 年，我发现了白水漂流并深深爱上了它。我们哪怕是经过最小的湍流，都会留一个人在湍流尾部，两个人在岸边用绳索拽着。我们认为这可以防止任何糟糕的事情发生。虽然看起来一切尽在掌握，只是有些不太实际。我们还学会了从船舱观察普通的湍流，并设法互相协作。对于大多数危险的湍流，我们花费了更多的时间来保障安全，但是只有少数情况下，这些措施才起到重大的作用。</P>
<P>在漂流过程中，使用一种起源于东南部湍急河流的轻量级策略，为我节省了时间，使我可以划得更远，玩得更开心，而无需过多考虑安全问题。在业务领域，轻量级开发让您可以按时完工，积极响应客户，从而节省时间和金钱。</P>
<P>在本系列的文章中，我关注于轻量级开发（曾经有太多含义的术语）的基础。本篇文章作为第一篇，为读者打好基础，同时对轻量级开发做出定义。后面的文章由浅入深地讲述从过程到原则最后到工具的知识。我也将在更高的级别上关注原理和架构的实现，并且提供具体实现的代码。</P>
<P>本系列面向没有经过太多轻量级开发的读者。如果您已使用了两年的 Spring 轻量级容器和敏捷过程，您可能会收获更多。如果您在传统的开发过程中使用 Enterprise JavaBeans™（EJB），但想要转向轻量级开发，那么本系列就是为您准备的。</P>
<P>我更多地是想在这场席卷整个 Java™ 技术社区的潮流中，做一些自己的贡献。<I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">轻量级</I> 这个噱头为诸如 Spring 和 Pico 这样的容器增添了几分优雅。并且，一些源自轻量级过程的技术，如自动化单元测试，现在也渗透到了很多开发工作室中。</P>
<P><A name=IDATC2FB><SPAN class=atitle2>戳穿针对轻量级开发的谣言</SPAN></A><BR>“轻量级开发”通常与一套开发方法、框架和设计原理一起使用。</P>
<UL xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<LI>轻量级<I>方法</I> 包括敏捷过程，例如<I>极限编程</I>（XP）和 Scrum。它们强调开发中测试第一，积极调动客户和重构。 
<LI>轻量级<I>框架</I> 鼓励人们使用简单原始的 Java 对象（POJO）编程，而不是类似 EJB 的重量级面向组件模型。 
<LI>轻量级<I>设计模式</I> 使您可以在对象和集成服务之间进行松散耦合，而无需艰苦地编写业务逻辑或领域模型。</LI></UL>
<P>当我们研究这些思想和技术时，您将会学到更多关于它们的知识。但是首先让我们戳穿一些谣言。</P>
<P><A name=IDAKD2FB><SPAN class=atitle3>谣言：轻量级开发只是一种“玩具”技术。</SPAN></A><BR>许多开发工具，如 Microsoft® Visual Basic 或 PHP，它们通常不能驾驭或管理大型企业项目，因此得到了<I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">“玩具”</I>的称号。像 Spring 和 Hebernate 这样的轻量级技术就常常因此而黯淡。实际上，大多数轻量级技术用于了企业开发，因为其他技术都使我们非常失望。Spring 框架就是作为代替 EJB 的一种轻量级技术。同样，XP 方法吸收改进了企业中的错误设置。我在获得 Jolt 大奖的 <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Better, Faster, Lighter Java</I> 一书中，为大家讲述了有关成功部署在我的客户站点上的一些工具的信息，客户有一些是财富 500 强中的公司。轻量级技术在企业领域内，正在蓬勃发展着。</P>
<P><A name=IDAVD2FB><SPAN class=atitle3>谣言：轻量级开发策略构建的是“玩具”。</SPAN></A><BR>也许您更倾向于相信轻量级开发只对构建“玩具”应用程序有益。而您的目标是精确地满足客户的需求。让我们首先明确一下：轻量级技术完全可以构建这种规模的应用程序。实际上，这种巨大的反差经常发生，因为只有简单、简洁、无状态的设计才能使基础设施更好地工作。</P>
<P><A name=IDA1D2FB><SPAN class=atitle3>谣言：轻量级过程使您忽视规范。</SPAN></A><BR>在轻量级开发中，您需要认真地规划并与客户磋商需求。您必须构建严格的自动化单元测试，以优化重构。当放弃变更时，仍可以保持程序完整。而且，测试用例失败或变更引发错误时，自动化构建会通知您。轻量级开发必须比其他技术更加注意规范，但这种规范源于不同方面。</P>
<P>我认为这种开发风格超越了单一的技术或过程。如果您想轻松一些，那么需要选择使它易于工作的原则、过程和技术。</P>
<P><A name=IDACE2FB><SPAN class=atitle2>原则</SPAN></A><BR>该说的也说了，该做的也做了，您现在需要决定哪些需要重视，并据此制定决策。如果我觉得客户被误导或漠不关心，我通常会首先帮助他们建立核心原则。下面的列表是一个不错的起点： </P>
<UL xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<LI><B>争取简单性</B>。这种观念应该渗入到您所有的工作中。您的过程应该刚好生成足够完成工作的工件。开发人员应该尽量使用最简单的方法解决问题。您的工具应该使您构建一个清晰、简洁的解决方案。 
<LI><B>修补漏洞</B>。许多开发方法可能不鼓励在过程中进行重构或变更，因为这些行为不直接用于产生客户代码。轻量级开发要求可以自由地修补太复杂或充斥 bug 的代码。您需要为它做出预算。 
<LI><B>自动化单元测试</B>。您应该优先编写测试用例。您可能还没有在测试第一的开发中成功过，但测试会间接给您带来重构代码的便利。我以后会进一步讲述：广泛的单元测试改善您的客户体验，并提高代码的设计水平，这是因为它强迫您解耦联系过于紧密的代码。 
<LI><B>使用短开发周期并积极调动客户参与其中</B>。许多顶级的软件工作室通过剔除不必要的工件来简化开发周期。如果您已经顺利得到客户的参与，那么很多的功能规范会变得越来越没必要。客户会很满意这种交互，并感激您的短周期开发，因为这稳步提高了客户的业务价值。</LI></UL>
<P>这些原则并不能完全包含您的技术抉择和开发过程，但它有利于您描述开发体验。如果经理也了解并遵循这些原则，开发人员就不至于做出无效技术选择，或者开发一些不必要的工件。确立原则后，就该规划一个有效过程了。</P>
<P><A name=IDAXE2FB><SPAN class=atitle2>过程</SPAN></A><BR>紧凑、快速的开发过程通常从<I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">敏捷开发方法</I> 当中得到灵感。然而，这些方法并不针对每个人。如果您有一个大型团队，并且没有实际访问客户或合适的代理人，那么传统方法更适合您一些。但多数项目都有小团队 —— 不超过 12 个人，他们可以充分访问客户，以灵活使用这种方法。通常，敏捷开发包括下列原则：</P>
<UL xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<LI>专注现场客户和代码，而不是其他设计技巧。您可以使用其他技巧，但只在它们对您确实有益的情况下。本过程不需要它。 
<LI>简化您需要的文档。为了需要，宁可使用电子表格中的一行来描述，也不使用令人困惑的用例图。 
<LI>只做足以完成工作的设计工作。不要对设计或性能过分忧心忡忡，使自己陷入绝境。 
<LI>为了开发，努力进行简化并保证至少每天都集成您所构建的程序，必要时进行重构。 
<LI>自动化测试。</LI></UL>
<P>即使您工作在传统的机构，您也可以利用已裁减的开发过程。技巧是推广<I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">原则</I> 而不是<I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">方法</I>。推广极限编程管理器 —— 或其他冠以<I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">极限</I> 的东西，这可能会很艰难。但推广类似单元测试的原则通常更有意义。实际上，我的许多客户使用这种技术同敏捷开发过程一起为保守的机构服务，但他们的老板丝毫不知道有什么发生了改变。</P>
<P>用修辞手法描述一下这种技术。<I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">原则</I> 是重拳出击的轻量级思想。<I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">过程</I>是重量级的，实现起来将会很困难。</P>
<P><A name=IDAVF2FB><SPAN class=atitle2>技术</SPAN></A><BR>我已经概述了大多数轻量级开发人员需要了解的设计原理，以及利用这些原理的重要开源技术。</P>
<P><A name=IDA2F2FB><SPAN class=atitle3>依赖注入</SPAN></A><BR>最新一代容器称为<I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">轻量级容器</I>，它们使用一个共同设计原理：<I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">依赖注入</I>。 对这个简单思想来说，这是一个复杂的术语。依赖注入让您将对象和它所依赖的东西交给第三方。然后第三方创建所有对象并将它们绑在一起。比方说，称为 <CODE>myDao</CODE> 的数据访问对象需要一个称为 <CODE>ds</CODE> 的数据源。那么该容器会一同创建它们，并设置一个属性： </P><A name=IDASG2FB><B>清单 1. 创建一个第三方汇编程序</B></A><BR>
<TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
myDao = new Dao();
ds = new DataSource();
myDao.setDataSource(ds);
</CODE></PRE></TD></TR></TBODY></TABLE>
<P>当然，不创建这种第三方汇编程序的话，您也可以使用框架来做其他附加的工作（如提供配置支持）。Spring 框架、Pico 和 HiveMind 就扮演了这个角色。其他像 JavaServer Faces(JSF) 框架也利用了依赖注入。</P>
<P><A name=IDAZG2FB><SPAN class=atitle3>面向对象编程</SPAN></A><BR>使用面向对象编程（AOP），您可以编写通用的功能性模块（称为<I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">方面</I>） —— 例如，日志、事务、安全或持久性。AOP 使您可以将这些方面联系到 POJO，然后指定一个时间点（如方法开始时或产生异常时）和另一个需要联系的方面。例如，您可能想要创建一个外观事务对象。您可以在调用方法时将 <CODE>TransactionBegin</CODE> 方面关联到外观方法。然后在产生异常时将 <CODE>RollBack</CODE> 方面关联到外观的异常。最后，在方法结束时将 <CODE>Commit</CODE> 方面关联到外观的方法。您在配置中完成这些工作，而不是通过编写代码。依靠这种能力，您可以创建一个简单的 POJO 事务、安全或远程访问。</P>
<P>您现在已经得到了关于 POJO 的声明性事务，这对企业应用程序非常有用。使用这些工具，您可以完全放弃 EJB，或者最小化它的作用。而这正是轻量级组件所要做的。</P>
<P><A name=IDAPH2FB><SPAN class=atitle3>透明持久性</SPAN></A><BR>持久性也是建立在较简单的编程模型之上。透明持久性框架通过配置而不是编写代码，来使您为应用程序添加持久性。因为大多数应用程序是面向对象的，并且访问一个关系数据库，所以一些专家断言，我们最终将进入对象关系映射的时代。我目前发现的顶级持久性解决方案是 SolarMetric 的 Kodo JDO 和 Hibernate（参阅 <A href="http://www-128.ibm.com/developerworks/cn/opensource/os-lightweight1/#resources" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">参考资料</A>）。在后面的文章中我将详细比较这些解决方案。其他轻量级解决方案，例如 iBATIS 和 Active Record 设计模式，根本不会试图进行对象关系映射。</P>
<P><A name=IDA0H2FB><SPAN class=atitle2>结束语</SPAN></A><BR>在轻量级开发中，您基本上可以：</P>
<UL xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<LI>合并过程、技术和原理。 
<LI>优先选择较简单的技术。 
<LI>在一个稳固、轻量级的基础上，进行构建。 
<LI>尽量争取最可能的透明性。 
<LI>使用您可以利用的技术，如依赖注入和 AOP。</LI></UL>
<P>一定要明白，无论技术还是过程都不能完整定义轻量级开发。它是一个包罗万象的概念。伴随本系列的文章，您将看到对轻量级技术和原理的各种各样的讨论。我将首先关注开源框架，并着重讲述轻量级容器。后面的文章，我会讨论保守公司内的轻量级方法实现，甚至还有一些超越了 Java 技术的替代方案。我非常喜欢这个系列的文章，希望您也一样。</P>
<P><A name=resources><SPAN class=atitle2>参考资料 </SPAN></A>
<UL>
<LI>您可以参阅本文在 developerWorks 全球站点上的 <A href="http://www.ibm.com/developerworks/opensource/library/os-lightweight1/" target=_blank xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">英文原文</A>。<BR>
<LI>阅读 Bruce Tate 和 Justin Gehtland 编写的 <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><A href="http://www.oreilly.com/catalog/bfljava">Better, Faster, Lighter Java</A></I> 一书，此书更好地概述了轻量级开发。<BR>
<LI><I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Bruce Tate 和 Justin Gehtland 编写的 <A href="http://www.amazon.com/exec/obidos/tg/detail/-/0596009100/ref=pd_ecc_rvi_1/002-5032208-9016823">Spring: A Developer's Notebook</A></I> 一书可以帮您快速入门 Spring。<BR>
<LI>想了解更全面的 Spring 知识，请阅读 Rob Harrop 和 Jan Machacek 编写的 <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><A href="http://www.apress.com/book/bookDisplay.html?bID=405">Pro Spring</A></I>，以及 Craig Walls 和 Ryan Breidenbach 编写的 <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><A href="http://www.manning.com/catalog/view.php?book=walls2">Spring in Action</A></I>。<BR>
<LI>developerWorks 题为“<A href="http://www-128.ibm.com/developerworks/cn/java/j-hibern/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">无需容器的对象关系映射</A>”的文章为您展示了如何与 Hibernate 一起使用 Spring 持久性。<BR>
<LI>阅读 developerWorks 关于 AOP 的一篇文章“<A href="http://www-128.ibm.com/developerworks/cn/java/j-aopwork1/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">AOP@Work: AOP 工具比较，第 1 部分</A>”，它是提供更佳透明性的轻量级技术。<BR>
<LI>访问 <A href="http://www-128.ibm.com/developerworks/cn/opensource" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">developerWorks 的开源专区</A> 获取大量 how-to 信息、工具和项目更新，以帮助您使用开源技术进行开发，并学会如何与 IBM 产品一起使用。<BR>
<LI>使用 <A href="http://www.ibm.com/developerworks/downloads/?S_TACT=105AGX44" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">IBM 试用软件</A> 改进您的下一个开源开发项目，这些软件可以通过下载或购买 DVD 获得。<BR>
<LI>在 Developer Bookstore 的开源专区，可以找到数百本 <A href="http://devworks.krcinfo.com/WebForms/ProductList.aspx?Search=Category&amp;id=1400" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">开源主题的打折书籍</A>。<BR>
<LI>通过参与 <A href="http://www.ibm.com/developerworks/blogs/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">developerWorks blog</A> 加入 developerWorks 社区。<BR></LI></UL>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD><A name=author1></A><SPAN class=atitle2>关于作者</SPAN><BR>Bruce Tate 居住在德克萨斯州的首府奥斯汀，他是一位父亲，同时也是山地车手和皮艇手。他是 3 本最畅销 Java 书籍的作者，其中包括荣获 Jolt 大奖的 <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Better, Faster, Lighter Java</I> 一书，最近又出版了 <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Spring: A Developer's Notebook</I> 一书。他在 IBM 工作了 13 年，现在是 J2Life、LLC 的创始人兼顾问。他潜心研究基于 Java 和 Ruby 的轻量级开发策略和架构。</TD></TR></TBODY></TABLE><img src ="http://www.blogjava.net/uiiang/aggbug/16946.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/uiiang/" target="_blank">小强</a> 2005-10-27 09:14 <a href="http://www.blogjava.net/uiiang/articles/16946.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>