﻿<?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-Robin's Programming World-随笔分类-Java</title><link>http://www.blogjava.net/fastzch/category/5340.html</link><description>I Love Programming As My Life!</description><language>zh-cn</language><lastBuildDate>Wed, 05 Feb 2014 01:42:51 GMT</lastBuildDate><pubDate>Wed, 05 Feb 2014 01:42:51 GMT</pubDate><ttl>60</ttl><item><title>Ubuntu环境下Apache2与Tomcat集成</title><link>http://www.blogjava.net/fastzch/archive/2014/02/05/409532.html</link><dc:creator>Robin's Programming World</dc:creator><author>Robin's Programming World</author><pubDate>Tue, 04 Feb 2014 18:21:00 GMT</pubDate><guid>http://www.blogjava.net/fastzch/archive/2014/02/05/409532.html</guid><wfw:comment>http://www.blogjava.net/fastzch/comments/409532.html</wfw:comment><comments>http://www.blogjava.net/fastzch/archive/2014/02/05/409532.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/fastzch/comments/commentRss/409532.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fastzch/services/trackbacks/409532.html</trackback:ping><description><![CDATA[1、安装Apache2<br />&nbsp;&nbsp;&nbsp; apt-get install apache2<br /><br />重启命令： /etc/init.d/apache2 restart<br /><br />/etc/apache2/conf.d/charset<br />这个是网站编码配置，需要将最后行的 ＃AddDefaultCharset UTF-8 前面的#去掉，使用UTF-8编码，当然也可以把 UTF-8改成别的编码。<br /><br />这个是网站目录配置，想更改网站目录的话，就修改这个，上面的目录的 apache2.conf 里面也有网站目录的<br />/etc/apache2/sites-available/default<br /><br /><br />2、 install JK connector.<br />apt-get install libapache2-mod-jk<br />so文件会被安装到目录： /usr/lib/apache2/modules 中。<br />安装完后，在/etc/apache2/mods-enabled下会多出一个jk.load文件，重启apache2后，apache自动装载这个文件以加载mod_jk.<br /><br /><br />3、修改httpd.conf,一开始它是空的,增加<br />#Server Name<br />ServerName 127.0.0.1<br /><br />#JK config<br />#JkWorkersFile /etc/libapache2-mod-jk/workers.properties<br />JkLogFile /var/log/apache2/mod_jk.log<br />JkLogLevel info<br />JkMount /*.jsp ajp13_worker<br />JkMount /*/servlet/ ajp13_worker<br />JkMount /*.do ajp13_worker<br /><br />4、/etc/apache2/sites-available中增加一个文件，文件名随便.<br />如我的tomcat,内容如下:<br />&lt;VirtualHost 127.0.0.1&gt;<br />&nbsp; ServerAdmin fastzch@gmail.com<br />&nbsp; DocumentRoot "/var/www"<br />&nbsp; ErrorLog "/var/log/apache2/ediskmanage_errors.log"<br />&nbsp; CustomLog "/var/log/apache2/ediskmanage_accesses.log" common<br /><br />&nbsp; JkMount /servlet/* ajp13_worker<br />&nbsp; #让Apache支持对servlet传送，用以Tomcat解析<br />&nbsp; JkMount /*.jsp ajp13_worker<br />&nbsp; #让Apache支持对jsp传送，用以Tomcat解析<br />&nbsp; JkMount /*.do ajp13_worker<br />&nbsp; #让Apache支持对.do传送，用以Tomcat解析<br />&lt;/VirtualHost&gt;<br /><br />5、执行 a2ensite tomcat<br /><br />6、/etc/init.d/apache2 reload<br /><br />7、部署应用后重启Tomcat即可<img src ="http://www.blogjava.net/fastzch/aggbug/409532.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fastzch/" target="_blank">Robin's Programming World</a> 2014-02-05 02:21 <a href="http://www.blogjava.net/fastzch/archive/2014/02/05/409532.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring 3 MVC and JSON example</title><link>http://www.blogjava.net/fastzch/archive/2012/06/04/379962.html</link><dc:creator>Robin's Programming World</dc:creator><author>Robin's Programming World</author><pubDate>Mon, 04 Jun 2012 15:06:00 GMT</pubDate><guid>http://www.blogjava.net/fastzch/archive/2012/06/04/379962.html</guid><wfw:comment>http://www.blogjava.net/fastzch/comments/379962.html</wfw:comment><comments>http://www.blogjava.net/fastzch/archive/2012/06/04/379962.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/fastzch/comments/commentRss/379962.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fastzch/services/trackbacks/379962.html</trackback:ping><description><![CDATA[老外写的文章真的很易懂！ &nbsp; <br />原文地址：http://www.mkyong.com/spring-mvc/spring-3-mvc-and-json-example/<br /><br /><br />Published: July 28, 2011 , Updated: July 27, 2011 , Author: mkyong<br /><br />&nbsp;<br /><br />In Spring 3, you can enable &#8220;mvc:annotation-driven&#8221; to support object conversion to/from JSON format, if Jackson JSON processor is existed on the project classpath.<br /><br />In this tutorial, we show you how to output JSON data from Spring MVC.<br /><br />Technologies used :<br /><br />Spring 3.0.5.RELEASE<br />Jackson 1.7.1<br />JDK 1.6<br />Eclipse 3.6<br />Maven 3<br />1. Project Dependencies<br /><br />To use JSON in Spring MVC, you need to include Jackson dependency.<br /><br />&nbsp;&nbsp;&nbsp; &lt;properties&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;spring.version&gt;3.0.5.RELEASE&lt;/spring.version&gt;<br />&nbsp;&nbsp;&nbsp; &lt;/properties&gt;<br />&nbsp;<br />&nbsp;&nbsp;&nbsp; &lt;dependencies&gt;<br />&nbsp;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;!-- Jackson JSON Mapper --&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;dependency&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;groupId&gt;org.codehaus.jackson&lt;/groupId&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;artifactId&gt;jackson-mapper-asl&lt;/artifactId&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;version&gt;1.7.1&lt;/version&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/dependency&gt;<br />&nbsp;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;!-- Spring 3 dependencies --&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;dependency&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;groupId&gt;org.springframework&lt;/groupId&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;artifactId&gt;spring-core&lt;/artifactId&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;version&gt;${spring.version}&lt;/version&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/dependency&gt;<br />&nbsp;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;dependency&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;groupId&gt;org.springframework&lt;/groupId&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;artifactId&gt;spring-web&lt;/artifactId&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;version&gt;${spring.version}&lt;/version&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/dependency&gt;<br />&nbsp;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;dependency&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;groupId&gt;org.springframework&lt;/groupId&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;artifactId&gt;spring-webmvc&lt;/artifactId&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;version&gt;${spring.version}&lt;/version&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/dependency&gt;<br />&nbsp;<br />&nbsp;&nbsp;&nbsp; &lt;/dependencies&gt;<br /><br />&nbsp;<br />2. Model<br /><br />A simple POJO, later convert this object into JSON output.<br /><br />package com.mkyong.common.model;<br />&nbsp;<br />public class Shop {<br />&nbsp;<br />&nbsp;&nbsp;&nbsp; String name;<br />&nbsp;&nbsp;&nbsp; String staffName[];<br />&nbsp;<br />&nbsp;&nbsp;&nbsp; //getter and setter methods<br />&nbsp;<br />}<br /><br />&nbsp;<br />3. Controller<br /><br />Add &#8220;@ResponseBody&#8221; in the return value, no much detail in the Spring documentation.<br /><br />As i know, when Spring see<br /><br />Jackson library existed on classpath<br />&#8220;mvc:annotation-driven&#8221; is enabled<br />Return method annotated with @ResponseBody<br />It will handle the JSON conversion automatically.<br /><br />package com.mkyong.common.controller;<br />&nbsp;<br />import org.springframework.stereotype.Controller;<br />import org.springframework.web.bind.annotation.PathVariable;<br />import org.springframework.web.bind.annotation.RequestMapping;<br />import org.springframework.web.bind.annotation.RequestMethod;<br />import org.springframework.web.bind.annotation.ResponseBody;<br />import com.mkyong.common.model.Shop;<br />&nbsp;<br />@Controller<br />@RequestMapping("/kfc/brands")<br />public class JSONController {<br />&nbsp;<br />&nbsp;&nbsp;&nbsp; @RequestMapping(value="{name}", method = RequestMethod.GET)<br />&nbsp;&nbsp;&nbsp; public @ResponseBody Shop getShopInJSON(@PathVariable String name) {<br />&nbsp;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Shop shop = new Shop();<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; shop.setName(name);<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; shop.setStaffName(new String[]{"mkyong1", "mkyong2"});<br />&nbsp;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return shop;<br />&nbsp;<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;<br />}<br />4. mvc:annotation-driven<br /><br />Enable &#8220;mvc:annotation-driven&#8221; in your Spring configuration XML file.<br /><br />&lt;beans xmlns="http://www.springframework.org/schema/beans"<br />&nbsp;&nbsp;&nbsp; xmlns:context="http://www.springframework.org/schema/context"<br />&nbsp;&nbsp;&nbsp; xmlns:mvc="http://www.springframework.org/schema/mvc" <br />&nbsp;&nbsp;&nbsp; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />&nbsp;&nbsp;&nbsp; xsi:schemaLocation="<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; http://www.springframework.org/schema/beans&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; http://www.springframework.org/schema/beans/spring-beans-3.0.xsd<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; http://www.springframework.org/schema/context <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; http://www.springframework.org/schema/context/spring-context-3.0.xsd<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; http://www.springframework.org/schema/mvc<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"&gt;<br />&nbsp;<br />&nbsp;&nbsp;&nbsp; &lt;context:component-scan base-package="com.mkyong.common.controller" /&gt;<br />&nbsp;<br />&nbsp;&nbsp;&nbsp; &lt;mvc:annotation-driven /&gt;<br />&nbsp;<br />&lt;/beans&gt;<br />5. Demo<br /><br />URL : http://localhost:8080/SpringMVC/rest/kfc/brands/kfc-kampar<br /><br /><br />Download Source Code<br /><br />Download it &#8211; SpringMVC-JSON-Example.zip (7 KB)<br />References<br /><br />mvc-annotation-driven documentation<br />High-performance JSON processor<br />Spring MVC and XML example<br /><img src ="http://www.blogjava.net/fastzch/aggbug/379962.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fastzch/" target="_blank">Robin's Programming World</a> 2012-06-04 23:06 <a href="http://www.blogjava.net/fastzch/archive/2012/06/04/379962.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Android Media Player 深入观察</title><link>http://www.blogjava.net/fastzch/archive/2011/08/06/355906.html</link><dc:creator>Robin's Programming World</dc:creator><author>Robin's Programming World</author><pubDate>Sat, 06 Aug 2011 00:36:00 GMT</pubDate><guid>http://www.blogjava.net/fastzch/archive/2011/08/06/355906.html</guid><wfw:comment>http://www.blogjava.net/fastzch/comments/355906.html</wfw:comment><comments>http://www.blogjava.net/fastzch/archive/2011/08/06/355906.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/fastzch/comments/commentRss/355906.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fastzch/services/trackbacks/355906.html</trackback:ping><description><![CDATA[1，某些agent不能在同一个流（注意是同一个流）里面支持两种不同的EQ，具体情况如下：
<div>&nbsp;&nbsp;&nbsp;&nbsp;A. Open core，stagefright等agent不支持同时存在join stereo 和 stereo两种类型的音乐数据，否则抛出 onCompeletion 事件。</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;B. QuickTime支持得很好，没问题。</div>
<div><br />
</div>
<div>2，Media Player用流数据的话，如果超过5秒种没有任何数据写入，便会抛出broken pipe异常，这个也是很让人费解的，在网络不好时，常常超过5秒得不到数据。</div>
<div><br />
</div>
<div>3，Android 2.3.3中，低于128K的音乐数据需要很长时间prepare，如果是一个16K的音乐数据，需要超过120秒，据观察，至少需要 250,000 bytes以上数据才能使其prepared. 或许这是为了更好的播放体验在考虑，但是有时候似乎适得其反。</div>
<div><br />
</div>
<div>4，Android 2.2中，低于56K数据的音乐，用流播放时，getCurrentPosition数据不准确，通常播了一秒，这个position只走了400－700ms（依bitrate不同而有所区别）。&nbsp;</div>
<div><br />
</div>
<div>另：ImageView 不支持u.s. web coated (SWOP) color workflow。不管是你放在drawable中，用BitmapFactory去decode，都无法支持。</div>
<div>&nbsp; &nbsp; 其实似乎整个Java都不支持，这个比较奇怪！这可是很流行的一种格式呀！做Java的人的杯具！</div><img src ="http://www.blogjava.net/fastzch/aggbug/355906.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fastzch/" target="_blank">Robin's Programming World</a> 2011-08-06 08:36 <a href="http://www.blogjava.net/fastzch/archive/2011/08/06/355906.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]编写高效的Android代码</title><link>http://www.blogjava.net/fastzch/archive/2010/11/25/339051.html</link><dc:creator>Robin's Programming World</dc:creator><author>Robin's Programming World</author><pubDate>Thu, 25 Nov 2010 10:05:00 GMT</pubDate><guid>http://www.blogjava.net/fastzch/archive/2010/11/25/339051.html</guid><wfw:comment>http://www.blogjava.net/fastzch/comments/339051.html</wfw:comment><comments>http://www.blogjava.net/fastzch/archive/2010/11/25/339051.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fastzch/comments/commentRss/339051.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fastzch/services/trackbacks/339051.html</trackback:ping><description><![CDATA[<div class="blog_content">
<p><span style="color: #000080">虽然如此说，但似乎并没有什么好的办法：Android设备是嵌入式设备。现代的手持设备，与其说是电话，更像一台拿在手中的电脑。但是，即使是&#8220;最快&#8221;的手持设备，其性能也赶不上一台普通的台式电脑。 </span></p>
<p><span style="color: #000080">这就是为什么我们在书写Android应用程序的时候要格外关注效率。这些设备并没有那么快，并且受电池电量的制约。这意味着，设备没有更多的能力，我们必须把程序写的尽量有效。 </span></p>
<p><span style="color: #000080">本章讨论了很多能让开发者使他们的程序运行更有效的方法，遵照这些方法，你可以使你的程序发挥最大的效力。 </span></p>
<p><span style="color: #000080"><a name=".E7.AE.80.E4.BB.8B"></a></span></p>
<h2><span style="color: #000080"><span class="mw-headline">简介</span> </span></h2>
<p><span style="color: #000080">对于占用资源的系统，有两条基本原则： </span></p>
<ul>
    <li><span style="color: #000080">不要做不必要的事 </span></li>
    <li><span style="color: #000080">不要分配不必要的内存</span> </li>
</ul>
<p><span style="color: #000080">所有下面的内容都遵照这两个原则。 </span></p>
<p><span style="color: #000080">有些人可能马上会跳出来，把本节的大部分内容归于&#8220;草率的优化&#8221;（xing:参见[<a class="external text" title="http://blogs.tedneward.com/2007/01/15/The+Root+Of+All+Evil.aspx" href="http://blogs.tedneward.com/2007/01/15/The+Root+Of+All+Evil.aspx" rel="nofollow">The Root of All Evil</a> ]），不可否认微优化（micro-optimization。xing:代码优化，相对于结构优化）的确会带来很多问题，诸如无法使用更有效的数据结构和算法。但是在手持设备上，你别无选择。假如你认为Android虚拟机的性能与台式机相当，你的程序很有可能一开始就占用了系统的全部内存（xing:内存很小），这会让你的程序慢得像蜗牛一样，更遑论做其他的操作了。 </span></p>
<p><span style="color: #000080">Android的成功依赖于你的程序提供的用户体验。而这种用户体验，部分依赖于你的程序是响应快速而灵活的，还是响应缓慢而僵化的。因为所有的程序都运行在同一个设备之上，都在一起，这就如果在同一条路上行驶的汽车。而这篇文档就相当于你在取得驾照之前必须要学习的交通规则。如果大家都按照这些规则去做，驾驶就会很顺畅，但是如果你不这样做，你可能会车毁人亡。这就是为什么这些原则十分重要。 </span></p>
<p><span style="color: #000080">当我们开门见山、直击主题之前，还必须要提醒大家一点：不管VM是否支持实时（JIT）编译器（xing:它允许实时地将Java解释型程序自动编译成本机机器语言，以使程序执行的速度更快。有些JVM包含JIT编译器。），下面提到的这些原则都是成立的。假如我们有目标完全相同的两个方法，在解释执行时foo()比bar()快，那么编译之后，foo()依然会比bar()快。所以不要寄希望于编译器可以拯救你的程序。</span> </p>
<p><span style="color: #000080"><a name=".E9.81.BF.E5.85.8D.E5.BB.BA.E7.AB.8B.E5.AF.B9.E8.B1.A1"></a></span></p>
<h2><span style="color: #000080"><span style="font-size: 15pt" class="mw-headline">避免建立对象 </span></span></h2>
<p><span style="color: #000080">世界上没有免费的对象。虽然GC为每个线程都建立了临时对象池，可以使创建对象的代价变得小一些，但是分配内存永远都比不分配内存的代价大。 </span></p>
<p><span style="color: #000080">如果你在用户界面循环中分配对象内存，就会引发周期性的垃圾回收，用户就会觉得界面像打嗝一样一顿一顿的。 </span></p>
<p><span style="color: #000080">所以，除非必要，应尽量避免尽力对象的实例。下面的例子将帮助你理解这条原则： </span></p>
<ul>
    <li><span style="color: #000080">当你从用户输入的数据中截取一段字符串时，尽量使用substring函数取得原始数据的一个子串，而不是为子串另外建立一份拷贝。这样你就有一个新的String对象，它与原始数据共享一个char数组。 </span></li>
    <li><span style="color: #000080">如果你有一个函数返回一个String对象，而你确切的知道这个字符串会被附加到一个StringBuffer，那么，请改变这个函数的参数和实现方式，直接把结果附加到StringBuffer中，而不要再建立一个短命的临时对象。 </span></li>
</ul>
<p><span style="color: #000080">一个更极端的例子是，把多维数组分成多个一维数组。 </span></p>
<ul>
    <li><span style="color: #000080">int数组比Integer数组好，这也概括了一个基本事实，两个平行的int数组比(int,int)对象数组性能要好<strong>很多</strong> 。同理，这试用于所有基本类型的组合。 </span></li>
    <li><span style="color: #000080">如果你想用一种容器存储(Foo,Bar)元组，尝试使用两个单独的Foo[]数组和Bar[]数组，一定比(Foo,Bar)数组效率更高。（也有例外的情况，就是当你建立一个API，让别人调用它的时候。这时候你要注重对API借口的设计而牺牲一点儿速度。当然在API的内部，你仍要尽可能的提高代码的效率） </span></li>
</ul>
<p><span style="color: #000080">总体来说，就是避免创建短命的临时对象。减少对象的创建就能减少垃圾收集，进而减少对用户体验的影响。 </span></p>
<p><span style="color: #000080"><a name=".E4.BD.BF.E7.94.A8.E6.9C.AC.E5.9C.B0.E6.96.B9.E6.B3.95"></a></span></p>
<h2><span style="color: #000080"><span class="mw-headline">使用本地方法</span> </span></h2>
<p><span style="color: #000080">当你在处理字串的时候，不要吝惜使用String.indexOf(), String.lastIndexOf()等特殊实现的方法（specialty methods）。这些方法都是使用C/C++实现的，比起Java循环快10到100倍。 </span></p>
<p><span style="color: #000080"><a name=".E4.BD.BF.E7.94.A8.E5.AE.9E.E7.B1.BB.E6.AF.94.E6.8E.A5.E5.8F.A3.E5.A5.BD"></a></span></p>
<h2><span style="color: #000080"><span class="mw-headline">使用实类比接口好 </span></span></h2>
<p><span style="color: #000080">假设你有一个HashMap对象，你可以将它声明为HashMap或者Map: </span></p>
<pre><span style="color: #000080">Map myMap1 = new HashMap();
HashMap myMap2 = new HashMap();
</span>
</pre>
<p><span style="color: #000080">哪个更好呢？ </span></p>
<p><span style="color: #000080">按照传统的观点Map会更好些，因为这样你可以改变他的具体实现类，只要这个类继承自Map接口。传统的观点对于传统的程序是正确的，但是它并不适合嵌入式系统。调用一个接口的引用会比调用实体类的引用多花费一倍的时间。 </span></p>
<p><span style="color: #000080">如果HashMap完全适合你的程序，那么使用Map就没有什么价值。如果有些地方你不能确定，先避免使用Map，剩下的交给IDE提供的重构功能好了。(当然公共API是一个例外：一个好的API常常会牺牲一些性能） </span></p>
<p><span style="color: #000080"><a name=".E7.94.A8.E9.9D.99.E6.80.81.E6.96.B9.E6.B3.95.E6.AF.94.E8.99.9A.E6.96.B9.E6.B3.95.E5.A5.BD"></a></span></p>
<h2><span style="color: #000080"><span class="mw-headline">用静态方法比虚方法好</span> </span></h2>
<p><span style="color: #000080">如果你不需要访问一个对象的成员变量，那么请把方法声明成static。虚方法执行的更快，因为它可以被直接调用而不需要一个虚函数表。另外你也可以通过声明体现出这个函数的调用不会改变对象的状态。 </span></p>
<p><span style="color: #000080"><a name=".E4.B8.8D.E7.94.A8getter.E5.92.8Csetter"></a></span></p>
<h2><span style="color: #000080"><span class="mw-headline">不用getter和setter</span> </span></h2>
<p><span style="color: #000080">在很多本地语言如C++中，都会使用getter（比如：i = getCount()）来避免直接访问成员变量（i = mCount）。在C++中这是一个非常好的习惯，因为编译器能够内联访问，如果你需要约束或调试变量，你可以在任何时候添加代码。 </span></p>
<p><span style="color: #000080">在Android上，这就不是个好主意了。虚方法的开销比直接访问成员变量大得多。在通用的接口定义中，可以依照OO的方式定义getters和setters，但是在一般的类中，你应该直接访问变量。 </span></p>
<p><span style="color: #000080"><a name=".E5.B0.86.E6.88.90.E5.91.98.E5.8F.98.E9.87.8F.E7.BC.93.E5.AD.98.E5.88.B0.E6.9C.AC.E5.9C.B0"></a></span></p>
<h2><span style="color: #000080"><span class="mw-headline">将成员变量缓存到本地</span> </span></h2>
<p><span style="color: #000080">访问成员变量比访问本地变量慢得多，下面一段代码： </span></p>
<pre><span style="color: #000080">for (int i = 0; i &lt; this.mCount; i++)
dumpItem(this.mItems[i]);
</span>
</pre>
<p><span style="color: #000080">再好改成这样： </span></p>
<pre><span style="color: #000080"> int count = this.mCount;
Item[] items = this.mItems;
for (int i = 0; i &lt; count; i++)
dumpItems(items[i]);
</span>
</pre>
<p><span style="color: #000080">（使用"this"是为了表明这些是成员变量） </span></p>
<p><span style="color: #000080">另一个相似的原则是：永远不要在for的第二个条件中调用任何方法。如下面方法所示，在每次循环的时候都会调用getCount()方法，这样做比你在一个int先把结果保存起来开销大很多。 </span></p>
<pre><span style="color: #000080">for (int i = 0; i &lt; this.getCount(); i++)
dumpItems(this.getItem(i));
</span>
</pre>
<p><span style="color: #000080">同样如果你要多次访问一个变量，也最好先为它建立一个本地变量，例如： </span></p>
<pre><span style="color: #000080">   protected void drawHorizontalScrollBar(Canvas canvas, int width, int height) {
if (isHorizontalScrollBarEnabled()) {
int size = mScrollBar.getSize(false);
if (size &lt;= 0) {
size = mScrollBarSize;
}
mScrollBar.setBounds(0, height - size, width, height);
mScrollBar.setParams(
computeHorizontalScrollRange(),
computeHorizontalScrollOffset(),
computeHorizontalScrollExtent(), false);
mScrollBar.draw(canvas);
}
}
</span>
</pre>
<p><span style="color: #000080">这里有4次访问成员变量mScrollBar，如果将它缓存到本地，4次成员变量访问就会变成4次效率更高的栈变量访问。 </span></p>
<p><span style="color: #000080">另外就是方法的参数与本地变量的效率相同。 </span></p>
<p><span style="color: #000080"><a name=".E4.BD.BF.E7.94.A8.E5.B8.B8.E9.87.8F"></a></span></p>
<h2><span style="color: #000080"><span class="mw-headline">使用常量</span> </span></h2>
<p><span style="color: #000080">让我们来看看这两段在类前面的声明： </span></p>
<pre><span style="color: #000080">static int intVal = 42;
static String strVal = "Hello, world!";
</span>
</pre>
<p><span style="color: #000080">必以其会生成一个叫做&lt;clinit&gt;的初始化类的方法，当类第一次被使用的时候这个方法会被执行。方法会将42赋给intVal，然后把一个指向类中常量表的引用赋给strVal。当以后要用到这些值的时候，会在成员变量表中查找到他们。下面我们做些改进，使用&#8220;final"关键字： </span></p>
<pre><span style="color: #000080">static final int intVal = 42;
static final String strVal = "Hello, world!";
</span>
</pre>
<p><span style="color: #000080">现在，类不再需要&lt;clinit&gt;方法，因为在成员变量初始化的时候，会将常量直接保存到类文件中。用到intVal的代码被直接替换成42，而使用strVal的会指向一个字符串常量，而不是使用成员变量。 </span></p>
<p><span style="color: #000080">将一个方法或类声明为"final"不会带来性能的提升，但是会帮助编译器优化代码。举例说，如果编译器知道一个"getter"方法不会被重载，那么编译器会对其采用内联调用。 </span></p>
<p><span style="color: #000080">你也可以将本地变量声明为"final"，同样，这也不会带来性能的提升。使用"final"只能使本地变量看起来更清晰些（但是也有些时候这是必须的，比如在使用匿名内部类的时候）（xing:原文是 or you have to, e.g. for use in an anonymous inner class） </span></p>
<p><span style="color: #000080"><a name=".E8.B0.A8.E6.85.8E.E4.BD.BF.E7.94.A8foreach"></a></span></p>
<h2><span style="color: #000080"><span class="mw-headline">谨慎使用foreach</span> </span></h2>
<p><span style="color: #000080">foreach可以用在实现了Iterable接口的集合类型上。foreach会给这些对象分配一个iterator，然后调用 hasNext()和next()方法。你最好使用foreach处理ArrayList对象，但是对其他集合对象，foreach相当于使用 iterator。 </span></p>
<p><span style="color: #000080">下面展示了foreach一种可接受的用法： </span></p>
<pre><span style="color: #000080">public class Foo {
int mSplat;
static Foo mArray[] = new Foo[27];
public static void zero() {
int sum = 0;
for (int i = 0; i &lt; mArray.length; i++) {
sum += mArray[i].mSplat;
}
}
public static void one() {
int sum = 0;
Foo[] localArray = mArray;
int len = localArray.length;
for (int i = 0; i &lt; len; i++) {
sum += localArray[i].mSplat;
}
}
public static void two() {
int sum = 0;
for (Foo a: mArray) {
sum += a.mSplat;
}
}
}
</span>
</pre>
<p><span style="color: #000080">在zero()中，每次循环都会访问两次静态成员变量，取得一次数组的长度。 retrieves the static field twice and gets the array length once for every iteration through the loop. </span></p>
<p><span style="color: #000080">在one()中，将所有成员变量存储到本地变量。 pulls everything out into local variables, avoiding the lookups. </span></p>
<p><span style="color: #000080">two()使用了在java1.5中引入的foreach语法。编译器会将对数组的引用和数组的长度保存到本地变量中，这对访问数组元素非常好。但是编译器还会在每次循环中产生一个额外的对本地变量的存储操作（对变量a的存取）这样会比one()多出4个字节，速度要稍微慢一些。 </span></p>
<p><span style="color: #000080">综上所述：foreach语法在运用于array时性能很好，但是运用于其他集合对象时要小心，因为它会产生额外的对象。 </span></p>
<p><span style="color: #000080"><a name=".E9.81.BF.E5.85.8D.E4.BD.BF.E7.94.A8.E6.9E.9A.E4.B8.BE"></a></span></p>
<h2><span style="color: #000080"><span class="mw-headline">避免使用枚举</span> </span></h2>
<p><span style="color: #000080">枚举变量非常方便，但不幸的是它会牺牲执行的速度和并大幅增加文件体积。例如： </span></p>
<pre><span style="color: #000080">public class Foo {
public enum Shrubbery { GROUND, CRAWLING, HANGING }
}
</span>
</pre>
<p><span style="color: #000080">会产生一个900字节的.class文件(Foo$Shubbery.class)。在它被首次调用时，这个类会调用初始化方法来准备每个枚举变量。每个枚举项都会被声明成一个静态变量，并被赋值。然后将这些静态变量放在一个名为"$VALUES"的静态数组变量中。而这么一大堆代码，仅仅是为了使用三个整数。 </span></p>
<p><span style="color: #000080">这样: </span></p>
<p><span style="color: #000080">Shrubbery shrub = Shrubbery.GROUND;会引起一个对静态变量的引用，如果这个静态变量是final int，那么编译器会直接内联这个常数。 </span></p>
<p><span style="color: #000080">一方面说，使用枚举变量可以让你的API更出色，并能提供编译时的检查。所以在通常的时候你毫无疑问应该为公共API选择枚举变量。但是当性能方面有所限制的时候，你就应该避免这种做法了。 </span></p>
<p><span style="color: #000080">有些情况下，使用ordinal()方法获取枚举变量的整数值会更好一些，举例来说，将： </span></p>
<pre><span style="color: #000080">for (int n = 0; n &lt; list.size(); n++) {
if (list.items[n].e == MyEnum.VAL_X)
// do stuff 1
else if (list.items[n].e == MyEnum.VAL_Y)
// do stuff 2
}
</span>
</pre>
<p><span style="color: #000080">替换为: </span></p>
<pre><span style="color: #000080">  int valX = MyEnum.VAL_X.ordinal();
int valY = MyEnum.VAL_Y.ordinal();
int count = list.size();
MyItem items = list.items();
for (int  n = 0; n &lt; count; n++)
{
int  valItem = items[n].e.ordinal();
if (valItem == valX)
// do stuff 1
else if (valItem == valY)
// do stuff 2
}
</span>
</pre>
<p><span style="color: #000080">会使性能得到一些改善，但这并不是最终的解决之道。 </span></p>
<p><span style="color: #000080"><a name=".E5.B0.86.E4.B8.8E.E5.86.85.E9.83.A8.E7.B1.BB.E4.B8.80.E5.90.8C.E4.BD.BF.E7.94.A8.E7.9A.84.E5.8F.98.E9.87.8F.E5.A3.B0.E6.98.8E.E5.9C.A8.E5.8C.85.E8.8C.83.E5.9B.B4.E5.86.85"></a></span></p>
<h2><span style="color: #000080"><span class="mw-headline">将与内部类一同使用的变量声明在包范围内</span> </span></h2>
<p><span style="color: #000080">请看下面的类定义： </span></p>
<pre><span style="color: #000080">public class Foo {
private int mValue;
public void run() {
Inner in = new Inner();
mValue = 27;
in.stuff();
}
private void doStuff(int value) {
System.out.println("Value is " + value);
}
private class Inner {
void stuff() {
Foo.this.doStuff(Foo.this.mValue);
}
}
}
</span>
</pre>
<p><span style="color: #000080">这其中的关键是，我们定义了一个内部类(Foo$Inner)，它需要访问外部类的私有域变量和函数。这是合法的，并且会打印出我们希望的结果"Value is 27"。 </span></p>
<p><span style="color: #000080">问题是在技术上来讲（在幕后）Foo$Inner是一个完全独立的类，它要直接访问Foo的私有成员是非法的。要跨越这个鸿沟，编译器需要生成一组方法： </span></p>
<pre><span style="color: #000080">/*package*/ static int Foo.access$100(Foo foo) {
return foo.mValue;
}
/*package*/ static void Foo.access$200(Foo foo, int value) {
foo.doStuff(value);
}
</span>
</pre>
<p><span style="color: #000080">内部类在每次访问"mValue"和"doStuff"方法时，都会调用这些静态方法。就是说，上面的代码说明了一个问题，你是在通过接口方法访问这些成员变量和函数而不是直接调用它们。在前面我们已经说过，使用接口方法（getter、setter）比直接访问速度要慢。所以这个例子就是在特定语法下面产生的一个&#8220;隐性的&#8221;性能障碍。 </span></p>
<p><span style="color: #000080">通过将内部类访问的变量和函数声明由私有范围改为包范围，我们可以避免这个问题。这样做可以让代码运行更快，并且避免产生额外的静态方法。（遗憾的是，这些域和方法可以被同一个包内的其他类直接访问，这与经典的OO原则相违背。因此当你设计公共API的时候应该谨慎使用这条优化原则） </span></p>
<p><span style="color: #000080"><a name=".E9.81.BF.E5.85.8D.E4.BD.BF.E7.94.A8.E6.B5.AE.E7.82.B9.E6.95.B0"></a></span></p>
<h2><span style="color: #000080"><span class="mw-headline">避免使用浮点数</span> </span></h2>
<p><span style="color: #000080">在奔腾CPU出现之前，游戏设计者做得最多的就是整数运算。随着奔腾的到来，浮点运算处理器成为了CPU内置的特性，浮点和整数配合使用，能够让你的游戏运行得更顺畅。通常在桌面电脑上，你可以随意的使用浮点运算。 </span></p>
<p><span style="color: #000080">但是非常遗憾，嵌入式处理器通常没有支持浮点运算的硬件，所有对"float"和"double"的运算都是通过软件实现的。一些基本的浮点运算，甚至需要毫秒级的时间才能完成。 </span></p>
<p><span style="color: #000080">甚至是整数，一些芯片有对乘法的硬件支持而缺少对除法的支持。这种情况下，整数的除法和取模运算也是有软件来完成的。所以当你在使用哈希表或者做大量数学运算时一定要小心谨慎。</span></p>
</div>
<img src ="http://www.blogjava.net/fastzch/aggbug/339051.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fastzch/" target="_blank">Robin's Programming World</a> 2010-11-25 18:05 <a href="http://www.blogjava.net/fastzch/archive/2010/11/25/339051.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Android程序完全退出的三种方法</title><link>http://www.blogjava.net/fastzch/archive/2010/10/22/335885.html</link><dc:creator>Robin's Programming World</dc:creator><author>Robin's Programming World</author><pubDate>Fri, 22 Oct 2010 06:48:00 GMT</pubDate><guid>http://www.blogjava.net/fastzch/archive/2010/10/22/335885.html</guid><wfw:comment>http://www.blogjava.net/fastzch/comments/335885.html</wfw:comment><comments>http://www.blogjava.net/fastzch/archive/2010/10/22/335885.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fastzch/comments/commentRss/335885.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fastzch/services/trackbacks/335885.html</trackback:ping><description><![CDATA[<p>很多网友可能发现自己的Android程序有很多Activity，比如说主窗口A，调用了子窗口B，在B中如何关闭整个Android应用程序呢? 这里Android123给大家三种比较简单的方法实现。</p>
<p>首先要说明在B中直接使用finish()，接下来手机显示的还是主窗口A，所以一起来看看Android开发网是如何实现的吧.</p>
<p>1.&nbsp;Dalvik VM的本地方法</p>
<p>android.os.Process.killProcess(android.os.Process.myPid())&nbsp;&nbsp;&nbsp; //获取PID，目前获取自己的也只有该API，否则从/proc中自己的枚举其他进程吧，不过要说明的是，结束其他进程不一定有权限，不然就乱套了。<br />
System.exit(0);&nbsp;&nbsp; //常规java、c#的标准退出法，返回值为0代表正常退出</p>
<p>2. 任务管理器方法</p>
<p>首先要说明该方法运行在Android 1.5 API Level为3以上才可以，同时需要权限android.permission.RESTART_PACKAGES，我们直接结束自己的package即可，直接使用ActivityManager类的restartPackage方法即可，参数为package name，该类通过getSystemService(Context.ACTIVITY_SERVICE)来实例化ActivityManager对象，这种方法系统提供的，但需要显示声明权限，所以使用中需要综合考虑。</p>
<p>3. 根据Activity的声明周期</p>
<p>我们知道Android的窗口类提供了历史栈，我们可以通过stack的原理来巧妙的实现，这里我们在A窗口打开B窗口时在Intent中直接加入标志Intent.FLAG_ACTIVITY_CLEAR_TOP，这样开启B时将会清除该进程空间的所有Activity。</p>
<p>在A窗口中使用下面的代码调用B窗口</p>
<p>Intent intent = new Intent();<br />
intent.setClass(Android123.this, CWJ.class);<br />
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);&nbsp; //注意本行的FLAG设置<br />
startActivity(intent);</p>
<p>接下来在B窗口中需要退出时直接使用finish方法即可全部退出。</p>
<p>转自：<a onclick="javascript:pageTracker._trackPageview('/outgoing/www.android123.com.cn/androidkaifa/519.html');" href="http://www.android123.com.cn/androidkaifa/519.html">http://www.android123.com.cn/androidkaifa/519.html</a></p>
<img src ="http://www.blogjava.net/fastzch/aggbug/335885.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fastzch/" target="_blank">Robin's Programming World</a> 2010-10-22 14:48 <a href="http://www.blogjava.net/fastzch/archive/2010/10/22/335885.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用ANT批量编译Flex应用和模块（Use ANT to batch compiling application and modules of Flex)</title><link>http://www.blogjava.net/fastzch/archive/2010/09/26/332885.html</link><dc:creator>Robin's Programming World</dc:creator><author>Robin's Programming World</author><pubDate>Sun, 26 Sep 2010 00:51:00 GMT</pubDate><guid>http://www.blogjava.net/fastzch/archive/2010/09/26/332885.html</guid><wfw:comment>http://www.blogjava.net/fastzch/comments/332885.html</wfw:comment><comments>http://www.blogjava.net/fastzch/archive/2010/09/26/332885.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/fastzch/comments/commentRss/332885.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fastzch/services/trackbacks/332885.html</trackback:ping><description><![CDATA[ANT提供了对mxmlc命令的支持，可以直接用来编译使用Flex为UI的JavaEE应用，如果你在Flex中也使用Module来作为你每个功能的组织形式，你不妨考虑用如下脚本去编译你的应用：<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">target&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="compileUI"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">echo&nbsp;</span><span style="color: #ff0000">message</span><span style="color: #0000ff">="start&nbsp;to compile&nbsp;Flex&nbsp;UI"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">for&nbsp;</span><span style="color: #ff0000">param</span><span style="color: #0000ff">="file"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">path</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">fileset&nbsp;</span><span style="color: #ff0000">dir</span><span style="color: #0000ff">="${flexsrc.dir}"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">include&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="**/*.mxml"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">fileset</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">path</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">sequential</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">propertyregex&nbsp;</span><span style="color: #ff0000">override</span><span style="color: #0000ff">="yes"</span><span style="color: #ff0000">&nbsp;property</span><span style="color: #0000ff">="compile.target.name"</span><span style="color: #ff0000">&nbsp;input</span><span style="color: #0000ff">="@{file}"</span><span style="color: #ff0000">&nbsp;regexp</span><span style="color: #0000ff">="(.*)src(.*)(mxml)"</span><span style="color: #ff0000">&nbsp;replace</span><span style="color: #0000ff">="\1bin\2swf"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">mxmlc&nbsp;</span><span style="color: #ff0000">file</span><span style="color: #0000ff">="@{file}"</span><span style="color: #ff0000">&nbsp;output</span><span style="color: #0000ff">="${compile.target.name}"</span><span style="color: #ff0000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;services</span><span style="color: #0000ff">="${service.file}"</span><span style="color: #ff0000">&nbsp;context-root</span><span style="color: #0000ff">="${context.root}"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">load-config&nbsp;</span><span style="color: #ff0000">filename</span><span style="color: #0000ff">="${FLEX_HOME}/frameworks/flex-config.xml"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">static-link-runtime-shared-libraries</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">false</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">static-link-runtime-shared-libraries</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">source-path&nbsp;</span><span style="color: #ff0000">path-element</span><span style="color: #0000ff">="${flexsrc.dir}"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;use&nbsp;incremental&nbsp;compiling</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">compiler</span><span style="color: #ff0000">.incremental</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">true</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">compiler.incremental</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">compiler</span><span style="color: #ff0000">.debug</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">false</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">compiler.debug</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;指定外部依赖库文件,这些库文件将不会编译进目标SWF中&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">compiler</span><span style="color: #ff0000">.external-library-path&nbsp;dir</span><span style="color: #0000ff">="${flexlib.dir}"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">include&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="**/*.swc"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">compiler.external-library-path</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">mxmlc</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;清除缓存文件&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;delete&nbsp;file="${compile.target.name}.cache"&nbsp;/&gt;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">echo&nbsp;</span><span style="color: #ff0000">message</span><span style="color: #0000ff">="Compiled&nbsp;@{file}&nbsp;=====&gt;&gt;&nbsp;&nbsp;&nbsp;${compile.target.name}"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">sequential</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">for</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">target</span><span style="color: #0000ff">&gt;</span></div>
<br />
<br />
注意事项：<br />
1，必须使用ant-contrib包来支持for任务，使用for任务时，别忘了如下声明：<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">path&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="ant.classpath"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">fileset&nbsp;</span><span style="color: #ff0000">dir</span><span style="color: #0000ff">="${ant.lib.dir}"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">include&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="*.jar"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">fileset</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">path</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">taskdef&nbsp;</span><span style="color: #ff0000">resource</span><span style="color: #0000ff">="net/sf/antcontrib/antlib.xml"</span><span style="color: #ff0000">&nbsp;classpathref</span><span style="color: #0000ff">="ant.classpath"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span></div>
<br />
2，编译每个mxml时，可用propertyregex来得到output文件名，<br />
3，source-path一定不能写错，或随便写，如果这样的话，会出现如下错误：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Error: A file found in a source-path must have the same package structure<br />
4，如果在运行的过程中出现Java heap size或permGen不足的情况，可以指定如下系统参数：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ANT_OPTS=-XX:MaxPermSize=256M -Xmx1024m 
<img src ="http://www.blogjava.net/fastzch/aggbug/332885.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fastzch/" target="_blank">Robin's Programming World</a> 2010-09-26 08:51 <a href="http://www.blogjava.net/fastzch/archive/2010/09/26/332885.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Investigate getDeclaredMethod of Java Reflection</title><link>http://www.blogjava.net/fastzch/archive/2010/08/12/328667.html</link><dc:creator>Robin's Programming World</dc:creator><author>Robin's Programming World</author><pubDate>Thu, 12 Aug 2010 06:48:00 GMT</pubDate><guid>http://www.blogjava.net/fastzch/archive/2010/08/12/328667.html</guid><wfw:comment>http://www.blogjava.net/fastzch/comments/328667.html</wfw:comment><comments>http://www.blogjava.net/fastzch/archive/2010/08/12/328667.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/fastzch/comments/commentRss/328667.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fastzch/services/trackbacks/328667.html</trackback:ping><description><![CDATA[今天调试别人写的程序的时候，发现总出NoSuchMethodException，经过一翻跟踪，原来是getDeclaredMethod() 中报出来的,遂进行一翻调查：<br />
<br />
假设我有两个类，TestB继承TestA，如下：<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img id="Codehighlighter1_19_44_Open_Image" onclick="this.style.display='none'; Codehighlighter1_19_44_Open_Text.style.display='none'; Codehighlighter1_19_44_Closed_Image.style.display='inline'; Codehighlighter1_19_44_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" /><img style="display: none" id="Codehighlighter1_19_44_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_19_44_Closed_Text.style.display='none'; Codehighlighter1_19_44_Open_Image.style.display='inline'; Codehighlighter1_19_44_Open_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;TestA&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_19_44_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_19_44_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_39_42_Open_Image" onclick="this.style.display='none'; Codehighlighter1_39_42_Open_Text.style.display='none'; Codehighlighter1_39_42_Closed_Image.style.display='inline'; Codehighlighter1_39_42_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="display: none" id="Codehighlighter1_39_42_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_39_42_Closed_Text.style.display='none'; Codehighlighter1_39_42_Open_Image.style.display='inline'; Codehighlighter1_39_42_Open_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;tt()&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_39_42_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_39_42_Open_Text"><span style="color: #000000">{<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span></div>
<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img id="Codehighlighter1_33_59_Open_Image" onclick="this.style.display='none'; Codehighlighter1_33_59_Open_Text.style.display='none'; Codehighlighter1_33_59_Closed_Image.style.display='inline'; Codehighlighter1_33_59_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" /><img style="display: none" id="Codehighlighter1_33_59_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_33_59_Closed_Text.style.display='none'; Codehighlighter1_33_59_Open_Image.style.display='inline'; Codehighlighter1_33_59_Open_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;TestB&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;TestA&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_33_59_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_33_59_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_54_57_Open_Image" onclick="this.style.display='none'; Codehighlighter1_54_57_Open_Text.style.display='none'; Codehighlighter1_54_57_Closed_Image.style.display='inline'; Codehighlighter1_54_57_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="display: none" id="Codehighlighter1_54_57_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_54_57_Closed_Text.style.display='none'; Codehighlighter1_54_57_Open_Image.style.display='inline'; Codehighlighter1_54_57_Open_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;aaa()&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_54_57_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_54_57_Open_Text"><span style="color: #000000">{<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span></div>
另有一个带main方法的主程序：<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.lang.reflect.Method;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><br />
<img id="Codehighlighter1_52_281_Open_Image" onclick="this.style.display='none'; Codehighlighter1_52_281_Open_Text.style.display='none'; Codehighlighter1_52_281_Closed_Image.style.display='inline'; Codehighlighter1_52_281_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" /><img style="display: none" id="Codehighlighter1_52_281_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_52_281_Closed_Text.style.display='none'; Codehighlighter1_52_281_Open_Image.style.display='inline'; Codehighlighter1_52_281_Open_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Test&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_52_281_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_52_281_Open_Text"><span style="color: #000000">{<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" /><br />
<img id="Codehighlighter1_95_278_Open_Image" onclick="this.style.display='none'; Codehighlighter1_95_278_Open_Text.style.display='none'; Codehighlighter1_95_278_Closed_Image.style.display='inline'; Codehighlighter1_95_278_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="display: none" id="Codehighlighter1_95_278_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_95_278_Closed_Text.style.display='none'; Codehighlighter1_95_278_Open_Image.style.display='inline'; Codehighlighter1_95_278_Open_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_95_278_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_95_278_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_103_225_Open_Image" onclick="this.style.display='none'; Codehighlighter1_103_225_Open_Text.style.display='none'; Codehighlighter1_103_225_Closed_Image.style.display='inline'; Codehighlighter1_103_225_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="display: none" id="Codehighlighter1_103_225_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_103_225_Closed_Text.style.display='none'; Codehighlighter1_103_225_Open_Image.style.display='inline'; Codehighlighter1_103_225_Open_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000">&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_103_225_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_103_225_Open_Text"><span style="color: #000000">{<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TestB&nbsp;b</span><span style="color: #000000">=</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;TestB();<br />
<img id="Codehighlighter1_192_193_Open_Image" onclick="this.style.display='none'; Codehighlighter1_192_193_Open_Text.style.display='none'; Codehighlighter1_192_193_Closed_Image.style.display='inline'; Codehighlighter1_192_193_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="display: none" id="Codehighlighter1_192_193_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_192_193_Closed_Text.style.display='none'; Codehighlighter1_192_193_Open_Image.style.display='inline'; Codehighlighter1_192_193_Open_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;m&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;b.getClass().getDeclaredMethod(</span><span style="color: #000000">"</span><span style="color: #000000">tt</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Class&nbsp;[]</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_192_193_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_192_193_Open_Text"><span style="color: #000000">{}</span></span><span style="color: #000000">);<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(m);<br />
<img id="Codehighlighter1_247_275_Open_Image" onclick="this.style.display='none'; Codehighlighter1_247_275_Open_Text.style.display='none'; Codehighlighter1_247_275_Closed_Image.style.display='inline'; Codehighlighter1_247_275_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="display: none" id="Codehighlighter1_247_275_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_247_275_Closed_Text.style.display='none'; Codehighlighter1_247_275_Open_Image.style.display='inline'; Codehighlighter1_247_275_Open_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(Exception&nbsp;e)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_247_275_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_247_275_Open_Text"><span style="color: #000000">{<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" /><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span></div>
这个程序就会抛出如下异常：<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><span style="color: #000000">java.lang.NoSuchMethodException:&nbsp;TestB.tt()<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.lang.Class.getDeclaredMethod(Class.java:</span><span style="color: #000000">1937</span><span style="color: #000000">)<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;Test.main(Test.java:</span><span style="color: #000000">8</span><span style="color: #000000">)</span></div>
<br />
给我直观的感觉就是不能反射父类中的方法，但是为什么了？JDK的文档里也没有写说不行呀？<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><span style="color: #000000">getDeclaredMethod<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Method&nbsp;getDeclaredMethod(String&nbsp;name,<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class<img alt="" src="http://www.blogjava.net/Images/dot.gif" />&nbsp;parameterTypes)<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;NoSuchMethodException,<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SecurityException返回一个&nbsp;Method&nbsp;对象，该对象反映此&nbsp;Class&nbsp;对象所表示的类或接口的指定已声明方法。name&nbsp;参数是一个&nbsp;String，它指定所需方法的简称，parameterTypes&nbsp;参数是&nbsp;Class&nbsp;对象的一个数组，它按声明顺序标识该方法的形式参数类型。如果在某个类中声明了带有相同参数类型的多个方法，并且其中有一个方法的返回类型比其他方法的返回类型都特殊，则返回该方法；否则将从中任选一个方法。如果名称是&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&lt;init&gt;&#8221;&nbsp;或&nbsp;&#8220;&lt;clinit&gt;</span><span style="color: #000000">"</span><span style="color: #000000">，则引发一个&nbsp;NoSuchMethodException。&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />参数：<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />name&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;方法名<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />parameterTypes&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;参数数组&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />返回：<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />该类与指定名和参数相匹配的方法的&nbsp;Method&nbsp;对象&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />抛出：&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />NoSuchMethodException&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;如果找不到匹配的方法。&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />NullPointerException&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;如果&nbsp;name&nbsp;为&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />SecurityException&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;如果存在安全管理器&nbsp;s，并满足下列任一条件：&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />调用&nbsp;s.checkMemberAccess(</span><span style="color: #0000ff">this</span><span style="color: #000000">,&nbsp;Member.DECLARED)&nbsp;拒绝访问已声明方法&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />调用方的类加载器不同于也不是该类的类加载器的一个祖先，并且对&nbsp;s.checkPackageAccess()&nbsp;的调用拒绝访问该类的包&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />从以下版本开始：&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />JDK1.</span><span style="color: #000000">1</span><span style="color: #000000">&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span></div>
<br />
这是为什么了?用javap来看看字节码：执行javap -c TestA 得到如下结果：<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><span style="color: #000000">Compiled&nbsp;from&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">TestA.java</span><span style="color: #000000">"</span><span style="color: #000000"><br />
<img id="Codehighlighter1_70_237_Open_Image" onclick="this.style.display='none'; Codehighlighter1_70_237_Open_Text.style.display='none'; Codehighlighter1_70_237_Closed_Image.style.display='inline'; Codehighlighter1_70_237_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" /><img style="display: none" id="Codehighlighter1_70_237_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_70_237_Closed_Text.style.display='none'; Codehighlighter1_70_237_Open_Image.style.display='inline'; Codehighlighter1_70_237_Open_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;TestA&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;java.lang.Object</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_70_237_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_70_237_Open_Text"><span style="color: #000000">{<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;TestA();<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;Code:<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">:&nbsp;&nbsp;&nbsp;aload_0<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">:&nbsp;&nbsp;&nbsp;invokespecial&nbsp;&nbsp;&nbsp;#</span><span style="color: #000000">8</span><span style="color: #000000">;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Method&nbsp;java/lang/Object."&lt;init&gt;":()V</span><span style="color: #008000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">4</span><span style="color: #000000">:&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" /><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;tt();<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;Code:<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">:&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" /><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span></div>
<br />
再执行javap -c TestB<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><span style="color: #000000">Compiled&nbsp;from&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">TestB.java</span><span style="color: #000000">"</span><span style="color: #000000"><br />
<img id="Codehighlighter1_59_216_Open_Image" onclick="this.style.display='none'; Codehighlighter1_59_216_Open_Text.style.display='none'; Codehighlighter1_59_216_Closed_Image.style.display='inline'; Codehighlighter1_59_216_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" /><img style="display: none" id="Codehighlighter1_59_216_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_59_216_Closed_Text.style.display='none'; Codehighlighter1_59_216_Open_Image.style.display='inline'; Codehighlighter1_59_216_Open_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;TestB&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;TestA</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_59_216_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_59_216_Open_Text"><span style="color: #000000">{<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;TestB();<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;Code:<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">:&nbsp;&nbsp;&nbsp;aload_0<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">:&nbsp;&nbsp;&nbsp;invokespecial&nbsp;&nbsp;&nbsp;#</span><span style="color: #000000">8</span><span style="color: #000000">;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Method&nbsp;TestA."&lt;init&gt;":()V</span><span style="color: #008000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">4</span><span style="color: #000000">:&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" /><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;aaa();<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;Code:<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">:&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" /><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span></div>
<br />
原来如此，在TestB的字节码中，我们无法找到TestA中定义的tt()方法。我想这就是为什么了。 
<img src ="http://www.blogjava.net/fastzch/aggbug/328667.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fastzch/" target="_blank">Robin's Programming World</a> 2010-08-12 14:48 <a href="http://www.blogjava.net/fastzch/archive/2010/08/12/328667.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse空心J图标的含义</title><link>http://www.blogjava.net/fastzch/archive/2010/08/03/327821.html</link><dc:creator>Robin's Programming World</dc:creator><author>Robin's Programming World</author><pubDate>Tue, 03 Aug 2010 07:15:00 GMT</pubDate><guid>http://www.blogjava.net/fastzch/archive/2010/08/03/327821.html</guid><wfw:comment>http://www.blogjava.net/fastzch/comments/327821.html</wfw:comment><comments>http://www.blogjava.net/fastzch/archive/2010/08/03/327821.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fastzch/comments/commentRss/327821.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fastzch/services/trackbacks/327821.html</trackback:ping><description><![CDATA[<p>有朋友遇到一个问题，在Eclipse中Java文件图标由实心J变成空心J的问题。<br />
<br />
空心J的java文件，不被包含在项目中进行编译，而是当做资源存在项目中。</p>
<p>解决办法：</p>
<p>右击该文件 --&gt; BuildPath --&gt; Include</p>
<p>正常实心J时，该选项为 Exclude</p>
<img src ="http://www.blogjava.net/fastzch/aggbug/327821.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fastzch/" target="_blank">Robin's Programming World</a> 2010-08-03 15:15 <a href="http://www.blogjava.net/fastzch/archive/2010/08/03/327821.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Memcached Study Notes</title><link>http://www.blogjava.net/fastzch/archive/2010/07/21/326715.html</link><dc:creator>Robin's Programming World</dc:creator><author>Robin's Programming World</author><pubDate>Wed, 21 Jul 2010 03:01:00 GMT</pubDate><guid>http://www.blogjava.net/fastzch/archive/2010/07/21/326715.html</guid><wfw:comment>http://www.blogjava.net/fastzch/comments/326715.html</wfw:comment><comments>http://www.blogjava.net/fastzch/archive/2010/07/21/326715.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/fastzch/comments/commentRss/326715.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fastzch/services/trackbacks/326715.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: What is Memcached?Free &amp; open source, high-performance, distributed memory object caching system, generic in nature, but intended for use in speeding up dynamic web applications by alleviating d...&nbsp;&nbsp;<a href='http://www.blogjava.net/fastzch/archive/2010/07/21/326715.html'>阅读全文</a><img src ="http://www.blogjava.net/fastzch/aggbug/326715.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fastzch/" target="_blank">Robin's Programming World</a> 2010-07-21 11:01 <a href="http://www.blogjava.net/fastzch/archive/2010/07/21/326715.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>BlazeDS自定义认证与权限控制</title><link>http://www.blogjava.net/fastzch/archive/2010/04/28/319555.html</link><dc:creator>Robin's Programming World</dc:creator><author>Robin's Programming World</author><pubDate>Wed, 28 Apr 2010 01:56:00 GMT</pubDate><guid>http://www.blogjava.net/fastzch/archive/2010/04/28/319555.html</guid><wfw:comment>http://www.blogjava.net/fastzch/comments/319555.html</wfw:comment><comments>http://www.blogjava.net/fastzch/archive/2010/04/28/319555.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/fastzch/comments/commentRss/319555.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fastzch/services/trackbacks/319555.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在昨天的文章《BlazeDS结合Tomcat进行权限控制》中，讲述了BlazeDS如何在Tomcat环境下进行权限控制，但是我们不难发现有很多缺点，甚至有一些都是致命的，比如不能跨平台（中间件），甚至不能跨版本，还有用户名角色等配置不能自定义配置在RDBMS，文件或其它地方等。所以今天我要分享给大家如何摆脱这些限制，避免这些不利因素。所幸的是，BlazeDS的设计者们已经为我们想到了这些，...&nbsp;&nbsp;<a href='http://www.blogjava.net/fastzch/archive/2010/04/28/319555.html'>阅读全文</a><img src ="http://www.blogjava.net/fastzch/aggbug/319555.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fastzch/" target="_blank">Robin's Programming World</a> 2010-04-28 09:56 <a href="http://www.blogjava.net/fastzch/archive/2010/04/28/319555.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>BlazeDS结合Tomcat进行权限控制</title><link>http://www.blogjava.net/fastzch/archive/2010/04/27/319428.html</link><dc:creator>Robin's Programming World</dc:creator><author>Robin's Programming World</author><pubDate>Tue, 27 Apr 2010 01:56:00 GMT</pubDate><guid>http://www.blogjava.net/fastzch/archive/2010/04/27/319428.html</guid><wfw:comment>http://www.blogjava.net/fastzch/comments/319428.html</wfw:comment><comments>http://www.blogjava.net/fastzch/archive/2010/04/27/319428.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fastzch/comments/commentRss/319428.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fastzch/services/trackbacks/319428.html</trackback:ping><description><![CDATA[<br />
环境：<br />
BlazeDS 3.2.0.3978<br />
Tomcat 6.0.29 (本例在Tomcat 5.5中不能正常运行，因为Tomcat 5.5的context部分的设计与6.0不一样)<br />
Java5 <br />
<br />
1，在service-config.xml中加入认证和角色（组）的定义：<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">security</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">login-command&nbsp;</span><span style="color: #ff0000">class</span><span style="color: #0000ff">="flex.messaging.security.TomcatLoginCommand"</span><span style="color: #ff0000">&nbsp;server</span><span style="color: #0000ff">="Tomcat"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">security-constraint&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="trusted"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">auth-method</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">Basic</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">auth-method</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">roles</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">role</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">tomcat</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">role</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">roles</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">security-constraint</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">security-constraint&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="users"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">auth-method</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">Basic</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">auth-method</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">roles</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">role</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">role1</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">role</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">role</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">tomcat</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">role</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">roles</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">security-constraint</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">security</span><span style="color: #0000ff">&gt;</span></div>
需要说明的是，这里的security-constraint tag相当于一个角色组，其id属性就是角色组的ID，如users角色组包含role1和tomcat两个角色。<br />
auth-method tag表示认证的方式，Basic即采用HTTP Basic认证方式，也可以自己实现认证方式，可调定为Custom，关于此种认证方式，我将在稍后分享给大家。<br />
<br />
这些角色和用户，均被定义在Tomcat的conf/tomcat-users.xml配置中：<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><span style="color: #0000ff">&lt;?</span><span style="color: #ff00ff">xml&nbsp;version='1.0'&nbsp;encoding='utf-8'</span><span style="color: #0000ff">?&gt;</span><span style="color: #000000"><br />
</span><span style="color: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">tomcat-users</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span><span style="color: #008000">&lt;!--</span><span style="color: #008000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;NOTE:&nbsp;&nbsp;By&nbsp;default,&nbsp;no&nbsp;user&nbsp;is&nbsp;included&nbsp;in&nbsp;the&nbsp;"manager"&nbsp;role&nbsp;required<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;to&nbsp;operate&nbsp;the&nbsp;"/manager"&nbsp;web&nbsp;application.&nbsp;&nbsp;If&nbsp;you&nbsp;wish&nbsp;to&nbsp;use&nbsp;this&nbsp;app,<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;you&nbsp;must&nbsp;define&nbsp;such&nbsp;a&nbsp;user&nbsp;-&nbsp;the&nbsp;username&nbsp;and&nbsp;password&nbsp;are&nbsp;arbitrary.<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span><span style="color: #008000">&lt;!--</span><span style="color: #008000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;NOTE:&nbsp;&nbsp;The&nbsp;sample&nbsp;user&nbsp;and&nbsp;role&nbsp;entries&nbsp;below&nbsp;are&nbsp;wrapped&nbsp;in&nbsp;a&nbsp;comment<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;and&nbsp;thus&nbsp;are&nbsp;ignored&nbsp;when&nbsp;reading&nbsp;this&nbsp;file.&nbsp;Do&nbsp;not&nbsp;forget&nbsp;to&nbsp;remove<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&lt;!..&nbsp;..&gt;&nbsp;that&nbsp;surrounds&nbsp;them.<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">role&nbsp;</span><span style="color: #ff0000">rolename</span><span style="color: #0000ff">="tomcat"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">role&nbsp;</span><span style="color: #ff0000">rolename</span><span style="color: #0000ff">="role1"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">role&nbsp;</span><span style="color: #ff0000">rolename</span><span style="color: #0000ff">="manager"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">user&nbsp;</span><span style="color: #ff0000">username</span><span style="color: #0000ff">="admin"</span><span style="color: #ff0000">&nbsp;password</span><span style="color: #0000ff">="admin"</span><span style="color: #ff0000">&nbsp;roles</span><span style="color: #0000ff">="manager"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">user&nbsp;</span><span style="color: #ff0000">username</span><span style="color: #0000ff">="tomcat"</span><span style="color: #ff0000">&nbsp;password</span><span style="color: #0000ff">="tomcat"</span><span style="color: #ff0000">&nbsp;roles</span><span style="color: #0000ff">="tomcat"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">user&nbsp;</span><span style="color: #ff0000">username</span><span style="color: #0000ff">="both"</span><span style="color: #ff0000">&nbsp;password</span><span style="color: #0000ff">="tomcat"</span><span style="color: #ff0000">&nbsp;roles</span><span style="color: #0000ff">="tomcat,role1"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">user&nbsp;</span><span style="color: #ff0000">username</span><span style="color: #0000ff">="role1"</span><span style="color: #ff0000">&nbsp;password</span><span style="color: #0000ff">="tomcat"</span><span style="color: #ff0000">&nbsp;roles</span><span style="color: #0000ff">="role1"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">tomcat-users</span><span style="color: #0000ff">&gt;</span></div>
<br />
<br />
2，在remote-config.xml中配置具体的destination的权限约束：<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">destination&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="Domain"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">properties</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">source</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">com.robin.service.domain.DomainService</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">source</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">include-methods</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">method&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="getAllDomains"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">method&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="addOrUpdateDomain"</span><span style="color: #ff0000">&nbsp;security-constraint</span><span style="color: #0000ff">="trusted"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">include-methods</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">properties</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">security</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">security-constraint&nbsp;</span><span style="color: #ff0000">ref</span><span style="color: #0000ff">="users"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">security</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">destination</span><span style="color: #0000ff">&gt;</span></div>
在此配置中，定义所有的方法只要是users角色组中的用户即可访问，但是addOrUpdateDomain方法需要trusted角色组中的用户才能访问。<br />
<br />
3，将BlazeDS与Tomcat结合所依赖的lib复制到lib目录中，包含flex-tomcat-common.jar和flex-tomcat-server.jar两个JAR。<br />
<br />
4，修改Tomcat目录下的conf/context.xml文件，加入如下Context（在Tomcat5.5中无法成功）：<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">Valve&nbsp;</span><span style="color: #ff0000">className</span><span style="color: #0000ff">="flex.messaging.security.TomcatValve"</span><span style="color: #0000ff">/&gt;</span></div>
<br />
好了，就这么简单，重启Tomcat，即可验证了。<br />
<br />
总结一下：<br />
1，引入了角色组的概念，这个比较好。<br />
2，角色和用户定义依赖于Tomcat，无法定义在如DBMS中，不方便修改。<br />
3，跨平台性不好。<br />
4，资源与权限的映射关系在开发时已经绑定死，无法动态修改。 <br />
<br />
<br />
PS：2010.4.28. 分享给大家不依赖Tomcat容器实现认证与授权的例子，如有需要，请参考：《<a id="viewpost1_TitleUrl" class="postTitle2" href="http://www.blogjava.net/fastzch/archive/2010/04/28/319555.html">BlazeDS自定义认证与权限控制</a>》<br />
<br />
<font color="#ff0000">本Blog所有内容不得随意转载，版权属于作者所有。如需转载请与作者联系（</font> <a href="mailto:fastzch@163.com"><font style="background-color: #ffffff" color="#ff0000">fastzch@163.com</font> </a><font style="background-color: #ffffff" color="#ff0000">&nbsp;&nbsp; QQ：9184314）。<br />
未经许可的转载，本人保留一切法律权益。<br />
一直以来，发现有某些人完全不尊重我的劳动成果，随意转载，提醒一下那些人小心哪天惹上官司。</font><br />
<img src ="http://www.blogjava.net/fastzch/aggbug/319428.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fastzch/" target="_blank">Robin's Programming World</a> 2010-04-27 09:56 <a href="http://www.blogjava.net/fastzch/archive/2010/04/27/319428.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IBM稍然提供Websphere application server 8.0 alpha版本下载</title><link>http://www.blogjava.net/fastzch/archive/2010/04/13/318171.html</link><dc:creator>Robin's Programming World</dc:creator><author>Robin's Programming World</author><pubDate>Tue, 13 Apr 2010 08:29:00 GMT</pubDate><guid>http://www.blogjava.net/fastzch/archive/2010/04/13/318171.html</guid><wfw:comment>http://www.blogjava.net/fastzch/comments/318171.html</wfw:comment><comments>http://www.blogjava.net/fastzch/archive/2010/04/13/318171.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fastzch/comments/commentRss/318171.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fastzch/services/trackbacks/318171.html</trackback:ping><description><![CDATA[今天例行去<a title="IBM DW" href="https://www.ibm.com/developerworks/">IBM DW</a>社区&#8220;巡查&#8221;，发现已经稍然提供Websphere application server 8.0 alpha版本下载，URL如下：<br />
http://www14.software.ibm.com/webapp/download/preconfig.jsp?id=2010-03-30+14%3A40%3A55.882659R&amp;S_TACT=104CBW71&amp;S_CMP=<br />
<br />
比较奇怪的是，似乎在中国大陆无法下载，本想试用一下的，没下载了，只能再等等了。相关介绍文档也没有看到。<br />
<br />
如果有朋友发现相关信息别忘了告诉我一声啊！
<img src ="http://www.blogjava.net/fastzch/aggbug/318171.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fastzch/" target="_blank">Robin's Programming World</a> 2010-04-13 16:29 <a href="http://www.blogjava.net/fastzch/archive/2010/04/13/318171.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>BlazeDS Study Notes -- Channel &amp; Endpoint</title><link>http://www.blogjava.net/fastzch/archive/2010/04/07/317619.html</link><dc:creator>Robin's Programming World</dc:creator><author>Robin's Programming World</author><pubDate>Wed, 07 Apr 2010 02:27:00 GMT</pubDate><guid>http://www.blogjava.net/fastzch/archive/2010/04/07/317619.html</guid><wfw:comment>http://www.blogjava.net/fastzch/comments/317619.html</wfw:comment><comments>http://www.blogjava.net/fastzch/archive/2010/04/07/317619.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fastzch/comments/commentRss/317619.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fastzch/services/trackbacks/317619.html</trackback:ping><description><![CDATA[<p>The following example shows a RemoteObject component that defines a channel set and channel inline in MXML:<br />
...<br />
&lt;RemoteObject id="ro" destination="Dest"&gt;<br />
&lt;mx:channelSet&gt;<br />
&lt;mx:ChannelSet&gt;<br />
&lt;mx:channels&gt;<br />
&lt;mx:AMFChannel id="myAmf"<br />
uri="http://myserver:2000/myapp/messagebroker/amf"/&gt;<br />
&lt;/mx:channels&gt;<br />
&lt;/mx:ChannelSet&gt;<br />
&lt;/mx:channelSet&gt;<br />
&lt;/RemoteObject&gt;</p>
<p><br />
The following example shows ActionScript code that is equivalent to the MXML code in the previous example:<br />
private function run():void {<br />
&nbsp;ro = new RemoteObject();<br />
&nbsp;var cs:ChannelSet = new ChannelSet(); <br />
&nbsp;cs.addChannel(new AMFChannel("myAmf", <br />
&nbsp;"http://servname:2000/eqa/messagebroker/amf"));<br />
&nbsp;ro.destination = "Dest"; <br />
&nbsp;ro.channelSet = cs;<br />
}</p>
<p>Important: When you create a channel on the client, you must still include a channel definition that specifies an endpoint class in the services-config.xml file. Otherwise, the message broker cannot pass a Flex client request to an endpoint.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Assigning channels and endpoints to a destination<br />
1,If most of the destinations across all services use the same channels, you can define application-level default channels in the services-config.xml file, as the following example shows.<br />
Note: Using application-level default channels is a best practice whenever possible. <br />
&lt;services-config ...&gt;<br />
...<br />
&lt;default-channels&gt;<br />
&lt;channel ref="my-http"/&gt;<br />
&lt;channel ref="my-amf"/&gt;<br />
&lt;/default-channels&gt;<br />
...<br />
In this case, all destinations that do not define channels use a default channel. Destinations can override the <br />
default channel setting by specifying their own channels, and services can also override it by specifying their own <br />
default channels.<br />
2,If most of the destinations in a service use the same channels, you can define service-level default channels, as <br />
the following example shows:<br />
&lt;service ...&gt;<br />
...<br />
&lt;default-channels&gt;<br />
&lt;channel ref="my-http"/&gt;<br />
&lt;channel ref="my-amf"/&gt;<br />
&lt;/default-channels&gt;<br />
...<br />
In this case, all destinations in the service that do not explicitly specify their own channels use the default <br />
channel. <br />
3,The destination definition can reference a channel inline, as the following example shows:<br />
&lt;destination id="sampleVerbose"&gt;<br />
&lt;channels&gt;<br />
&lt;channel ref="my-secure-amf"/&gt;<br />
&lt;/channels&gt;<br />
...<br />
&lt;/destination&gt;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>How to choosing a channel?<br />
1, Non-polling AMF and HTTP channels<br />
You can use AMF and HTTP channels without polling for remote procedure call (RPC) services, such as remoting service calls, proxied HTTP service calls and web service requests. These scenarios do not require the client to poll for messages or the server to push messages to the client.<br />
2, Piggybacking on AMF and HTTP channels<br />
The piggybacking feature enables the transport of queued messages along with responses to any messages the client sends to the server over the channel. Piggybacking provides lightweight pseudo polling, where rather than the client channel polling the server on a fixed or adaptive interval, when the client sends a non-command message to the server (using a Producer or RemoteObject object), the server sends any pending data for client messaging or data management subscriptions along with the response to the client message. <br />
Piggybacking can also be used on a channel that has polling enabled but on a wide interval like 5 seconds or 10 seconds or more, in which case the application appears more responsive if the client is sending messages to the server. In this mode, the client sends a poll request along with any messages it sends to the server between its regularly scheduled poll requests. The channel piggybacks a poll request along with the message being sent, and the server piggybacks any pending messages for the client along with the acknowledge response to the client message.<br />
3, Polling AMF and HTTP channels<br />
AMF and HTTP channels support simple polling mechanisms that clients can use to request messages from the server at set intervals. A polling AMF or HTTP channel is useful when other options such as long polling or streaming channels are not acceptable and also as a fallback channel when a first choice, such as a streaming channel, is unavailable at run time. <br />
4, Long polling AMF and HTTP channels<br />
You can use AMF and HTTP channels in long polling mode to get pushed messages to the client when the other more efficient and real-time mechanisms are not suitable. This mechanism uses the normal application server HTTP request processing logic and works with typical J2EE deployment architectures. <br />
You can establish long polling for any channel that uses a non-streaming AMF or HTTP endpoint by setting the polling-enabled ,&nbsp; polling-interval-millis ,&nbsp; wait-interval-millis , and&nbsp; client-wait-interval-<br />
millis&nbsp; properties in a channel definition.<br />
5, Streaming channels<br />
For streaming, you can use streaming AMF or HTTP channels. Streaming AMF and HTTP channels work with streaming AMF or HTTP endpoints.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><br />
Long polling AMF and HTTP channels<br />
In the default configuration for a polling AMF or HTTP channel, the endpoint does not wait for messages on the server. When the poll request is received, it checks whether any messages are queued for the polling client and if so, those messages are delivered in the response to the HTTP request. You configure long polling in the same way as polling, but you also must set the&nbsp; wait-interval-millis ,&nbsp; max-waiting-poll-requests , and client-wait-interval-millis&nbsp; properties. <br />
在一个polling AMF或HTTP channel默认配置下，服务端endpoint不会等待消息，当轮询请求被收到时，它检查任何消息是否排队等待轮询的客户端，如果是，这些消息被交付给HTTP请求的响应。<br />
To achieve long polling, you set the following properties in the&nbsp; properties&nbsp; section of a channel definition in the services-config.xml file:<br />
polling-enabled<br />
polling-interval-millis<br />
wait-interval-millis&nbsp; <br />
max-waiting-poll-requests .<br />
client-wait-interval-millis</p>
<p><br />
下面分别讲一下前面提到的几种模式：<br />
1)无轮询AMF、HTTP通道<br />
你可以使用这些通道无轮询的方式来提供RPC 服务，比如远程服务调用、代理HTTP服务调用以及Web service请求。这些方案不要求客户端轮询信息或者服务端将消息&#8220;推&#8221;给客户端。<br />
&lt;!-- Simple AMF --&gt;<br />
&lt;channel-definition id="samples-amf"<br />
&nbsp;type="mx.messaging.channels.AMFChannel"&gt;<br />
&lt;endpoint url="http://{server.name}:8400/myapp/messagebroker/amf"<br />
&nbsp;type="flex.messaging.endpoints.AmfEndpoint"/&gt;<br />
&lt;/channel-definition&gt;</p>
<p>&lt;!-- Simple secure AMF --&gt;<br />
&lt;channel-definition id="my-secure-amf" class="mx.messaging.channels.SecureAMFChannel"&gt;<br />
&nbsp;&lt;endpoint url="https://{server.name}:9100/dev/messagebroker/amfsecure" class="flex.messaging.endpoints.SecureAMFEndpoint"/&gt;<br />
&lt;/channel-definition&gt;</p>
<p>&lt;!-- Simple HTTP --&gt;<br />
&lt;channel-definition id="my-http"<br />
class="mx.messaging.channels.HTTPChannel"&gt;<br />
&nbsp;&lt;endpoint url="http://{server.name}:8400/dev/messagebroker/http" class="flex.messaging.endpoints.HTTPEndpoint"/&gt;<br />
&lt;/channel-definition&gt;</p>
<p>&lt;!-- Simple secure HTTP --&gt;<br />
&lt;channel-definition id="my-secure-http" class="mx.messaging.channels.SecureHTTPChannel"&gt;<br />
&nbsp;&lt;endpoint url="https://{server.name}:9100/dev/messagebroker/httpsecure" class="flex.messaging.endpoints.SecureHTTPEndpoint"/&gt;<br />
&lt;/channel-definition&gt;</p>
<p><br />
2)搭载式AMF、HTTP通道<br />
搭载式确保独立于客户端发送信息到服务端或者服务端响应消息到客户端的数据传输。搭载式提供了轻量级的假轮询：一种比固定或者适当时间间隔轮询服务端更好的方式，s特别是当客户端发送一个非命令消息到服务器（使用一个生产者或RemoteObject对象）时，服务器发送任何未确定的数据到客户端或数据管理订阅随着客户端的信息响应。<br />
也可以在一个需要确保轮询，但是间隔却比较长，例如5秒或者10秒甚至更多的通道中使用，在这种情况下，应用程序似乎更加敏感。这种模式下，客户端的轮询请求独立于任何其他消息发送给服务端</p>
<p>3)轮询AMF、HTTP通道<br />
AMF、HTTP通道提供了简单的轮询机制，客户端可以用这个机制定期发送请求消息到服务端。当长期轮询或者流通道不能使用时，或者作为一个流通道的备用通道时候，轮询AMF、HTTP通道是适用的。<br />
&lt;!-- AMF with polling --&gt;<br />
&lt;channel-definition id="samples-polling-amf" type="mx.messaging.channels.AMFChannel"&gt;<br />
&nbsp;&lt;endpoint url="http://{server.name}:8700/dev/messagebroker/amfpolling" &nbsp;&nbsp;type="flex.messaging.endpoints.AMFEndpoint"/&gt;<br />
&nbsp;&lt;properties&gt;<br />
&nbsp;&nbsp;&lt;polling-enabled&gt;true&lt;/polling-enabled&gt;<br />
&nbsp;&nbsp;&lt;polling-interval-seconds&gt;8&lt;/polling-interval-seconds&gt;<br />
&nbsp;&lt;/properties&gt;<br />
&lt;/channel-definition&gt;</p>
<p>&lt;!-- HTTP with polling --&gt;<br />
&lt;channel-definition id="samples-polling-http" type="mx.messaging.channels.HTTPChannel"&gt;<br />
&lt;endpoint url="http://{server.name}:8700/dev/messagebroker/httppolling"<br />
&nbsp;type="flex.messaging.endpoints.HTTPEndpoint"/&gt;<br />
&nbsp; &lt;properties&gt;<br />
&nbsp;&lt;polling-enabled&gt;true&lt;/polling-enabled&gt;<br />
&nbsp;&lt;polling-interval-seconds&gt;8&lt;/polling-interval-seconds&gt;<br />
&nbsp; &lt;/properties&gt;<br />
&lt;/channel-definition&gt;<br />
&nbsp;注意：这种模式中你也可以使用secure通道。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>4)&nbsp; 长轮询AMF、HTTP通道<br />
当其他更加有效率的实时机制不合适的时候，你可以使用AMF和HTTP通道的长期轮询模式来&#8220;推&#8221;消息到客户端。 This mechanism uses the normal application server HTTP request processing logic and works with typical J2EE deployment architectures.这一机制的使用标准应用服务器的HTTP请求处理逻辑，并与典型的J2EE架构协同工作。<br />
You can establish long polling for any channel that uses a non-streaming AMF or HTTP endpoint by setting the polling-enabled , polling-interval-millis , wait-interval-millis , and client-wait-interval-millis properties in a channel definition; for more information, see Simple channels and endpoints .您可以为任何通道建立长期轮询来使用相应端点，需要设置一下参数：polling-enabled、polling-interval-millis、wait-interval-millis、client-w ait-interval-mills。有关wait-interval-millis的更多内容请参考Blazeds文档。<br />
&lt;!-- Long polling AMF --&gt;<br />
&lt;channel-definition id="my-amf-longpoll" class="mx.messaging.channels.AMFChannel"&gt;<br />
&lt;endpoint url="http://servername:8700/contextroot/messagebroker/myamflongpoll"<br />
&nbsp;class="flex.messaging.endpoints.AMFEndpoint"/&gt;<br />
&nbsp; &lt;properties&gt;<br />
&nbsp;&lt;polling-enabled&gt;true&lt;/polling-enabled&gt;<br />
&nbsp;&lt;polling-interval-seconds&gt;0&lt;/polling-interval-seconds&gt;<br />
&nbsp;&lt;wait-interval-millis&gt;60000&lt;/wait-interval-millis&gt;<br />
&nbsp;&lt;client-wait-interval-millis&gt;3000&lt;/client-wait-interval-millis&gt;<br />
&nbsp;&lt;max-waiting-poll-requests&gt;100&lt;/max-waiting-poll-requests&gt;<br />
&nbsp; &lt;/properties&gt;<br />
&lt;/channel-definition&gt;</p>
<p>&nbsp;</p>
<p>关于 Non-polling,Polling,Long polling和steaming的一些解释<br />
http://www.qgy18.com/2008/08/webim-design-transport/<br />
http://newteevee.com/2009/10/04/adobe-to-finally-support-http-streaming/</p>
<p>1.短轮询(polling)：核心思想是客户端定时去服务器取消息。为了实现即时效果，轮询的间隔必须设计得足够短，另外为了操作的流畅，需要使用Ajax来发送请求。本人的QGYWebIM就是采用的此方案。这种方案的优点是：后端程序编写比较容易，发送完响应信息马上断开连接，不会占用太多服务器资源。缺点是一般情况下，频繁的请求中有大半是无用，这些冗余请求无形中浪费了带宽和服务器资源。我们可以通过判断用户的活跃程度来决策请求服务器的间隔，我在51的一个帖子提到过这种方法，但是间隔一旦长了，消息的传送就有延时，违背了即时聊天的初衷了。</p>
<p>2.长轮询(long-polling)：基本原理是客户端向服务器发送请求，服务器接到请求后hold住连接，直到有新消息才返回响应信息并关闭连接，连接被断开期间用户的新信息会被服务器缓存起来。客户端处理完响应信息后再向服务器发送新的请求。这种做法的优势是如果用户一直没新消息，客户端不会频繁的轮询去服务器取消息，节省了流量，但是服务器维持长连接是很消耗资源的。具体实现起来，前端这边基本不需要什么改动，依然是用Ajax轮询取信息，后端需要在没有新消息时处理一下。</p>
<p>3.长连接(streaming)：其实很早以前就有人使用这种技术来实现聊天室的通讯，HTTP1.1开始支持。以前在页面中嵌入一个iframe，iframe里放一个使用长连接页面，服务器有新消息就会及时的在iframe里反映出来，再依靠客户端的脚本解析出来就OK了。这样做一个比较严重的问题是：使用 iframe请求长连接时，无论是IE还是firefox都会认为页面没有加载完而显示进度条，很难看。不过这个问题是可以解决的。firefox支持了Streaming Ajax，在readyState为3的时候就能接受数据，所以问题不大；IE则只能在readyState为4，即连接断开时才能得到返回值。但是伟大的Google工程师使用了一个hack成功的解决了这个问题：使用一个被称为&#8220;htmlfile&#8221;的ActiveX，把iframe放在这个ActiveX里就OK了。</p>
<p>无疑，使用长连接对于用户来说是最好的方案，用户体验最好（消息能及时的到达）、占用用户带宽最少（不会发送无用的请求），但是会增加服务器的开销；长轮询是折中方案，Facebook IM 就是采用这种方案，不过做了一点改动：客户端发起的每个连接服务器都hold10S，这10S中新消息会源源不断的返回给客户端，10s后连接关闭，客户端发起下一个连接。这样做是因为Facebook的用户会不断的打开、关闭新页面，如果每个页面都建立一个永久的长连接，会阻塞浏览器其他请求，服务器也会吃不消的；短轮询因为实现起来简单，适用于小型应用。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><br />
There is a browser-specific limit to the number of connections allowed per session. In Firefox, the limit is eight connections per session. In Internet Explorer, the limit is two connections allowed per session. Therefore, BlazeDS must limit the number of streaming connections per session on the server to stay below this limit.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><br />
Channel and endpoint recommendations</p>
<p>1. AMFChannel/Endpoint configured for long polling (no fallback needed)<br />
Benifits:<br />
Valid HTTP request/response pattern over standard ports that nothing in the network path will have trouble with.<br />
Disadvantages:<br />
When many messages are being pushed to the client, this configuration has the overhead of a poll round trip for every pushed message or small batch of messages queued between polls. Most applications are not pushing data so frequently for this to be a problem.<br />
The Servlet API uses blocking IO, so you must define an upper bound for the number of long poll requests parked on the server at any single instant. If your number of clients exceeds this limit, the excess clients devolve to simple polling on the default 3- second interval with no server wait. <br />
For example, if you server request handler thread pool has a size of 500, you could set the upper bound for waited polls to 250, 300, or 400 depending on the relative amount of non-poll requests you expect to service concurrently.</p>
<p>2. StreamingAMFChannel/Endpoint (in a channel set followed by the polling AMFChannel for fallback)<br />
Benifits:<br />
No polling overhead associated with pushing messages to the client.<br />
Uses standard HTTP ports so firewalls do not interfere and all requests/responses are HTTP so packet inspecting proxies won&#8217;t drop the packets.<br />
Disadvantages:<br />
Holding onto the open request on the server and writing an infinite response is not typical HTTP behavior. HTTP proxies that buffer responses before forwarding them can effectively consume the stream. Assign the channel&#8217;s &#8216;connect-timeout-seconds&#8217; property a value of 2 or 3 to detect this and trigger fallback to the next channel in your channel set.<br />
No support for HTTP 1.0 client. If the client is 1.0, the open request is faulted and the client falls back to the next channel in its channel set.<br />
The Servlet API uses blocking IO so as with long polling above, you must set a configured upper bound on the number of streaming connections you allow. Clients that exceed this limit are not able to open a streaming connection and will fall back to the next channel in their channel set.</p>
<p>3. AMFChannel/Endpoint with simple polling and piggybacking enabled (no fallback needed)<br />
Benifits:<br />
Valid HTTP request/response pattern over standard ports that nothing in the network path will have trouble with.<br />
User experience feels more real-time than with simple polling on an interval.<br />
Does not have thread resource constraints like long polling and streaming due to the blocking IO of the Servlet API.<br />
Disadvantages:<br />
Less real-time behavior than long polling or streaming. Requires client interaction with the <br />
server to receive pushed data faster than the channel's configured polling interval.</p>
<p>&nbsp;</p>
<img src ="http://www.blogjava.net/fastzch/aggbug/317619.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fastzch/" target="_blank">Robin's Programming World</a> 2010-04-07 10:27 <a href="http://www.blogjava.net/fastzch/archive/2010/04/07/317619.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>BlazeDS Study Notes -- Achitecture</title><link>http://www.blogjava.net/fastzch/archive/2010/04/03/317413.html</link><dc:creator>Robin's Programming World</dc:creator><author>Robin's Programming World</author><pubDate>Sat, 03 Apr 2010 14:31:00 GMT</pubDate><guid>http://www.blogjava.net/fastzch/archive/2010/04/03/317413.html</guid><wfw:comment>http://www.blogjava.net/fastzch/comments/317413.html</wfw:comment><comments>http://www.blogjava.net/fastzch/archive/2010/04/03/317413.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fastzch/comments/commentRss/317413.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fastzch/services/trackbacks/317413.html</trackback:ping><description><![CDATA[<p>&nbsp;Channels and channel sets<br />
A Flex component uses a channel to communicate with a BlazeDS server. A channel set contains channels; its primary function is to provide connectivity between the Flex client and the BlazeDS server. A channel set contains channels ordered by preference. The Flex component tries to connect to the first channel in the channel set and in the case where a connection cannot be established falls back to the next channel in the list. The Flex component continues to go through the list of channels in the order in which they are specified until a connection can be established over one of the channels or the list of channels is exhausted.<br />
Flex clients can use different channel types such as the AMFChannel and HTTPChannel. Channel selection depends on a number of factors, including the type of application you are building. If non-binary data transfer is required, you would use the HTTPChannel, which uses a non-binary format called AMFX (AMF in XML).</p>
<p>Messages<br />
All messages have client-side (ActionScript) implementations and server-side (Java) implementations because the messages are serialized and deserialized on both the client and the server.</p>
<p>Endpoint<br />
&nbsp;It is important that the channel and the endpoint use the same message format. </p>
<p>MessageBroker<br />
The MessageBroker is responsible for routing messages to services and is at the core of BlazeDS on the server. After an endpoint initially processes the request, it extracts the message from the request and passes it to the MessageBroker. The MessageBroker inspects the message's destination and passes the message to its intended service. If the destination is protected by a security constraint, the MessageBroker runs the authentication and authorization checks before passing the message along</p>
<p>Services and destinations<br />
Services and destinations are the next links in the message processing chain in the BlazeDS server. The system includes four services and their corresponding destinationsBlazeDS: <br />
&#8226;&nbsp;&nbsp;&nbsp;&nbsp; RemotingService and RemotingDestination<br />
&#8226;&nbsp;&nbsp;&nbsp;&nbsp; HTPProxyService and HTTPProxyDestination<br />
&#8226;&nbsp;&nbsp;&nbsp;&nbsp; MessageService and MessageDestination<br />
Services are the targets of messages from client-side Flex components. Think of destinations as instances of a service configured in a certain way. For example, a RemoteObject component is used on the Flex client to communicate with the RemotingService. In the RemoteObject component, you must specify a destination&nbsp; id&nbsp; property that refers to a remoting destination with certain properties, such as the class you want to invoke methods on. The mapping between client-side Flex components and BlazeDS services is as follows: <br />
&#8226;&nbsp;&nbsp;&nbsp;&nbsp; HTTPService and WebService communicate with HTTPProxyService/HTTPProxyDestination&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (RPC services)<br />
&#8226;&nbsp;&nbsp;&nbsp;&nbsp; RemoteObject communicates with RemotingService/RemotingDestination &nbsp;&nbsp;&nbsp;(RPC services)<br />
&#8226;&nbsp;&nbsp;&nbsp;&nbsp; Producer and Consumer communicate with MessageService/MessageDestination&nbsp;&nbsp;&nbsp;(Message services)</p>
<p><br />
Adapters and assemblers<br />
Although the BlazeDS server comes with a rich set of adapters and assemblers to communicate with different systems, custom adapters and assemblers can be plugged into the BlazeDS server. Similarly, you do not have to create all destinations in configuration files, but instead you can create them dynamically at server startup or when the server is running.</p>
<p><br />
Configuration tokens<br />
The configuration files sometimes contain special&nbsp; {server.name}&nbsp; and&nbsp; {server.port}&nbsp; tokens. These tokens are replaced with server name and port values based on the URL from which the SWF file is served when it is accessed through a web browser from a web server. Similarly, a special&nbsp; {context.root}&nbsp; token is replaced with the actual context root of a web application.<br />
Note: If you use server tokens in a configuration file for an Adobe AIR application and you compile using that file, the application will not be able to connect to the server. You can avoid this issue by configuring channels in ActionScript rather than in a configuration file.</p>
<p>How you define JVM options depends on the application server you use. For example, in Apache Tomcat, you can define an environment variable JAVA_OPTS that contains tokens and their values, as this code snippet shows:<br />
JAVA_OPTS=-Dmessaging.channel=my-amf -Dmy.token=myValue</p>
<p>&nbsp;</p>
 <img src ="http://www.blogjava.net/fastzch/aggbug/317413.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fastzch/" target="_blank">Robin's Programming World</a> 2010-04-03 22:31 <a href="http://www.blogjava.net/fastzch/archive/2010/04/03/317413.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>BlazeDS Study Notes -- Building Project</title><link>http://www.blogjava.net/fastzch/archive/2010/04/01/317237.html</link><dc:creator>Robin's Programming World</dc:creator><author>Robin's Programming World</author><pubDate>Thu, 01 Apr 2010 14:31:00 GMT</pubDate><guid>http://www.blogjava.net/fastzch/archive/2010/04/01/317237.html</guid><wfw:comment>http://www.blogjava.net/fastzch/comments/317237.html</wfw:comment><comments>http://www.blogjava.net/fastzch/archive/2010/04/01/317237.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fastzch/comments/commentRss/317237.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fastzch/services/trackbacks/317237.html</trackback:ping><description><![CDATA[<p>Build client-side application notes:<br />
1, Specifying the services-config.xml file in a compilation<br />
When you compile your Flex application, you typically specify the services-config.xml configuration file to the compiler. This file defines the channel URLs that the client-side Flex application uses to communicate with the BlazeDS server. Then the channel URLs are compiled into the resultant SWF file.<br />
Both client-side and server-side code use the services-config.xml configuration file. If you change anything in services-config.xml, you usually have to recompile your client-side applications and restart your server-side application for the changes to take effect.<br />
In Flex Builder, the appropriate services-config.xml file is included automatically based on the BlazeDS web application that you specified in the configuration of your Flex Builder project. When you use the mxmlc compiler, use the&nbsp; services&nbsp; option to specify the location of the file. <br />
Note: You can also create channel definitions at run time in ActionScript. In that case, you might be able to omit the reference to the services-config.xml configuration file from the compiler. <br />
2, Specifying the context root in a compilation<br />
The services-config.xml configuration file typically uses the&nbsp; context.root&nbsp; token to specify the context root of a <br />
web application. At compile time, you use the compiler&nbsp; context-root&nbsp; option to specify that information. <br />
During a compilation, Flex Builder automatically sets the value of the&nbsp; context.root&nbsp; token based on the BlazeDS <br />
web application that you specified in the configuration of your project. When you use the mxmlc compiler, use the <br />
context-root&nbsp; option to set it. </p>
<p>&nbsp;<br />
How to create a Flash Builder project?<br />
Use this procedure to create a Flex Builder project to edit one of the samples shipped with the Test Drive application. <br />
The procedure for creating and configuring a new project is almost the same as the following procedure. <br />
1&nbsp;&nbsp;&nbsp;&nbsp; Start Flex Builder.<br />
2&nbsp;&nbsp;&nbsp;&nbsp; Select File &gt; New &gt; Flex Project.<br />
3&nbsp;&nbsp;&nbsp;&nbsp; Enter a project name. You are editing an existing application, so use the exact name of the sample folder: <br />
testdrive-chat.<br />
Note: If you are creating an empty project, you can name it anything that you want. <br />
4&nbsp;&nbsp;&nbsp;&nbsp; If you unzipped flex-src.zip in the samples directory, deselect the Use Default Location option, and specify the directory as C:\blazeds\tomcat\webapps\samples\testdrive-chat, or wherever you unzipped the file on your computer.<br />
Note: By default, Flex Builder creates the project directory based on the project name and operating system. For example, if you are using the plug-in configuration of Flex Builder on Microsoft Windows, the default project directory is C:\Documents and Settings\USER_NAME\workspace\PROJECT_NAME.<br />
5&nbsp;&nbsp;&nbsp;&nbsp; Select the application type as Web application (runs in Flash Player) to configure the application to run in the browser as a Flash Player pplication.<br />
If you are creating an AIR application, select Desktop Application (Runs In Adobe AIR). However, make sure that you do not have any server tokens in URLs in the configuration files. In the web application that ships with BlazeDS, server tokens are used in the channel endpoint URLs in the WEB-INF/flex/services-config.xml file, as the following example shows:<br />
&lt;endpoint <br />
url="https://{server.name}:{server.port}/{context.root}/messagebroker/streamingamf"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class="flex.messaging.endpoints.StreamingAMFEndpoint"/&gt;<br />
You would change that line to the following:<br />
&lt;endpoint url="http://your_server_name:8400/samples/messagebroker/streamingamf"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class="flex.messaging.endpoints.StreamingAMFEndpoint"/&gt;<br />
6&nbsp;&nbsp;&nbsp;&nbsp; Select J2EE as the Application server type.<br />
7&nbsp;&nbsp;&nbsp;&nbsp; Select Use Remote Object Access.<br />
8&nbsp;&nbsp;&nbsp;&nbsp; Select LiveCycle Data Services.<br />
9&nbsp;&nbsp;&nbsp;&nbsp; If the option is available, deselect Create Combined Java/Flex Project With WTP.<br />
10&nbsp; Click Next.<br />
11&nbsp; Deselect Use Default Location For Local LiveCycle Data Services Server. <br />
12&nbsp; Set the root folder, root URL, and context root of your web application. <br />
The root folder specifies the top-level directory of the web application (the directory that contains the WEB-INF directory). The root URL specifies the URL of the web application, and the context root specifies the root of the web application.<br />
13&nbsp; Make sure that your BlazeDS server is running, and click Validate Configuration to ensure that your project is valid.<br />
14&nbsp; Verify that the Compile The Application Locally In Flex Builder option is selected.<br />
15&nbsp; Clear the Output Folder field to set the directory of the compiled SWF file to the main project directory. <br />
By default, Flex Builder writes the compiled SWF file to the bin-debug directory under the main project directory. To use a different output directory, specify it in the Output Folder field. <br />
16&nbsp; Click Next.<br />
17&nbsp; Set the name of the main application file to Chat.mxml, and click Finish.</p>
<p>&nbsp;</p>
<p>&nbsp;Client-side logging<br />
For client-side logging, you directly write messages to the log file, or configure the application to write messages generated by Flex to the log file. Flash Debug Player has two primary methods of writing messages to a log file:<br />
?&nbsp;&nbsp;&nbsp;&nbsp; The global&nbsp; trace()&nbsp; method. The global trace() method prints a String to the log file. Messages can contain checkpoint information to signal that your application reached a specific line of code, or the value of a variable. <br />
?&nbsp;&nbsp;&nbsp;&nbsp; Logging API. The logging API, implemented by the TraceTarget class, provides a layer of functionality on top of the&nbsp; trace()&nbsp; method. For example, you can use the logging API to log debug, error, and warning messages generated by Flex while applications execute.<br />
Flash Debug Player sends logging information to the flashlog.txt file. The operating system determines the location of this file, as the following table shows:<br />
Use settings in the mm.cfg text file to configure Flash Debug Player for logging. If this file does not exist, you can create it when you first configure Flash Debug Player. The location of this file depends on your operating system. <br />
The following table shows where to create the mm.cfg file for several operating systems: <br />
The mm.cfg file contains many settings that you can use to control logging. The following sample mm.cfg file enables error reporting and trace logging:<br />
ErrorReportingEnable=1<br />
TraceOutputFileEnable=1<br />
After you enable reporting and logging, call the&nbsp; trace()&nbsp; method to write a String to the flashlog.txt file, as the <br />
following example shows:<br />
trace("Got to checkpoint 1.");<br />
Insert the following MXML line to enable the logging of all Flex-generated debug messages to flashlog.txt:<br />
&lt;mx:TraceTarget loglevel="2"/&gt;</p>
<p>Server-side logging<br />
You configure server-side logging in the logging section of the services configuration file, services-config.xml. By default, output is sent to System.out. <br />
You set the logging level to one of the following available levels:<br />
?&nbsp;&nbsp;&nbsp;&nbsp; All<br />
?&nbsp;&nbsp;&nbsp;&nbsp; Debug<br />
?&nbsp;&nbsp;&nbsp;&nbsp; Info<br />
?&nbsp;&nbsp;&nbsp;&nbsp; Warn<br />
?&nbsp;&nbsp;&nbsp;&nbsp; Error<br />
?&nbsp;&nbsp;&nbsp;&nbsp; None<br />
You typically set the server-side logging level to&nbsp; Debug&nbsp; to log all debug messages, and also all info, warning, and error messages. The following example shows a logging configuration that uses the&nbsp; Debug&nbsp; logging level:<br />
&lt;logging&gt;<br />
&lt;!-- You may also use flex.messaging.log.ServletLogTarget. --&gt;<br />
&lt;target class="flex.messaging.log.ConsoleTarget" level="Debug"&gt;<br />
&lt;properties&gt;<br />
&lt;prefix&gt;[Flex]&lt;/prefix&gt;<br />
&lt;includeDate&gt;false&lt;/includeDate&gt;<br />
&lt;includeTime&gt;false&lt;/includeTime&gt;<br />
&lt;includeLevel&gt;false&lt;/includeLevel&gt;<br />
&lt;includeCategory&gt;false&lt;/includeCategory&gt;<br />
&lt;/properties&gt;<br />
&lt;filters&gt;<br />
&lt;pattern&gt;Endpoint&lt;/pattern&gt;<br />
&lt;!--&lt;pattern&gt;Service.*&lt;/pattern&gt;--&gt;<br />
&lt;!--&lt;pattern&gt;Message.*&lt;/pattern&gt;--&gt;<br />
&lt;/filters&gt;<br />
&lt;/target&gt;<br />
&lt;/logging&gt;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>You use two parameters in a channel definition to enable message processing metrics:<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;record-message-times&gt;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;record-message-sizes&gt;&nbsp; <br />
Set these parameters to&nbsp; true&nbsp; or&nbsp; false ; the default value is&nbsp; false . You can set the parameters to different values to capture only one type of metric. For example, the following channel definition specifies to capture message timing <br />
information, but not message sizing information:<br />
&lt;channel-definition id="my-streaming-amf" <br />
class="mx.messaging.channels.StreamingAMFChannel"&gt;<br />
&lt;endpoint <br />
url="http://{server.name}:{server.port}/{context.root}/messagebroker/streamingamf" <br />
class="flex.messaging.endpoints.StreamingAMFEndpoint"/&gt;<br />
&nbsp;&lt;properties&gt;<br />
&nbsp;&nbsp;&lt;record-message-times&gt;true&lt;/record-message-times&gt;<br />
&nbsp;&nbsp;&lt;record-message-sizes&gt;false&lt;/record-message-sizes&gt;<br />
&nbsp;&lt;/properties&gt;<br />
&lt;/channel-definition&gt;<br />
</p>
<img src ="http://www.blogjava.net/fastzch/aggbug/317237.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fastzch/" target="_blank">Robin's Programming World</a> 2010-04-01 22:31 <a href="http://www.blogjava.net/fastzch/archive/2010/04/01/317237.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>BlazeDS Study Notes -- Overview &amp; Concepts</title><link>http://www.blogjava.net/fastzch/archive/2010/03/31/317033.html</link><dc:creator>Robin's Programming World</dc:creator><author>Robin's Programming World</author><pubDate>Wed, 31 Mar 2010 04:19:00 GMT</pubDate><guid>http://www.blogjava.net/fastzch/archive/2010/03/31/317033.html</guid><wfw:comment>http://www.blogjava.net/fastzch/comments/317033.html</wfw:comment><comments>http://www.blogjava.net/fastzch/archive/2010/03/31/317033.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/fastzch/comments/commentRss/317033.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fastzch/services/trackbacks/317033.html</trackback:ping><description><![CDATA[<p>Flex and AIR applications use Flex components to communicate with the BlazeDS server, including the RemoteObject, HTTPService, WebService, Producer, and Consumer components. The HTTPService, WebService, Producer, and Consumer components are part of the Flex Software Development Kit (SDK). </p>
<p>What's Producer?</p>
<p>The BlazeDS core features include the RPC services and the Messaging Service. <br />
You can access data through client-side RPC components that include HTTP GET or POST (HTTP services), SOAP (web services), or Java objects (remote object services). <br />
BlazeDS lets you use RemoteObject components to access remote Java objects without configuring them as SOAP-compliant web services.</p>
<p>Client applications that send messages are called message producers. You define a producer in a Flex application by using the Producer component. Client applications that receive messages are called message consumers. You define a consumer in a Flex application by using the Consumer component. A Consumer component subscribes to a server-side destination and receives messages that a Producer component sends to that destination. For more information on messaging, see Using the Messaging Service. </p>
<p><br />
BlazeDS uses a message-based framework to send data back and forth between the client and server. BlazeDS uses two primary exchange patterns between server and client. In the first pattern, the request-response pattern, the second pattern is the publish-subscribe pattern where the server routes published messages to the set of clients that have subscribed to receive them.</p>
<p>&nbsp;</p>
<p>To send messages across the network, the client uses channels. A channel encapsulates message formats, network protocols, and network behaviors to decouple them from services, destinations, and application code. A channel formats and translates messages into a network-specific form and delivers them to an endpoint on the server.&nbsp; </p>
<p>&nbsp;</p>
<p><br />
Channels communicate with Java-based endpoints on the server. An endpoint unmarshals messages in a protocol-specific manner and then passes the messages in generic Java form to the message broker. The message broker determines where to send messages, and routes them to the appropriate service destination. <br />
BlazeDS includes several types of channels, including standard and secure Action Message Format (AMF) channels and HTTP (AMFX) channels. AMF and HTTP channels support non-polling request-response patterns and client polling patterns to simulate real-time messaging. The streaming AMF and HTTP channels provide true data streaming for real-time messaging.&nbsp; </p>
<p>&nbsp;</p>
<p>&nbsp;Configure an existing J2EE web application to support BlazeDS by performing the following steps:&nbsp;<br />
&nbsp;1, Add the BlazeDS JAR files and dependent JAR files to the WEB-INF/lib directory.&nbsp; <br />
2, Edit the BlazeDS configuration files in the WEB-INF/flex directory.&nbsp; <br />
3, Define MessageBrokerServlet and a session listener in WEB-INF/web.xml. <br />
</p>
<img src ="http://www.blogjava.net/fastzch/aggbug/317033.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fastzch/" target="_blank">Robin's Programming World</a> 2010-03-31 12:19 <a href="http://www.blogjava.net/fastzch/archive/2010/03/31/317033.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAAS Study Note</title><link>http://www.blogjava.net/fastzch/archive/2010/03/30/316922.html</link><dc:creator>Robin's Programming World</dc:creator><author>Robin's Programming World</author><pubDate>Tue, 30 Mar 2010 04:02:00 GMT</pubDate><guid>http://www.blogjava.net/fastzch/archive/2010/03/30/316922.html</guid><wfw:comment>http://www.blogjava.net/fastzch/comments/316922.html</wfw:comment><comments>http://www.blogjava.net/fastzch/archive/2010/03/30/316922.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fastzch/comments/commentRss/316922.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fastzch/services/trackbacks/316922.html</trackback:ping><description><![CDATA[<p>First, I refer Java official document to implement an application (not web application) for understand mechanism of JAAS.&nbsp;<br />
You need to add following VM arguments when you run this application:<br />
<span style="color: #0000ff">-Djava.security.manager -Djava.security.auth.login.config=D:/jaas.config -Djava.security.policy==D:/my.policy</span><br />
&nbsp;<br />
In brief, we need following steps for complete this application:<br />
1, Implement a RdbmsLoginModule class for authentication a user who save in RDBMS;<br />
2, Validate some authentication information (in general, use username and password) by our custom CallbackHandler class, and judge right of user in login() method of LoginModule;<br />
3, Add a "Principal" object or many "Principal" objects to subject of certain login session for presentation permissions of user in commit() method of LoginModule; <br />
4, Define a policy file for mapping principals and operations;<br />
5, Execute operations by doAs() method or doAsPrivaliged() method of Subject class for check permission of principal(s).<br />
&nbsp;<br />
Related references:<br />
LoginModule Developer's Guide:<br />
<a href="http://java.sun.com/javase/6/docs/technotes/guides/security/jaas/JAASLMDevGuide.html">http://java.sun.com/javase/6/docs/technotes/guides/security/jaas/JAASLMDevGuide.html</a><br />
JAAS Authentication Tutorial:<br />
<a href="http://java.sun.com/javase/6/docs/technotes/guides/security/jaas/tutorials/GeneralAcnOnly.html#SampleLMPrincipal">http://java.sun.com/javase/6/docs/technotes/guides/security/jaas/tutorials/GeneralAcnOnly.html#SampleLMPrincipal</a><br />
JAAS Authorization Tutorial:<br />
<a href="http://java.sun.com/javase/6/docs/technotes/guides/security/jaas/tutorials/GeneralAcnAndAzn.html">http://java.sun.com/javase/6/docs/technotes/guides/security/jaas/tutorials/GeneralAcnAndAzn.html</a><br />
Default Policy Implementation and Policy File Syntax:<br />
<a href="http://java.sun.com/j2se/1.5.0/docs/guide/security/PolicyFiles.html">http://java.sun.com/j2se/1.5.0/docs/guide/security/PolicyFiles.html</a><br />
&nbsp;<br />
===============================================================================================<br />
In Java server side, I was supposed we use BlazeDS (an open source project from Adobe, for integrate Flex and Java enterprise application server) for support Flex remote call, and I have complete login function.<br />
In fact, a Flex remote call is based on HTTP/HTTPS, so I think we are able to use HttpSession to save user session,&nbsp;<br />
&nbsp;<br />
Related references:<br />
BlazeDS official website:<br />
<a href="http://opensource.adobe.com/wiki/display/blazeds/BlazeDS/">http://opensource.adobe.com/wiki/display/blazeds/BlazeDS/</a><br />
&nbsp;<br />
===============================================================================================<br />
Unfortunately, it seems that the authorization's implement of JAAS is difference approach in different middleware platform, even different version. for example: Tomcat 6.0.X is different from WebLogic.<br />
&nbsp;<br />
According to description of Tomcat's official document, we need to do following steps:<br />
&nbsp;<br />
------------------- refer to Tomcat official website ------------------- <br />
&nbsp;<br />
To set up Tomcat to use JAASRealm with your own JAAS login module, you will need to follow these steps:<br />
Write your own LoginModule, User and Role classes based on JAAS (see the JAAS Authentication Tutorial and the JAAS Login Module Developer's Guide) to be managed by the JAAS Login Context (javax.security.auth.login.LoginContext) When developing your LoginModule, note that JAASRealm's built-in CallbackHandler only recognizes the NameCallback and PasswordCallback at present. <br />
Although not specified in JAAS, you should create seperate classes to distinguish between users and roles, extending javax.security.Principal, so that Tomcat can tell which Principals returned from your login module are users and which are roles (see org.apache.catalina.realm.JAASRealm). Regardless, the first Principal returned is always treated as the user Principal. <br />
Place the compiled classes on Tomcat's classpath <br />
Set up a login.config file for Java (see JAAS LoginConfig file) and tell Tomcat where to find it by specifying its location to the JVM, for instance by setting the environment variable: JAVA_OPTS=$JAVA_OPTS -Djava.security.auth.login.config==$CATALINA_BASE/conf/jaas.config <br />
Configure your security-constraints in your web.xml for the resources you want to protect <br />
Configure the JAASRealm module in your server.xml <br />
Restart Tomcat 6 if it is already running. <br />
------------------- end ------------------- <br />
&nbsp;<br />
I think that it is not a nice approach if we configure some permission strategies in web.xml file. And other side, some documents tell us, WebLogic has custom module, and JBoss has another module too. These information show that authorization part of JAAS framework is not easy migration. <br />
&nbsp;<br />
Related references:<br />
JAASRealm of Tomcat:<br />
<a href="http://tomcat.apache.org/tomcat-6.0-doc/realm-howto.html#JAASRealm">http://tomcat.apache.org/tomcat-6.0-doc/realm-howto.html#JAASRealm</a><br />
Security on JBoss:<br />
<a href="http://docs.jboss.org/jbossas/admindevel326/html/ch8.chapter.html">http://docs.jboss.org/jbossas/admindevel326/html/ch8.chapter.html</a><br />
&nbsp;<br />
</p>
<img src ="http://www.blogjava.net/fastzch/aggbug/316922.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fastzch/" target="_blank">Robin's Programming World</a> 2010-03-30 12:02 <a href="http://www.blogjava.net/fastzch/archive/2010/03/30/316922.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring Security 3.x 完整入门教程</title><link>http://www.blogjava.net/fastzch/archive/2010/03/10/315028.html</link><dc:creator>Robin's Programming World</dc:creator><author>Robin's Programming World</author><pubDate>Wed, 10 Mar 2010 04:38:00 GMT</pubDate><guid>http://www.blogjava.net/fastzch/archive/2010/03/10/315028.html</guid><wfw:comment>http://www.blogjava.net/fastzch/comments/315028.html</wfw:comment><comments>http://www.blogjava.net/fastzch/archive/2010/03/10/315028.html#Feedback</comments><slash:comments>60</slash:comments><wfw:commentRss>http://www.blogjava.net/fastzch/comments/commentRss/315028.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fastzch/services/trackbacks/315028.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 本Blog所有内容不得随意转载，版权属于作者所有。如需转载请与作者联系（ fastzch@163.com &nbsp;&nbsp; QQ：9184314）。未经许可的转载，本人保留一切法律权益。Spring Security 3.x 出来一段时间了，跟Acegi是大不同了，与2.x的版本也有一些小小的区别，网上有一些文档，也有人翻译Spring Security 3.x的guide，但...&nbsp;&nbsp;<a href='http://www.blogjava.net/fastzch/archive/2010/03/10/315028.html'>阅读全文</a><img src ="http://www.blogjava.net/fastzch/aggbug/315028.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fastzch/" target="_blank">Robin's Programming World</a> 2010-03-10 12:38 <a href="http://www.blogjava.net/fastzch/archive/2010/03/10/315028.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>AIX系统中安装Java6全过程（带文本截图）</title><link>http://www.blogjava.net/fastzch/archive/2009/06/04/279985.html</link><dc:creator>Robin's Programming World</dc:creator><author>Robin's Programming World</author><pubDate>Thu, 04 Jun 2009 03:26:00 GMT</pubDate><guid>http://www.blogjava.net/fastzch/archive/2009/06/04/279985.html</guid><wfw:comment>http://www.blogjava.net/fastzch/comments/279985.html</wfw:comment><comments>http://www.blogjava.net/fastzch/archive/2009/06/04/279985.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/fastzch/comments/commentRss/279985.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fastzch/services/trackbacks/279985.html</trackback:ping><description><![CDATA[<span style="font-family: Arial"><span style="font-family: 宋体">
<p>一，安装JAVA6</p>
<p>1，用root用户登录到AIX系统中。<br />
2，使用如下命令确定操作系统位数：<br />
&nbsp;&nbsp;bootinfo -k<br />
&nbsp;&nbsp;如果结果为：3，则表示AIX系统为32位，请勿安装64位的JVM。<br />
3，用mkdir /tmp/jvm命令建立一个目录，并将Java6.sdk（如果是64位的AIX，推荐选用Java6_64.sdk）用FTP上传至/tmp/jvm目录中。<br />
4，键入smit命令，进入如下画面：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System Management</p>
<p>Move cursor to desired item and press Enter.</p>
<p>&nbsp; Software Installation and Maintenance<br />
&nbsp; Software License Management<br />
&nbsp; Devices<br />
&nbsp; System Storage Management (Physical &amp; Logical Storage)<br />
&nbsp; Security &amp; Users<br />
&nbsp; Communications Applications and Services<br />
&nbsp; Print Spooling<br />
&nbsp; Advanced Accounting<br />
&nbsp; Problem Determination<br />
&nbsp; Performance &amp; Resource Scheduling<br />
&nbsp; System Environments<br />
&nbsp; Processes &amp; Subsystems<br />
&nbsp; Applications<br />
&nbsp; Installation Assistant<br />
&nbsp; Cluster Systems Management<br />
&nbsp; Using SMIT (information only)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
F1=Help&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; F2=Refresh&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; F3=Cancel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Esc+8=Image<br />
Esc+9=Shell&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Esc+0=Exit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Enter=Do&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
4，选择Software Installation and Maintenance，并按回车（ENTER）键，进入如下画面：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Software Installation and Maintenance</p>
<p>Move cursor to desired item and press Enter.</p>
<p>&nbsp; Install and Update Software<br />
&nbsp; List Software and Related Information<br />
&nbsp; Software Maintenance and Utilities<br />
&nbsp; Software Service Management<br />
&nbsp; Network Installation Management<br />
&nbsp; EZ NIM (Easy NIM Tool)<br />
&nbsp; System Backup Manager<br />
&nbsp; Alternate Disk Installation<br />
&nbsp; EFIX Management<br />
&nbsp; Thin Server Maintenance<br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
F1=Help&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; F2=Refresh&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; F3=Cancel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Esc+8=Image<br />
Esc+9=Shell&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Esc+0=Exit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Enter=Do&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>5，选择Install and Update Software，并按回车（ENTER）键，进入如下画面：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Install and Update Software</p>
<p>Move cursor to desired item and press Enter.</p>
<p>&nbsp; Install Software<br />
&nbsp; Update Installed Software to Latest Level (Update All)<br />
&nbsp; Install Software Bundle<br />
&nbsp; Update Software by Fix (APAR)<br />
&nbsp; Install and Update from ALL Available Software<br />
&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
F1=Help&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; F2=Refresh&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; F3=Cancel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Esc+8=Image<br />
Esc+9=Shell&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Esc+0=Exit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Enter=Do </p>
<p>6，选择Install Software，并按回车（ENTER）键，进入如下画面：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Install Software</p>
<p>Type or select a value for the entry field.<br />
Press Enter AFTER making all desired changes.<br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [Entry Fields]<br />
* INPUT device / directory for software&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; []&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +<br />
&nbsp; <br />
&nbsp; </p>
<p>F1=Help&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; F2=Refresh&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; F3=Cancel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; F4=List<br />
Esc+5=Reset&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Esc+6=Command&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Esc+7=Edit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Esc+8=Image<br />
Esc+9=Shell&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Esc+0=Exit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Enter=Do&nbsp;&nbsp;&nbsp; </p>
<p>7，在INPUT device / directory for software栏中输入/tmp/jvm/，并按回车（ENTER）键，进入如下画面：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Install Software</p>
<p>Type or select values in entry fields.<br />
Press Enter AFTER making all desired changes.<br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [Entry Fields]<br />
* INPUT device / directory for software&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /tmp/jvm/<br />
* SOFTWARE to install&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [_all_latest]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +<br />
&nbsp; PREVIEW only? (install operation will NOT occur)&nbsp;&nbsp;&nbsp; no&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +<br />
&nbsp; COMMIT software updates?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; yes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +<br />
&nbsp; SAVE replaced files?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; no&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +<br />
&nbsp; AUTOMATICALLY install requisite software?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; yes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +<br />
&nbsp; EXTEND file systems if space needed?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; yes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +<br />
&nbsp; OVERWRITE same or newer versions?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; no&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +<br />
&nbsp; VERIFY install and check file sizes?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; no&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +<br />
&nbsp; Include corresponding LANGUAGE filesets?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; yes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +<br />
&nbsp; DETAILED output?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; no&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +<br />
&nbsp; Process multiple volumes?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; yes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +<br />
&nbsp; ACCEPT new license agreements?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; no&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +<br />
&nbsp; Preview new LICENSE agreements?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; no&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +</p>
<p>&nbsp;</p>
<p>F1=Help&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; F2=Refresh&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; F3=Cancel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; F4=List<br />
Esc+5=Reset&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Esc+6=Command&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Esc+7=Edit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Esc+8=Image<br />
Esc+9=Shell&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Esc+0=Exit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Enter=Do&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>8，将ACCEPT new license agreements?的值改为yes。(可按F4，在弹出菜单中选择)。画面如下：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Install Software</p>
<p>Type or select values in entry fields.<br />
Press Enter AFTER making all desired changes.<br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [Entry Fields]<br />
* INPUT device / directory for software&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /tmp/jvm<br />
* SOFTWARE to install&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [_all_latest]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +<br />
&nbsp; PREVIEW only? (install operation will NOT occur)&nbsp;&nbsp;&nbsp; no&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +<br />
&nbsp; COMMIT software updates?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; yes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +<br />
&nbsp; SAVE replaced files?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; no&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +<br />
&nbsp; AUTOMATICALLY install requisite software?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; yes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +<br />
&nbsp; EXTEND file systems if space needed?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; yes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +<br />
&nbsp; OVERWRITE same or newer versions?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; no&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +<br />
&nbsp; VERIFY install and check file sizes?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; no&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +<br />
&nbsp; Include corresponding LANGUAGE filesets?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; yes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +<br />
&nbsp; DETAILED output?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; no&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +<br />
&nbsp; Process multiple volumes?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; yes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +<br />
&nbsp; ACCEPT new license agreements?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; yes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +<br />
&nbsp; Preview new LICENSE agreements?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; no&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +<br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
F1=Help&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; F2=Refresh&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; F3=Cancel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; F4=List&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
Esc+5=Reset&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Esc+6=Command&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Esc+7=Edit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Esc+8=Image&nbsp;&nbsp;&nbsp;&nbsp; <br />
Esc+9=Shell&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Esc+0=Exit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Enter=Do&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>9，确认无误后，按回车（ENTER）键，进入如下画面：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Install Software</p>
<p>Type or select values in entry fields.<br />
Press Enter AFTER making all desired changes.<br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [Entry Fields]<br />
* INPUT device / directory for software&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /tmp/jvm<br />
* SOFTWARE to install&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [_all_latest]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +<br />
&nbsp; PREVIEW only? (install operation will NOT occur)&nbsp;&nbsp;&nbsp; no&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +<br />
&nbsp; COMMIT software updates?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; yes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +<br />
&nbsp; SAVE replaced files?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; no&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +<br />
&nbsp; AUTOMATICALLY install requisite software?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; yes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +<br />
&nbsp; EXTEND file systems if space needed?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; yes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +<br />
&nbsp; OVERWRITE same or newer versions?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; no&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +<br />
&nbsp; VER+--------------------------------------------------------------------------+ +<br />
&nbsp; Inc|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ARE YOU SURE?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | +<br />
&nbsp; DET|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | +<br />
&nbsp; Pro| Continuing may delete information you may want&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | +<br />
&nbsp; ACC| to keep.&nbsp; This is your last chance to stop&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | +<br />
&nbsp; Pre| before continuing.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | +<br />
&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp; Press Enter to continue.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp; Press Cancel to return to the application.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />
F1=He| F1=Help&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; F2=Refresh&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; F3=Cancel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />
Esc+5| Esc+8=Image&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Esc+0=Exit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Enter=Do&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />
Esc+9+--------------------------------------------------------------------------+</p>
<p>10，直接按回车（ENTER）键，等待安装结束。画面如下：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; COMMAND STATUS</p>
<p>Command: running&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; stdout: yes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; stderr: no</p>
<p>Before command completion, additional instructions may appear below.</p>
<p>[MORE...6] <br />
+-----------------------------------------------------------------------------+<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Pre-installation Verification...<br />
+-----------------------------------------------------------------------------+<br />
Verifying selections...done<br />
Verifying requisites...done<br />
Results...</p>
<p>SUCCESSES<br />
---------<br />
&nbsp; Filesets listed in this section passed pre-installation verification<br />
&nbsp; and will be installed.<br />
&nbsp; <br />
&nbsp; Selected Filesets<br />
&nbsp; -----------------<br />
&nbsp; Java6.sdk 6.0.0.110&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Java SDK 32-bit<br />
&nbsp; <br />
&nbsp; &lt;&lt; End of Success Section &gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; <br />
FILESET STATISTICS<br />
------------------<br />
&nbsp;&nbsp;&nbsp; 1&nbsp; Selected to be installed, of which:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp; Passed pre-installation verification<br />
&nbsp; ---- <br />
&nbsp;&nbsp;&nbsp; 1&nbsp; Total to be installed<br />
&nbsp; <br />
+-----------------------------------------------------------------------------+<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Installing Software...<br />
+-----------------------------------------------------------------------------+<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
installp:&nbsp; APPLYING software for:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Java6.sdk 6.0.0.110</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
. . . . . &lt;&lt; Copyright notice for Java6.sdk &gt;&gt; . . . . . . .<br />
&nbsp;Licensed Materials - Property of IBM</p>
<p>&nbsp;620700106<br />
&nbsp;&nbsp; Copyright International Business Machines Corp. 2007, 2009.<br />
&nbsp;&nbsp; Copyright The Apache Software Foundation, 1999.<br />
&nbsp;&nbsp; Copyright Sun Microsystems, Inc. 1992, 1997.<br />
&nbsp;&nbsp; <br />
&nbsp;All rights reserved.<br />
&nbsp;US Government Users Restricted Rights - Use, duplication or disclosure<br />
&nbsp;restricted by GSA ADP Schedule Contract with IBM Corp.<br />
. . . . . &lt;&lt; End of copyright notice for Java6.sdk &gt;&gt;. . . . <br />
&nbsp;</p>
<p>[BOTTOM]</p>
<p>11，安装结束后出现如下画面：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; COMMAND STATUS</p>
<p>Command: OK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; stdout: yes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; stderr: no</p>
<p>Before command completion, additional instructions may appear below.</p>
<p>[MORE...27]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp; Passed pre-installation verification<br />
&nbsp; ----&nbsp; <br />
&nbsp;&nbsp;&nbsp; 1&nbsp; Total to be installed<br />
&nbsp;&nbsp;&nbsp; <br />
+-----------------------------------------------------------------------------+<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Installing Software...<br />
+-----------------------------------------------------------------------------+</p>
<p>installp:&nbsp; APPLYING software for:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Java6.sdk 6.0.0.110<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
. . . . . &lt;&lt; Copyright notice for Java6.sdk &gt;&gt; . . . . . . .<br />
&nbsp;Licensed Materials - Property of IBM<br />
&nbsp;<br />
&nbsp;620700106<br />
&nbsp;&nbsp; Copyright International Business Machines Corp. 2007, 2009.<br />
&nbsp;&nbsp; Copyright The Apache Software Foundation, 1999. <br />
&nbsp;&nbsp; Copyright Sun Microsystems, Inc. 1992, 1997.<br />
&nbsp;&nbsp; <br />
&nbsp;All rights reserved.<br />
&nbsp;US Government Users Restricted Rights - Use, duplication or disclosure<br />
&nbsp;restricted by GSA ADP Schedule Contract with IBM Corp.<br />
. . . . . &lt;&lt; End of copyright notice for Java6.sdk &gt;&gt;. . . .</p>
<p>Restoring files, please wait.<br />
997 files restored.<br />
1361 files restored.<br />
2127 files restored.<br />
2431 files restored.<br />
2725 files restored.<br />
Finished processing all filesets.&nbsp; (Total time:&nbsp; 3 mins 24 secs).</p>
<p>+-----------------------------------------------------------------------------+<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Summaries:<br />
+-----------------------------------------------------------------------------+</p>
<p>Installation Summary<br />
--------------------<br />
Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Level&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Part&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Event&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result<br />
-------------------------------------------------------------------------------<br />
Java6.sdk&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6.0.0.110&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; USR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; APPLY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SUCCESS<br />
Java6.sdk&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6.0.0.110&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ROOT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; APPLY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SUCCESS</p>
<p>[BOTTOM]</p>
<p>F1=Help&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; F2=Refresh&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; F3=Cancel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Esc+6=Command<br />
Esc+8=Image&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Esc+9=Shell&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Esc+0=Exit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /=Find<br />
n=Find Next&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>12，安装验证，使用如下命令：<br />
&nbsp;/usr/java6/bin/java -version</p>
<p>得到如下结果，说明安装正确完成。<br />
java version "1.6.0"<br />
Java(TM) SE Runtime Environment (build pap3260sr4ifix-20090417_02(SR4+IZ48590))<br />
IBM J9 VM (build 2.4, J2RE 1.6.0 IBM J9 2.4 AIX ppc-32 jvmap3260sr4ifx-20090409_33254 (JIT enabled, AOT enabled)<br />
J9VM - 20090409_033254_bHdSMr<br />
JIT&nbsp; - r9_20090213_2028<br />
GC&nbsp;&nbsp; - 20090213_AA)<br />
JCL&nbsp; - 20090228_01</p>
<p>&nbsp;</p>
<p>二，环境变量配置：<br />
1，由于AIX在安装的过程中，会默认安装JAVA1.4，所以需要先删除/etc/environment文件中，PATH环境变量中的/usr/java14/jre/bin:/usr/java14/bin。<br />
2，编辑/etc/profile文件，在PATH变量中，加入/usr/java6/jre/bin:/usr/java6/bin两项，并在文件未尾加上如下一行：<br />
&nbsp;export JAVA_HOME=/usr/java6<br />
3，重新用root用户登录，以使环境变量生效。<br />
4，验证，使用java -version命令，得到如下结果：<br />
java version "1.6.0"<br />
Java(TM) SE Runtime Environment (build pap3260sr4ifix-20090417_02(SR4+IZ48590))<br />
IBM J9 VM (build 2.4, J2RE 1.6.0 IBM J9 2.4 AIX ppc-32 jvmap3260sr4ifx-20090409_33254 (JIT enabled, AOT enabled)<br />
J9VM - 20090409_033254_bHdSMr<br />
JIT&nbsp; - r9_20090213_2028<br />
GC&nbsp;&nbsp; - 20090213_AA)<br />
JCL&nbsp; - 20090228_01</p>
</span></span>
<img src ="http://www.blogjava.net/fastzch/aggbug/279985.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fastzch/" target="_blank">Robin's Programming World</a> 2009-06-04 11:26 <a href="http://www.blogjava.net/fastzch/archive/2009/06/04/279985.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring Security 参考手册 中文版</title><link>http://www.blogjava.net/fastzch/archive/2009/02/17/253740.html</link><dc:creator>Robin's Programming World</dc:creator><author>Robin's Programming World</author><pubDate>Mon, 16 Feb 2009 17:49:00 GMT</pubDate><guid>http://www.blogjava.net/fastzch/archive/2009/02/17/253740.html</guid><wfw:comment>http://www.blogjava.net/fastzch/comments/253740.html</wfw:comment><comments>http://www.blogjava.net/fastzch/archive/2009/02/17/253740.html#Feedback</comments><slash:comments>16</slash:comments><wfw:commentRss>http://www.blogjava.net/fastzch/comments/commentRss/253740.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fastzch/services/trackbacks/253740.html</trackback:ping><description><![CDATA[
		<p>Acegi被Spring吸收后，有较大的变化，最近看这个的过程中，搜集整理了官方文档的中文版，并制作成CHM文件，现分享给大家！<br />有需要的朋友请<a title="点此进入下载页面" href="http://download.csdn.net/source/997686" target="_blank">点此进入下载页面<br /></a><br /></p>
<img src ="http://www.blogjava.net/fastzch/aggbug/253740.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fastzch/" target="_blank">Robin's Programming World</a> 2009-02-17 01:49 <a href="http://www.blogjava.net/fastzch/archive/2009/02/17/253740.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WebSphere伴我渡过一个个严冬</title><link>http://www.blogjava.net/fastzch/archive/2009/01/04/249665.html</link><dc:creator>Robin's Programming World</dc:creator><author>Robin's Programming World</author><pubDate>Sat, 03 Jan 2009 16:34:00 GMT</pubDate><guid>http://www.blogjava.net/fastzch/archive/2009/01/04/249665.html</guid><wfw:comment>http://www.blogjava.net/fastzch/comments/249665.html</wfw:comment><comments>http://www.blogjava.net/fastzch/archive/2009/01/04/249665.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/fastzch/comments/commentRss/249665.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fastzch/services/trackbacks/249665.html</trackback:ping><description><![CDATA[
		<p>
				<span lang="EN-US">
						<font size="2">
								<font color="#ff0000">本文原载于webspherechina.net论坛，原文地址为：<a href="http://www.webspherechina.net/?uid-417-action-viewspace-itemid-2610">http://www.webspherechina.net/?uid-417-action-viewspace-itemid-2610</a><br />本Blog所有内容不得随意转载，版权属于作者所有。如需转载请与作者联系（</font>
						</font>
						<a href="mailto:fastzch@163.com">
								<font size="2">
										<font style="BACKGROUND-COLOR: #ffffff" color="#ff0000">fastzch@163.com</font>
										<font color="#1a8bc8">
										</font>
								</font>
						</a>
						<font style="BACKGROUND-COLOR: #ffffff" color="#ff0000" size="2">）。未经许可的转载，本人保留一切法律权益。<br /><br /></font>
				</span>
				<br />　　还记得，2006年的那个冬天，我们做一个保险行业的核心业务项目，生产环境是WebSphere Application Server，开发环境是Tomcat，项目面临第一次交付，但还从未在WebSphere环境上进行过一次测试，客户要求的WAS的最新版本V6.1 For AIX，我们找遍公司的资源也没办法弄到相应的版本，最终经历千辛万苦才通过台北的同事才弄到软件。</p>
		<p>　　老实说，在这之前，我很少听说过WAS，也未接触过AIX，但是我作为救火队员，作为新任的项目技术负责人，没有权利说不，只能挑起这根大梁，现在想来有些后怕，但那时可能是“勇者无惧，不知者无畏”，就这样硬着头皮上吧。</p>
		<p>　　第一步，找来一台PC机，直接在先用用Windows版本的WAS，花了三个小时，完全是凭着相关的经验，终于把WAS装上了。更大的问题也随之而来，在我们的项目中，第三方的Jar包完全处在失控的状态下，变成了一个超过100M的“大个子”，版本复杂，文件重复，冗余严重，开发人员不管三七二十一的一骨脑往里面加，什么JSF，MyFaces，Hibernate，JDOM，AXIS，POI，IText，Log4J，Apache Common Lib，Quartz，XMLBeans，似乎是只要是开源的，不要钱的就加吧。这样的做法，最直接的结果就是导致我第一次要WAS发布我们项目时，搞了一天部署上去后无法正常启动，寻求多方帮助，也无法解决问题，最终我不得不统统将所有的包全部删除，然后找到能在此WAS版本上所使用的包，然后才加入到lib目录中，而且每加入一个新的框架就做一个版本的备份，做好充分回退的准备。又整整搞了我一天，终于第一次把这个项目Run起来了，当然，这其中充满了曲折，比如不能使用MyFaces的上传文件和树形组件等，真是“痛并快乐着”，因为我喜欢挑战这样的问题，挑战自己。</p>
		<p>　　解决了紧急问题后，我想都没想，就直接跑去书店立马买了两本WAS的书，大家清楚WAS的书籍是非常少的，而且质量也并不高，没办法，我得接受现实。花了一周时间把红宝书中最重要（我所意想的最重要）的章节过了一遍，然后开始研究WAS的Cluster，因为客户的生产环境是集群环境，这一过程更是痛苦，一连三天，我都在公司干到凌晨才回家，最终也没有搞定，原因是因为没有IBM Http Server的安装源，导致我无法通过IHS来做负载均衡。那时候，网络上也查不到什么资料，现在想来要是有<a href="http://www.webspherechina.net">http://www.webspherechina.net</a>这样的网站就好了，只需要用搜索功能一搜就立马可以解决了。最终，我在经历了五天的痛苦煎熬后找到了答案，同时，也发现了当时惟一一个非官方的网站（<a href="http://www.wsuc.tw">http://www.wsuc.tw</a> ，现在这个网站在经历一次数据丢失事故后，基本上没有什么资料了）。</p>
		<p>　　紧接着，又是熟悉AIX环境（幸好有Linux基础和AIX的SMIT很好用），经历WAS数据源配置，程序和WAS调优等问题的困扰和解开的过程，每一步都充满辛酸，但解决后会得到真正的快乐。</p>
		<p>　　经历了那个冬天的甜酸苦辣，在接下来的另一个采用WAS平台的中型项目中，我成功的完成了架构师的角色，将SSO，多数据源，多周边系统集成等问题可以较完善（还不敢说完美）的解决。也因为此，我成了公司最熟悉WAS的人，我的工作得到大家的认可和尊重，包括在以后的工作中，都没有因为WAS的问题而太多的困扰到我。</p>
		<p>　　时间过得真快，一晃到了2008年，也不知道是什么时候，我无意中发现了我们的webspherechina.net论坛，发现这个网站的资料慢慢的多起来，人气渐渐的旺起来。又一个偶然的机会，我通过SNS认识了艾依然，成为了webspherechina.net论坛的版主。在这过程中，我也看到论坛中的朋友们因为WAS的各种问题而困扰，而郁闷，我尽我自己的一份力帮这些朋友们解决问题，让他们快乐起来。因为我曾经也痛苦过，郁闷过，没休息好过，所以我知道朋友们的感受，期望能尽早帮大家解脱出来。</p>
		<p>　　后来，我成了论坛的超版，我在论坛的努力也得到了大家的认可，当上了2008年10月的优秀版主，这让我很兴奋，但更让我感动的是，在当前全球性financial crisis的笼罩下，特别是在目前所做的这个电信项目进入快失败的边缘时刻（当然不是WAS引起的，正尽一切努力挽回），加之工作环境中上网不便，使得我无暇更多的参与到论坛中来，但论坛和QQ群里的朋友们依然或默默的支持，或真诚的关心，或给我力量，或一次次告诉我：办法总比问题多。</p>
		<p>　　这个“冬天”，其实并不那么冷！</p>
<img src ="http://www.blogjava.net/fastzch/aggbug/249665.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fastzch/" target="_blank">Robin's Programming World</a> 2009-01-04 00:34 <a href="http://www.blogjava.net/fastzch/archive/2009/01/04/249665.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WebSphere6.1中使用Spring报cvc-elt.1: Cannot find the declaration of element 'beans'异常的解决办法</title><link>http://www.blogjava.net/fastzch/archive/2008/11/19/241264.html</link><dc:creator>Robin's Programming World</dc:creator><author>Robin's Programming World</author><pubDate>Tue, 18 Nov 2008 16:27:00 GMT</pubDate><guid>http://www.blogjava.net/fastzch/archive/2008/11/19/241264.html</guid><wfw:comment>http://www.blogjava.net/fastzch/comments/241264.html</wfw:comment><comments>http://www.blogjava.net/fastzch/archive/2008/11/19/241264.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/fastzch/comments/commentRss/241264.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fastzch/services/trackbacks/241264.html</trackback:ping><description><![CDATA[
		<span lang="EN-US">
				<font size="2">
						<font color="#ff0000">本Blog所有内容不得随意转载，版权属于作者所有。如需转载请与作者联系（</font>
				</font>
				<a href="mailto:fastzch@163.com">
						<font size="2">
								<font style="BACKGROUND-COLOR: #ffffff" color="#ff0000">fastzch@163.com</font>
								<font color="#1a8bc8">
								</font>
						</font>
				</a>
				<font style="BACKGROUND-COLOR: #ffffff" color="#ff0000" size="2">）。<br />未经许可的转载，本人保留一切法律权益。<br />一直以来，发现有某些人完全不尊重我的劳动成果，随意转载，提醒一下那些人小心哪天惹上官司。</font>
		</span>
		<br />
		<br />今天在WebSphere Application Server 6.1中部署使用Spring 2.5开发的应用时，遇到了不少网友遇到的问题，即Spring启动时会报如下错误：<br />cvc-elt.1: Cannot find the declaration of element 'beans'<br /><br />在网上搜了一下，发现有很多人提供了解决的办法，但我一一试过，最终都不行。<br />解决方案列表如下：<br /><a href="http://hi.baidu.com/obullxl/blog/item/734d55fb83da3b62034f56e4.html" target="_blank">1、[分享]Spring启动异常: cvc-elt.1: Cannot find the declaration of element 'beans'</a><br /><a href="http://blog.chinaunix.net/u/26845/showart_1275137.html" target="_blank">2、spring从sun jdk到IBMjdk</a><br /><br />这两篇文章中都提供了各自的解决方法，但为何在我的应用中就是不行了？<br />其实不是不行，而是需要根据Spring的版本不同，进行不同的处理，刚好我用的是Spring2.5，所以解决起来需要另一种方法，即配置文件XML的头部的声明应该为：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">&lt;?</span><span style="COLOR: #ff00ff">xml version="1.0" encoding="UTF-8"</span><span style="COLOR: #0000ff">?&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  - Application context definition for JPetStore's business layer.<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  - Contains bean references to the transaction manager and to the DAOs in<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  - dataAccessContext-local/jta.xml (see web.xml's "contextConfigLocation").<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">beans </span><span style="COLOR: #ff0000">xmlns</span><span style="COLOR: #0000ff">="http://www.springframework.org/schema/beans"</span><span style="COLOR: #ff0000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />         xmlns:xsi</span><span style="COLOR: #0000ff">="http://www.w3.org/2001/XMLSchema-instance"</span><span style="COLOR: #ff0000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />         xmlns:aop</span><span style="COLOR: #0000ff">="http://www.springframework.org/schema/aop"</span><span style="COLOR: #ff0000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />         xmlns:tx</span><span style="COLOR: #0000ff">="http://www.springframework.org/schema/tx"</span><span style="COLOR: #ff0000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />         xsi:schemaLocation</span><span style="COLOR: #0000ff">="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>这段声明，是来自Spring2.5包中自带的Sample目录中的一些例子的代码中，当我把我的XML的头部改成这样以后，果然可以顺利启动。<img src ="http://www.blogjava.net/fastzch/aggbug/241264.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fastzch/" target="_blank">Robin's Programming World</a> 2008-11-19 00:27 <a href="http://www.blogjava.net/fastzch/archive/2008/11/19/241264.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WebSphere Application Server之wsadmin学习(一)</title><link>http://www.blogjava.net/fastzch/archive/2008/09/18/229797.html</link><dc:creator>Robin's Programming World</dc:creator><author>Robin's Programming World</author><pubDate>Thu, 18 Sep 2008 13:04:00 GMT</pubDate><guid>http://www.blogjava.net/fastzch/archive/2008/09/18/229797.html</guid><wfw:comment>http://www.blogjava.net/fastzch/comments/229797.html</wfw:comment><comments>http://www.blogjava.net/fastzch/archive/2008/09/18/229797.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/fastzch/comments/commentRss/229797.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fastzch/services/trackbacks/229797.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 本Blog所有内容不得随意转载，版权属于作者所有。如需转载请与作者联系（														fastzch@163.com																												）。未经许可的转载，本人保留一切法律权益。一直以来，发现有某些人完全不尊重我的劳动成果，随意转载，提醒一下那些人小心哪天惹上官司。												there are two ...&nbsp;&nbsp;<a href='http://www.blogjava.net/fastzch/archive/2008/09/18/229797.html'>阅读全文</a><img src ="http://www.blogjava.net/fastzch/aggbug/229797.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fastzch/" target="_blank">Robin's Programming World</a> 2008-09-18 21:04 <a href="http://www.blogjava.net/fastzch/archive/2008/09/18/229797.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Websphere 6.1关于堆转储的相关资料汇集</title><link>http://www.blogjava.net/fastzch/archive/2008/09/10/228164.html</link><dc:creator>Robin's Programming World</dc:creator><author>Robin's Programming World</author><pubDate>Wed, 10 Sep 2008 07:36:00 GMT</pubDate><guid>http://www.blogjava.net/fastzch/archive/2008/09/10/228164.html</guid><wfw:comment>http://www.blogjava.net/fastzch/comments/228164.html</wfw:comment><comments>http://www.blogjava.net/fastzch/archive/2008/09/10/228164.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/fastzch/comments/commentRss/228164.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fastzch/services/trackbacks/228164.html</trackback:ping><description><![CDATA[
		<p>
				<font color="#ff0000">本Blog所有内容不得随意转载，版权属于作者所有。如需转载请与作者联系（</font>
				<a href="mailto:fastzch@163.com">
						<font style="BACKGROUND-COLOR: #ffffff" color="#ff0000">fastzch@163.com</font>
						<font color="#1a8bc8">
						</font>
				</a>
				<font style="BACKGROUND-COLOR: #ffffff" color="#ff0000">）。<br />未经许可的转载，本人保留一切法律权益。<br />一直以来，发现有某些人完全不尊重我的劳动成果，随意转载，提醒一下那些人小心哪天惹上官司。</font>
		</p>
		<p>一、关于各工具的使用，我简单的整理总结了一下，列表如下：<br />ga(IBM Pattern Modeling and Analysis Tool for Java Garbage Collector)   <br /> 分析WAS产生的GC Log的工具<br /> <br />jca(IBM Thread and Monitor Dump Analyzer for Java)<br /> 分析WAS OOM时产生的(文件名以javacore开头，后缀名为.txt<br />  例：javacore.20080731.200248.2324.txt)</p>
		<p>ha(IBM HeapAnalyzer)<br /> 分析WAS产生的Java Heap Dump的文件(文件后缀名为.phd)<br /><br /><br />二、关于在Windows上生成WebSphere的java heap dump 和 java core dump的操作，可以参考我的另一篇文章：<br />《<a class="postTitle2" id="viewpost1_TitleUrl" href="/fastzch/archive/2008/09/10/228085.html"><font color="#1a8bc8">[转载]如何在Windows 平台获得WASv5.x/6.x的 Java HeapDump和JavaCore 诊断文件?</font></a> 》<br /><br />三、相关参考资料：<br /><font style="BACKGROUND-COLOR: #7fffd4">以下内容来自于WebSphere 的Info Center：</font> </p>
		<h1 class="topictitle1">以手动方式生成堆转储</h1>
		<div>
				<p>使用此任务来手动生成堆转储。如果使用的 Sun Java 虚拟机（JVM）包含在 HP-UX 和 Solaris 操作系统上运行的 WebSphere Application Server，那么不支持此功能。</p>
				<div class="section">
						<h4 class="sectiontitle">在您开始之前 </h4>
						<p>
								<img alt="[Windows]" src="http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.express.doc/info/windows.gif" />
								<img alt="[AIX]" src="http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.express.doc/info/aixlogo.gif" />
								<img alt="[Linux]" src="http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.express.doc/info/linux.gif" /> 虽然只有在检测到内存泄漏时才会生成堆转储，但是，您必须知道，生成堆转储时会严重影响 WebSphere Application Server 的性能，并且时间长达数分钟。因此，在以手动方式生成多个堆转储以便进行内存泄漏分析时，请确保泄漏的对象达到相当数目后才创建另一个堆转储。这样，问题确定工具就能够确定内存泄漏的根源。 </p>
				</div>
				<div class="section">
						<h4 class="sectiontitle">关于本任务 </h4>您可能想以手动方式生成堆转储，以便对内存泄漏进行分析。在 WebSphere Application Server 中的 Java 虚拟机（JVM）上，无法自动生成堆转储。由于生成堆转储的成本相当高，因此，您可能想指定堆转储的生成时间。在 WebSphere Application Server 中的 JVM 上，可以通过对 WebSphere Application Server 受管 Bean（MBean，这些是特殊的 Java bean）执行 generateHeapDump 操作来以手动方式生成堆转储。 
<p>WebSphere Application Server wsadmin 工具提供运行脚本的能力。您可以使用 wsadmin 工具来管理 WebSphere Application Server 安装版本以及配置、应用程序部署和服务器运行时操作。WebSphere Application Server 仅支持 Jacl 和 Jython 脚本语言。有关 wsadmin 工具的更多信息，请参阅<a href="http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.express.doc/info/exp/ae/txml_launchscript.html" cmimpressionsent="1">启动 wsadmin 脚本客户机</a>主题。</p></div>
				<h4 class="sectiontitle">过程 </h4>
				<ol>
						<li class="stepexpand">
								<span>
										<a href="http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.express.doc/info/exp/ae/txml_launchscript.html" cmimpressionsent="1">启动 wsadmin 脚本客户机。</a>
								</span>要运行脚本命令，您有多个选项，这些选项包括以交互方式运行脚本命令以及在概要文件中运行脚本命令。 
</li>
						<li class="stepexpand">
								<span>例如，对 JVM MBean 调用 generateHeapDump 操作</span>
								<ul>
										<li>查找 JVM objectName：<pre>&lt;wsadmin&gt; set objectName [$AdminControl queryNames 
WebSphere:type=JVM,process=&lt;<em>servername</em>&gt;,node=&lt;<em>nodename</em>&gt;,*]  </pre></li>
										<li>对 JVM MBean 调用 generateHeapDump 操作：<pre>&lt;wsadmin&gt; $AdminControl invoke $objectName generateHeapDump</pre><div class="p">其中： 
<div class="tablenoborder"><table cellspacing="0" cellpadding="4" rules="all" summary="" border="1" frame="border"><tbody valign="top"><tr><td valign="top" align="left"><tt>$</tt></td><td valign="top" align="left">是使用其值替换变量名的 Jacl 运算符</td></tr><tr><td valign="top" align="left"><tt>invoke</tt></td><td valign="top" align="left">是命令</td></tr><tr><td valign="top" align="left"><tt>generateHeapDump </tt></td><td valign="top" align="left">是要调用的操作</td></tr><tr><td valign="top" align="left"><tt>&lt;<em>servername</em>&gt;</tt></td><td valign="top" align="left">是服务器的名称，将在该服务器上生成堆转储</td></tr><tr><td valign="top" align="left"><tt>&lt;<em>nodename</em>&gt;</tt></td><td valign="top" align="left">是 <tt>&lt;<em>servername</em>&gt;</tt> 所属的节点</td></tr></tbody></table></div></div></li>
								</ul>
						</li>
				</ol>
				<div class="section">
						<h4 class="sectiontitle">下一步做什么？ </h4>
						<p>运行 <strong>wsadmin</strong> 命令后，将返回堆转储的文件名。有关查找堆转储的更多信息，请参阅<a href="http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.express.doc/info/exp/ae/tprf_collectingheapdumps.html" cmimpressionsent="1">查找和分析堆转储</a>主题。在创建了一两个堆转储之后，可使用许多内存泄漏问题确定工具来分析问题。Memory Dump Diagnostic for Java™ i 是一个脱机工具，此工具可用于诊断造成 Java 堆内存泄漏的根本原因。请参阅<a href="" cmimpressionsent="1">诊断内存不足错误和 Java 堆内存泄漏</a>，以了解更多信息。</p>
				</div>
		</div>
		<p>
		</p>
		<hr align="left" />
		<p>
		</p>
		<div>
				<div class="reltasks">
						<strong>相关任务</strong>
						<br />
						<div>
								<a href="http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.express.doc/info/exp/ae/tprf_enablingheapdump.html" cmimpressionsent="1">允许自动生成堆转储 </a>
						</div>
				</div>
				<div class="relinfo">
						<strong>相关信息</strong>
						<br />
						<div>
								<a href="http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.express.doc/info/exp/ae/tprf_collectingheapdumps.html" cmimpressionsent="1">查找和分析堆转储 </a>
						</div>
						<div>
								<a href="http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.express.doc/info/exp/ae/ttrb_mdd4j.html" cmimpressionsent="1">诊断内存不足错误和 Java 堆内存泄漏 </a>
								<br />
								<br />
								<br />
								<br />
								<br />
								<br />
								<h1 class="topictitle1">诊断内存不足错误和 Java 堆内存泄漏</h1>
								<div>
										<p>
												<dfn class="term">用于 Java™</dfn> 的内存转储诊断是一个脱机工具，用于诊断 Java 堆中内存泄漏背后的根本原因。此工具分析内存转储（堆转储）的公共格式，该转储来自运行了 WebSphere<sup>®</sup> Application Server 的 Java 虚拟机（JVM）。内存转储的分析用于识别可能是内存泄漏根本原因的 Java 堆中的数据结构。此分析也识别主要组成应用程序的 Java 堆占用量的汇总对象组。此工具能够分析出现内存不足问题的生产环境应用程序服务器中非常巨大的内存转储。</p>
										<div class="section">
												<h4 class="sectiontitle">在您开始之前 </h4>
												<div class="p">此工具使用从 WebSphere Application Server 产生的内存转储，而不是从用于 Java 的内存转储诊断工具产生的内存转储。支持下列转储格式： 
<ul><li><img alt="[AIX]" src="http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.express.doc/info/aixlogo.gif" /><img alt="[Linux]" src="http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.express.doc/info/linux.gif" /><img alt="[Windows]" src="http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.express.doc/info/windows.gif" /> IBM<sup>®</sup> 可移植堆转储（.phd），用于大多数平台上的 WebSphere Application Server V5.1.x 和更高版本 
</li><li><img alt="[AIX]" src="http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.express.doc/info/aixlogo.gif" /><img alt="[Linux]" src="http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.express.doc/info/linux.gif" /><img alt="[Windows]" src="http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.express.doc/info/windows.gif" /> IBM 文本，用于大多数平台上的 WebSphere Application Server V4.x 和 V5.0.x 
</li><li><img alt="[HP-UX]" src="http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.express.doc/info/hpux.gif" /><img alt="[Solaris]" src="http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.express.doc/info/solaris.gif" /> HPROF，用于 HP-UX 和 Solaris 平台上的 WebSphere Application Server 安装 </li></ul></div>
										</div>
										<div class="section">
												<h4 class="sectiontitle">关于本任务 </h4>
												<p>当对象引用在它们不再需要后无意保留时，内存泄漏可能在 Java 应用程序中发生。即使 Java 语言有内建的垃圾回收机制来帮助程序员显式释放对象，这个问题也会阻止 Java 垃圾回收进程释放内存。由于 Java 堆中大量的对象以及这些对象之间的复杂关系，因此很难在大型的复杂 Java 应用程序中诊断内存泄漏。</p>
												<p>存在两种类型的分析机制：单一转储分析和两个转储的比较分析。此工具列示可疑的数据结构和数据类型，并在一个基于浏览器的交互式 Web 应用程序中显示内存转储的内容。该工具在具有相似所有权结构的数据类型有效集图形布局中显示占用量分析结果。此工具将内存转储的内容显示在用于浏览的交互式树形视图中，以及分别显示在对象和数据类型的两个表视图中。树形视图允许您查找每个对象的所有入局和出局引用，以及查看每个具有可疑内存泄漏的数据结构中的容器对象位置。</p>
												<p>以脱机方式分析内存转储为识别内存泄漏背后的根本原因提供了低开销的机制。此机制特别适合于在生产中或在压力测试环境中运行的大型应用程序，在这些地方经常首先检测到内存泄漏。</p>
										</div>
										<h4 class="sectiontitle">过程 </h4>
										<ol>
												<li class="stepexpand">
														<span>在某一与要分析的应用程序服务器安装不同的计算机上安装 IBM Support Assistant。</span> 使用一台具有至少 5 千兆字节（GB）可用磁盘空间、至少 1.5 GB RAM 以及一个频率为 2 GHz 或更快的 Intel<sup>®</sup> 处理器的非生产计算机，最好是在 Linux<sup>®</sup> 平台上。 
</li>
												<li class="stepexpand">
														<span>在要分析的应用程序服务器安装上启用详细垃圾回收。</span>
														<p>详细垃圾回收信息帮助从分段存储或本机内存泄漏中排除基本配置问题和内存泄漏问题。有关如何在 IBM 平台上启用详细垃圾回收的更多信息，请参阅 <a href="http://www-128.ibm.com/developerworks/java/jdk/diagnosis/" cmimpressionsent="1">IBM developer kits: Diagnosis documentation</a>。</p>
												</li>
												<li class="stepexpand">
														<strong>可选： </strong>
														<span>在 WebSphere Application Server 中启用轻量级内存泄漏检测。</span>
														<p>启用轻量级内存泄漏检测可以帮助早期检测异常的内存使用行为以及自动触发堆转储。</p>
												</li>
												<li class="stepexpand">
														<span>为 WebSphere Application Server 启用 JVM 堆转储。</span>
														<p>从 IBM Support Assistant 启动时，请参阅工具提供的文档。</p>
												</li>
												<li class="stepexpand">
														<span>当堆转储可用时，运行用于 Java 的内存转储诊断工具。</span>
														<ol type="a">
																<li>
																		<span>
																				<a href="http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.express.doc/info/exp/ae/ttrb_supportasst.html" cmimpressionsent="1">启动 IBM Support Assistant</a>。</span>
																</li>
																<li>
																		<span>在 IBM Support Assistant 中，选择<span class="uicontrol">工具</span>选项卡。</span>
																</li>
																<li>
																		<span>在左边，单击 <span class="uicontrol">WebSphere 6.1</span>。</span>
																</li>
																<li>
																		<span>在右边，单击<span class="uicontrol">用于 Java 的内存转储诊断</span>。</span>
																</li>
														</ol>
												</li>
										</ol>
										<div class="section">
												<h4 class="sectiontitle">结果 </h4>
												<p>这样就识别出内存泄漏的可能根本原因。</p>
												<div class="p">Java 堆中的内存泄漏在日志文件中产生了 java.lang.OutOfMemoryError 异常。但是，不是所有的内存不足错误是由 Java 堆内存泄漏导致的。内存不足错误也可能由下列情形造成： 
<ul><li>Java 堆分段存储。在没有连续的大块可用 Java 堆空间可用来分配 Java 对象时，此分段存储发生。此问题存在不同的原因，包括存在锁住对象，或者因为出现重复的大对象分配。 
</li><li>本机堆中的内存泄漏。当一个本机组件（如 DB2<sup>®</sup> 连接）正在泄漏时，此问题发生。 </li></ul></div>
												<p>对于这两种情形，不管是否有大量的可用 Java 堆空间，内存不足错误都可能发生。因此，用于 Java 的内存转储诊断工具在确定这些情况中的根本原因时可能无效。</p>
										</div>
								</div>
								<hr align="left" />
								<div>
										<div class="familylinks">
										</div>
										<div class="reltasks">
												<strong>相关任务</strong>
												<br />
												<div>
														<a href="http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.express.doc/info/exp/ae/ttrb_supportasst.html" cmimpressionsent="1">获取 IBM Support Assistant </a>
												</div>
												<div>
														<a href="http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.express.doc/info/exp/ae/tprf_enablingheapdump.html" cmimpressionsent="1">允许自动生成堆转储 </a>
												</div>
												<a href="http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.express.doc/info/exp/ae/ttrb_diagfix.html" cmimpressionsent="1">诊断问题（使用诊断工具） </a>
										</div>
										<div class="relinfo">
												<strong>相关信息</strong>
												<br />
												<div>
														<a href="http://www.ibm.com/developerworks/java/jdk/diagnosis/" target="_blank" cmimpressionsent="1">IBM developer kits: Diagnosis documentation</a>
														<br />
														<br />
														<br />
														<br />
														<h1 class="topictitle1">允许自动生成堆转储</h1>
														<div>
																<p>使用此任务来启用自动化堆转储生成。如果使用的 Sun Java 虚拟机（JVM）包含在 HP-UX 和 Solaris 操作系统上运行 WebSphere Application Server，那么不支持此功能。您需要研究一下如何在 Sun JVM 上收集堆转储，或者致电 IBM 支持机构。</p>
																<div class="section">
																		<h4 class="sectiontitle">在您开始之前 </h4>虽然只有在检测到内存泄漏时才会生成堆转储，但是，您必须知道，生成堆转储时会严重影响 WebSphere Application Server 的性能，并且时间长达数分钟。</div>
																<div class="section">
																		<h4 class="sectiontitle">关于本任务 </h4>
																		<p>自动化堆转储生成支持，它仅在 IBM Software Development Kit 中可用，并且会分析 AIX、Linux 和 Windows 操作系统上的内存泄漏问题。</p>
																		<p>在相应的时间手动生成堆转储可能很困难。为了在进行内存泄漏检测时帮助您分析内存泄漏问题，提供了一些自动化堆转储生成支持。此功能仅对 AIX、Linux 和 Windows 操作系统上的 IBM Software Development Kit 可用。</p>
																		<p>大多数内存泄漏分析工具对两个堆转储执行不同形式的评估。在检测可疑的内存情况时，将在相应的时间自动生成两个堆转储。通常理想状态是一进行问题检测时就执行初始堆转储。在确定泄漏了一定量的内存后，监视内存使用情况并进行另一次堆转储，所以可比较堆转储以找出泄漏源。</p>
																		<p>为了在进行内存泄漏检测时帮助您分析内存泄漏问题，提供了一些自动化堆转储生成支持。 </p>
																		<p>要自动生成堆转储，请在管理控制台中执行以下步骤：</p>
																</div>
																<h4 class="sectiontitle">过程 </h4>
																<ol>
																		<li>
																				<span>在管理控制台导航树中单击<strong>服务器 &gt; 应用程序服务器</strong>。</span>
																		</li>
																		<li>
																				<span>单击 <em>server_name</em> &gt; <strong><span>性能和诊断顾问程序</span>配置</strong>。</span>
																		</li>
																		<li>
																				<span>单击<strong>运行时</strong>选项卡。</span>
																		</li>
																		<li>
																				<span>选中<strong>启用自动堆转储收集</strong>复选框。</span>
																		</li>
																		<li>
																				<span>单击<strong>确定</strong>。</span>
																		</li>
																</ol>
																<div class="section">
																		<h4 class="sectiontitle">结果 </h4>完成这些步骤后，系统将自动生成堆转储。 
<p><strong>要点：</strong>为了节省磁盘空间，如果在 WebSphere Application Server 主目录中已有 10 个以上的堆转储，<span>性能和诊断顾问程序</span>就会停止创建堆转储。根据应用程序服务器上的堆大小以及工作负载的不同，创建堆转储的成本可能非常高，并且可能会暂时影响系统性能。</p></div>
																<div class="section">
																		<h4 class="sectiontitle">下一步做什么？ </h4>您可以通过检查 <tt>SystemOut.log</tt> 文件或运行时消息来监视内存泄漏通知。有关更多信息，请参阅<a href="http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.express.doc/info/exp/ae/tprf_viewingrparecom.html" cmimpressionsent="1"><font color="#002c99">查看性能和诊断顾问程序建议 </font></a>主题。如果检测到内存泄漏，并且您想要查找堆转储，请参阅<a href="http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.express.doc/info/exp/ae/tprf_collectingheapdumps.html" cmimpressionsent="1"><font color="#002c99">查找和分析堆转储</font></a>主题。</div>
														</div>
														<br />
														<hr align="left" />
														<div>
																<div class="relinfo">
																		<strong>子主题</strong>
																		<br />
																		<div>
																				<a href="http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.express.doc/info/exp/ae/tprf_generatingheapdumps.html" cmimpressionsent="1">
																						<font color="#002c99">以手动方式生成堆转储 </font>
																				</a>
																				<br />
																		</div>
																		<div>
																				<a href="http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.express.doc/info/exp/ae/tprf_collectingheapdumps.html" cmimpressionsent="1">
																						<font color="#002c99">查找和分析堆转储 </font>
																				</a>
																				<br />
																		</div>
																</div>
																<div class="relinfo">
																		<strong>相关信息</strong>
																		<br />
																		<div>
																				<a href="http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.express.doc/info/exp/ae/tprf_enablingleakdetection.html" cmimpressionsent="1">
																						<font color="#002c99">启动轻量级内存泄漏检测功能 </font>
																				</a>
																		</div>
																</div>
														</div>
												</div>
										</div>
								</div>
						</div>
				</div>
		</div>
<img src ="http://www.blogjava.net/fastzch/aggbug/228164.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fastzch/" target="_blank">Robin's Programming World</a> 2008-09-10 15:36 <a href="http://www.blogjava.net/fastzch/archive/2008/09/10/228164.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转载]如何在Windows 平台获得WASv5.x/6.x的 Java HeapDump和JavaCore 诊断文件?</title><link>http://www.blogjava.net/fastzch/archive/2008/09/10/228085.html</link><dc:creator>Robin's Programming World</dc:creator><author>Robin's Programming World</author><pubDate>Wed, 10 Sep 2008 02:51:00 GMT</pubDate><guid>http://www.blogjava.net/fastzch/archive/2008/09/10/228085.html</guid><wfw:comment>http://www.blogjava.net/fastzch/comments/228085.html</wfw:comment><comments>http://www.blogjava.net/fastzch/archive/2008/09/10/228085.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fastzch/comments/commentRss/228085.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fastzch/services/trackbacks/228085.html</trackback:ping><description><![CDATA[
		<p>
				<font style="BACKGROUND-COLOR: #ffff00">笔者注：其实在Unix或Linux系统中照样可以。因为这是通过WSADMIN去操作的，所以不分平台。</font>
		</p>
		<p>很不错的文章，不敢独享，特转载来分享给大家<br />原文出处：<a href="http://www.itpub.net/731657.html">http://www.itpub.net/731657.html</a><br /><br />具体步骤如下：<br />1、 设置Windows的环境变量，使WAS JVM在产生javacore的同时产生HeapDump文件（缺省只会产生 javacore)。点击windows桌面－&gt;鼠标右键－属性－进入系统属性对话框－进入高级页面－点击环境变量－在系统变量中－分别加入以下变量名和变量值<br />变量名 变量值<br />IBM_HEAPDUMP true<br />IBM_HEAP_DUMP true<br />IBM_HEAPDUMPDIR c:\<br /><br />2、 注销当前用户，重新登录<br /><br />3、 可以通过手工或windows 服务的方式启动WAS，如果使用手工方式，如下：<br />===For WAS5.x====<br />cd c:\WebSphere\AppServer\bin<br />startServer.bat server1<br />===For WAS6.x====<br />cd c:\WebSphere\AppServer\profiles\default\bin<br />startServer.bat server1<br /><br />4、 WAS启动正常后，在C:\WebSphere\AppServer\bin或C:\WebSphere\AppServer\profiles\default\bin目录中通过以下命令让JVM产生JavaCore和HeapDump文件<br />键入wsadmin.bat命令，进入wsadmin管理命令行，键入如下代码：<br />set jvm [$AdminControl completeObjectName type=JVM,process=server1,*]<br /><br /><font style="BACKGROUND-COLOR: #ff1493">$AdminControl invoke $jvm dumpThreads</font><br /><br />javacore.TIMESTAMP.NUMBER.txt  文件会自动在C:\WebSphere\AppServer或C:\WebSphere\AppServer\default\或您指定的目录中产生。<br /><br /><font style="BACKGROUND-COLOR: #ff1493">$AdminControl invoke $jvm generateHeapDump<br />生成文件类型名为.phd的文件，这个文件就是完整的堆的dump(此命令为我添加的，这个更有用)</font><br /><br />补充：<br />IBM_HEAPDUMP_OUTOFMEMORY true<br />IBM_JAVADUMP_OUTOFMEMORY true<br />WAS在以上两项环境变量的设置下，一旦JVM出现内存申请失败抛出Out of Memory错误时，JVM将会自动产生JavaCore和HeapDump。<br /><br />在生产环境下，谨慎使用此两项环境变量的设置，以防把文件系统撑爆。<br /></p>
<img src ="http://www.blogjava.net/fastzch/aggbug/228085.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fastzch/" target="_blank">Robin's Programming World</a> 2008-09-10 10:51 <a href="http://www.blogjava.net/fastzch/archive/2008/09/10/228085.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring Autowire(自动装载)的一次实践</title><link>http://www.blogjava.net/fastzch/archive/2008/09/02/226526.html</link><dc:creator>Robin's Programming World</dc:creator><author>Robin's Programming World</author><pubDate>Tue, 02 Sep 2008 15:27:00 GMT</pubDate><guid>http://www.blogjava.net/fastzch/archive/2008/09/02/226526.html</guid><wfw:comment>http://www.blogjava.net/fastzch/comments/226526.html</wfw:comment><comments>http://www.blogjava.net/fastzch/archive/2008/09/02/226526.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/fastzch/comments/commentRss/226526.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fastzch/services/trackbacks/226526.html</trackback:ping><description><![CDATA[
		<font color="#ff0000">本Blog所有内容不得随意转载，版权属于作者所有。如需转载请与作者联系（</font>
		<a href="mailto:fastzch@163.com">
				<font style="BACKGROUND-COLOR: #ffffff" color="#ff0000">fastzch@163.com</font>
				<font color="#1a8bc8">
				</font>
		</a>
		<font style="BACKGROUND-COLOR: #ffffff" color="#ff0000">）。<br />未经许可的转载，本人保留一切法律权益。<br />一直以来，发现有某些人完全不尊重我的劳动成果，随意转载，提醒一下那些人小心哪天惹上官司。</font>
		<br />
		<br />
		<strong>
				<font size="4">缘起<br /></font>
		</strong>随着系统中不断的增加需求，功能越来越多了。昨天，看到我项目中的application.xml已经超过了1000行，还有Acegi和XFire的配置文件，也比较长，所以就想着来分拆和瘦身。<br /><br /><strong><font size="4">基础</font></strong><br />如果没有记错的话，Spring是从1.2起，开始支持自动装载的，这并不是鸡肋功能，在Spring 2.0中得到了进一步的改进。到目前为止，Spring共支持以下五种方式的自动装载：<br /><table summary="Autowiring modes" border="1"><thead><tr><th>模式</th><th>说明</th></tr></thead><tbody><tr><td>no</td><td><p>不使用自动装配。必须通过<code class="literal">ref</code>元素指定依赖，这是默认设置。由于显式指定协作者可以使配置更灵活、更清晰，因此对于较大的部署配置，推荐采用该设置。而且在某种程度上，它也是系统架构的一种文档形式。</p></td></tr><tr><td>byName</td><td><p>根据属性名自动装配。此选项将检查容器并根据名字查找与属性完全一致的bean，并将其与属性自动装配。例如，在bean定义中将autowire设置为by name，而该bean包含<span class="emphasis"><em>master</em></span>属性（同时提供<span class="emphasis"><em>setMaster(..)</em></span>方法），Spring就会查找名为<code class="literal">master</code>的bean定义，并用它来装配给master属性。</p></td></tr><tr><td>byType</td><td><p>如果容器中存在一个与指定属性类型相同的bean，那么将与该属性自动装配。如果存在多个该类型的bean，那么将会抛出异常，并指出不能使用<span class="emphasis"><em>byType</em></span>方式进行自动装配。若没有找到相匹配的bean，则什么事都不发生，属性也不会被设置。如果你不希望这样，那么可以通过设置<code class="literal">dependency-check="objects"</code>让Spring抛出异常。</p></td></tr><tr><td>constructor</td><td><p>与<span class="emphasis"><em>byType</em></span>的方式类似，不同之处在于它应用于构造器参数。如果在容器中没有找到与构造器参数类型一致的bean，那么将会抛出异常。</p></td></tr><tr><td>autodetect</td><td><p>通过bean类的自省机制（introspection）来决定是使用<span class="emphasis"><em>constructor</em></span>还是<span class="emphasis"><em>byType</em></span>方式进行自动装配。如果发现默认的构造器，那么将使用<span class="emphasis"><em>byType</em></span>方式。</p></td></tr></tbody></table><br /><strong><font size="4">步骤</font></strong><br />1，将application.xml分成两个，一个文件里面管理的是系统基本信息的Bean管理，另一个文件是业务信息的Bean管理(当然，如果你觉得还不够的话，可以将其按功能模块进一步拆分)。<br />拆分后当然需要更改web.xml中的配置，如下：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">context-param</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">param-name</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">contextConfigLocation</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">param-name</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">param-value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">classpath:applicationContext*.xml,classpath:xfire-servlet.xml</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">param-value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">context-param</span><span style="COLOR: #0000ff">&gt;</span></div><br />2，使用byType的方式，对业务信息部分的Bean进行自动装载，因为我Class中的有些属性可能并不与XML配置中的名称一致，所以想使用这样的方式相对简单，不需要去将属性名和XML的Bean ID一一对应。配置如下：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">beans </span><span style="COLOR: #ff0000">default-autowire</span><span style="COLOR: #0000ff">="byType"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><img src="http://www.blogjava.net/images/dot.gif" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">beans</span><span style="COLOR: #0000ff">&gt;</span></div><br />来，启动应用，试试看效果吧。正在我庆幸自己不用去比对名称的时候，系统到如下阶段时停住了。<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">|INFO |2008-09-02 22:56:50;206|org.springframework.orm.hibernate3.HibernateTransactionManager:org.springframework.orm.hibernate3.HibernateTransactionManager.afterPropertiesSet(371)|Using DataSource [org.apache.commons.dbcp.BasicDataSource@6da8eb] of Hibernate SessionFactory for HibernateTransactionManager|<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>此时我等了5分钟，CPU一直被Javaw进程占用，使用率高达98%，目前还不知道为什么会这样，也请各位不吝赐教。<br /><br />3，既然byType行不通，那就只能byName了，配置如下：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">beans </span><span style="COLOR: #ff0000">default-autowire</span><span style="COLOR: #0000ff">="byName"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><img src="http://www.blogjava.net/images/dot.gif" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">beans</span><span style="COLOR: #0000ff">&gt;</span></div>然后核对了一遍名称。为了保险，我还是将每个功能都做了一下冒烟测试，幸好不多，只有二十个功能左右，果然有两个“冒烟”的，检查一下，发现是类里面的属性名的大小写不对，改正后，一切OK。<br /><br /><font size="4"><strong>成果</strong></font><br />1，项目业务模块部分的Bean配置文件一下从原来的800多行变为400多行，瘦身近50%。<br />2，系统启动时，缩短了XML校验的时间，虽然时间每次缩小的很短，这对于调试来说，还是很值的，因为项目开发中所有调试的运行会有很多次，总量加起也不是个小数目。<br />3，以后增加功能模块时，就算是Copy以前的配置来改，也可以少改几个地方。<br />这笔买卖似乎还很值哟，^-^<br /><br /><strong><font size="4">总结</font></strong><br />1，建议不要将所有Bean都设成自动装载，而只用将业务相关的Bean设成自动装载。<br />2，如果你的项目中名称使用很乱，没有规范，那就不要用byName的自动装载了。<br />3，如果是重构时使用的自动装载，一定要记得做冒烟测试。<br /><img src ="http://www.blogjava.net/fastzch/aggbug/226526.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fastzch/" target="_blank">Robin's Programming World</a> 2008-09-02 23:27 <a href="http://www.blogjava.net/fastzch/archive/2008/09/02/226526.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IBM Pattern Modeling and Analysis Tool for Java Garbage Collector发布2.6版，支持Java 6</title><link>http://www.blogjava.net/fastzch/archive/2008/09/01/225977.html</link><dc:creator>Robin's Programming World</dc:creator><author>Robin's Programming World</author><pubDate>Sun, 31 Aug 2008 16:11:00 GMT</pubDate><guid>http://www.blogjava.net/fastzch/archive/2008/09/01/225977.html</guid><wfw:comment>http://www.blogjava.net/fastzch/comments/225977.html</wfw:comment><comments>http://www.blogjava.net/fastzch/archive/2008/09/01/225977.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fastzch/comments/commentRss/225977.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fastzch/services/trackbacks/225977.html</trackback:ping><description><![CDATA[
		<font color="#ff0000">本Blog所有内容不得随意转载，版权属于作者所有。如需转载请与作者联系（</font>
		<a href="mailto:fastzch@163.com">
				<font style="BACKGROUND-COLOR: #ffffff" color="#ff0000">fastzch@163.com</font>
				<font color="#1a8bc8">
				</font>
		</a>
		<font style="BACKGROUND-COLOR: #ffffff" color="#ff0000">）。<br />未经许可的转载，本人保留一切法律权益。<br />一直以来，发现有某些人完全不尊重我的劳动成果，随意转载，提醒一下那些人小心哪天惹上官司。</font>
		<br />
		<br />IBM Pattern Modeling and Analysis Tool for Java Garbage Collector(简称GA)，大名鼎鼎的IBM用来分析JDK GC日志的工具，2008年8月23日，更新至2.6版，增加了对Java 6 GC日志的分析。<br /><br />我想这也是为了配合Websphere Application Server 7.0的测试版发布，在我之前的一篇文章《<a href="/fastzch/archive/2008/08/07/220553.html">WebSphere Application Server 7.0 初体验</a>》中曾经提到，GCViewer这个工具目前还无法查看其GC的日志，现在不用担心这个问题了，用GA2.6来看吧。<br /><br />来看看官方的简介：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">What is Pattern Modeling and Analysis Tool for IBM Java Garbage Collector?<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />Pattern Modeling and Analysis Tool for IBM® Java™ Garbage Collector (PMAT) parses verbose GC trace, analyzes Java heap usage, and recommends key configurations based on pattern modeling of Java heap usage. <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />When the JVM (Java virtual machine) cannot allocate an object from the current heap because of lack of space, a memory allocation fault occurs, and the Garbage Collector is invoked. The first task of the Garbage Collector is to collect all the garbage that is in the heap. This process starts when any thread calls the Garbage Collector either indirectly as a result of allocation failure or directly by a specific call to System.gc(). The first step is to get all the locks needed by the garbage collection process. This step ensures that other threads are not suspended while they are holding critical locks. All other threads are then suspended. Garbage collection can then begin. It occurs in three phases: Mark, Sweep, and Compaction (optional). <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />Verbose GC is a command-line option that one can supply to the JVM at start-up time. The format is: -verbose:gc or -verbosegc. This option switches on a substantial trace of every garbage collection cycle. The format for the generated information is not designed and therefore varies among various platforms and releases. <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />This trace should allow one to see the gross heap usage in every garbage collection cycle. For example, one could monitor the output to see the changes in the free heap space and the total heap space. This information can be used to determine whether garbage collections are taking too long to run; whether too many garbage collections are occurring; and whether the JVM crashed during garbage collection. <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div><br />更多讯息，可以参考其官方网站：<br /><a href="http://alphaworks.ibm.com/tech/pmat">http://alphaworks.ibm.com/tech/pmat</a><br /><br />WAS的GC日志的获得方法，可以参见我的另一篇文章《<a href="/fastzch/archive/2008/08/07/220553.html" target="_blank">WebSphere Application Server 7.0 初体验</a>》，当然也可以看WAS的文档或此软件的文档。<br /><br />下图是我试用WAS7.0产生的GC Log的Chart View：<br /><img src="http://www.blogjava.net/images/blogjava_net/fastzch/7477/o_ibm%20ga26%20chart%20view.gif" /><br /><br />有兴趣的朋友们可以试试看。<img src ="http://www.blogjava.net/fastzch/aggbug/225977.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fastzch/" target="_blank">Robin's Programming World</a> 2008-09-01 00:11 <a href="http://www.blogjava.net/fastzch/archive/2008/09/01/225977.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用XFire开发Web Service客户端完整入门教程</title><link>http://www.blogjava.net/fastzch/archive/2008/08/28/225439.html</link><dc:creator>Robin's Programming World</dc:creator><author>Robin's Programming World</author><pubDate>Thu, 28 Aug 2008 15:26:00 GMT</pubDate><guid>http://www.blogjava.net/fastzch/archive/2008/08/28/225439.html</guid><wfw:comment>http://www.blogjava.net/fastzch/comments/225439.html</wfw:comment><comments>http://www.blogjava.net/fastzch/archive/2008/08/28/225439.html#Feedback</comments><slash:comments>30</slash:comments><wfw:commentRss>http://www.blogjava.net/fastzch/comments/commentRss/225439.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fastzch/services/trackbacks/225439.html</trackback:ping><description><![CDATA[
		<font color="#ff0000">本Blog所有内容不得随意转载，版权属于作者所有。如需转载请与作者联系（</font>
		<a href="mailto:fastzch@163.com">
				<font style="BACKGROUND-COLOR: #ffffff" color="#ff0000">fastzch@163.com</font>
				<font color="#1a8bc8">
				</font>
		</a>
		<font style="BACKGROUND-COLOR: #ffffff" color="#ff0000">）。<br />未经许可的转载，本人保留一切法律权益。<br />一直以来，发现有某些人完全不尊重我的劳动成果，随意转载，提醒一下那些人小心哪天惹上官司。<br /></font>
		<br />虽然XFire现在已经被CXF取代，但在现在已经开发的项目中，还是有不少使用XFire来实现Web Service的。前段时间，我写的使用XFire开发Web Service服务端的文章《<a href="/fastzch/archive/2008/08/26/172535.html" target="_blank">XFire完整入门教程</a>》受到了大家的好评，给大家带来了方便，很是高兴。今天来谈谈用XFire开发客户端。<br /><br />本文也将继续使用上一篇文章的服务端来做为服务端。使用XFire开发Web Service客户端分为如下两大类：<br />一、服务提供者告诉你interface，你可以使用如下三种方式来开发：<br />YourService即是服务提供者告诉给你的一个interface(当然，也可以根据WSDL的定义，自己定义一个同样的interface)。<br />1，简单的方式<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">Service serviceModel </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> ObjectServiceFactory().create(YourService.</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />YourService service </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (YourService)<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> XFireProxyFactory().create(serviceModel, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">http://your/remote/url</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);</span></div>2，JSR 181注释的方式<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">Service serviceModel </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> AnnotationServiceFactory().create(YourService.</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />YourService client </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (YourService)<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> XFireProxyFactory().create(serviceModel, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">http://your/remote/url</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);</span></div>3，混合方式<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">Service serviceModel </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> AnnotationServiceFactory(<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />   </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Jsr181WebAnnotations(),<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />   XFireFactory.newInstance().getXFire().getTransportManager(),<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />   </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> AegisBindingProvider(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> JaxbTypeRegistry())).create(YourService.</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">);</span></div><br />二，通过WSDL创建一个动态的客户端，如下：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> test;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> java.net.MalformedURLException;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> java.net.URL;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> org.codehaus.xfire.client.Client;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_149_460_Open_Image" onclick="this.style.display='none'; Codehighlighter1_149_460_Open_Text.style.display='none'; Codehighlighter1_149_460_Closed_Image.style.display='inline'; Codehighlighter1_149_460_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_149_460_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_149_460_Closed_Text.style.display='none'; Codehighlighter1_149_460_Open_Image.style.display='inline'; Codehighlighter1_149_460_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> DynamicClientTest </span><span id="Codehighlighter1_149_460_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_149_460_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> main(String[] args) </span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> MalformedURLException,<br /><img id="Codehighlighter1_234_458_Open_Image" onclick="this.style.display='none'; Codehighlighter1_234_458_Open_Text.style.display='none'; Codehighlighter1_234_458_Closed_Image.style.display='inline'; Codehighlighter1_234_458_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_234_458_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_234_458_Closed_Text.style.display='none'; Codehighlighter1_234_458_Open_Image.style.display='inline'; Codehighlighter1_234_458_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />            Exception </span><span id="Codehighlighter1_234_458_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_234_458_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        Client client </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Client(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> URL(<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">http://localhost:8080/xfiretest/services/TestService?wsdl</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">));<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        Object[] results </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> client<br /><img id="Codehighlighter1_406_418_Open_Image" onclick="this.style.display='none'; Codehighlighter1_406_418_Open_Text.style.display='none'; Codehighlighter1_406_418_Closed_Image.style.display='inline'; Codehighlighter1_406_418_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_406_418_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_406_418_Closed_Text.style.display='none'; Codehighlighter1_406_418_Open_Image.style.display='inline'; Codehighlighter1_406_418_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />                .invoke(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">sayHello</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Object[] </span><span id="Codehighlighter1_406_418_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_406_418_Open_Text"><span style="COLOR: #000000">{ </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Firends</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> }</span></span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(results[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div><br />三，使用ANT工具或命令行通过WSDL生成一个客户端：<br />1，使用ANT生成客户端，ANT脚本如下：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">&lt;?</span><span style="COLOR: #000000">xml version</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">?&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">project name</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">wsgen</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">default</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">wsgen</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> basedir</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">path id</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">classpathId</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">fileset dir</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">./WebRoot/WEB-INF/lib</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">include name</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">*.jar</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">fileset</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">path</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">taskdef classpathref</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">classpathId</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> name</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">wsgen</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> classname</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">org.codehaus.xfire.gen.WsGenTask</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">taskdef</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">target name</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">wsgen</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> description</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">generate client</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">wsgen outputDirectory</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">./src/</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> wsdl</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">abc.wsdl</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> binding</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">xmlbeans</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"com.abc.p</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> overwrite</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">true</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">target</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">project</span><span style="COLOR: #000000">&gt;</span></div>请注意，脚本中有一个参数binding，可以指定如下两种不同的方式：<br />(1)jaxb(Java Architecture for XML Binding，<a href="https://jaxb.dev.java.net/">https://jaxb.dev.java.net/</a>)：使用此种方式时，会自动生成更多的Request和Resopnse类。<br />(2)xmlbeans<br />调用方式如下：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">AbcServiceClient client </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> AbcServiceClient();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />String url </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">http://localhost:8080/xfireTest/services/TestService</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />String result </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> client.getAbcPort(url).sayHello(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Robin</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);</span></div><br />2，使用命令生成客户端的命令如下：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">gpath</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">xfire</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">all</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1.2</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">SNAPSHOT.jar:ant</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1.6</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">.jar:jaxb</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">api</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">.0EA3.jar:stax</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">api</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">.jar:jdom</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">.jar:jaxb</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">impl</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">.0EA3.jar\<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />:jaxb</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">xjc</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">2.0</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">ea3.jar:wstx</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">asl</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">2.9</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">.jar:commons</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">logging</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">.jar:activation</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1.1</span><span style="COLOR: #000000">.jar:wsdl4j</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1.5</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">.jar:XmlSchema</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">.jar:xfire</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">jsr181</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">api</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">M1.jar;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />java </span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">cp $gpath org.codehaus.xfire.gen.WsGen </span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">wsdl http:</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">localhost:8080/xfire/services/Bookservice?wsdl -o . -p pl.tomeks.client -overwrite true</span></div><p>其结果与ANT生成的一样。<br /><br /><br />四，参考资源：<br />1，XFire 1.2.6手册(<a href="http://xfire.codehaus.org/User%27s+Guide">http://xfire.codehaus.org/User%27s+Guide</a>)<br />2，<a href="http://xfire.codehaus.org/Client+API">http://xfire.codehaus.org/Client+API</a><br />3，<a href="http://xfire.codehaus.org/Dynamic+Client">http://xfire.codehaus.org/Dynamic+Client</a><br /><br /></p><img src ="http://www.blogjava.net/fastzch/aggbug/225439.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fastzch/" target="_blank">Robin's Programming World</a> 2008-08-28 23:26 <a href="http://www.blogjava.net/fastzch/archive/2008/08/28/225439.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WebSphere Application Server 7.0 初体验</title><link>http://www.blogjava.net/fastzch/archive/2008/08/07/220553.html</link><dc:creator>Robin's Programming World</dc:creator><author>Robin's Programming World</author><pubDate>Wed, 06 Aug 2008 19:27:00 GMT</pubDate><guid>http://www.blogjava.net/fastzch/archive/2008/08/07/220553.html</guid><wfw:comment>http://www.blogjava.net/fastzch/comments/220553.html</wfw:comment><comments>http://www.blogjava.net/fastzch/archive/2008/08/07/220553.html#Feedback</comments><slash:comments>11</slash:comments><wfw:commentRss>http://www.blogjava.net/fastzch/comments/commentRss/220553.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fastzch/services/trackbacks/220553.html</trackback:ping><description><![CDATA[
		<font color="#ff0000">本Blog所有内容不得随意转载，版权属于作者所有。如需转载请与作者联系（</font>
		<a href="mailto:fastzch@163.com">
				<font style="BACKGROUND-COLOR: #ffffff" color="#ff0000">fastzch@163.com</font>
				<font color="#1a8bc8">
				</font>
		</a>
		<font style="BACKGROUND-COLOR: #ffffff" color="#ff0000">）。<br />未经许可的转载，本人保留一切法律权益。<br />一直以来，发现有某些人完全不尊重我的劳动成果，随意转载，提醒一下那些人小心哪天惹上官司。</font>
		<br />
		<br />WebSphere一直是我几年来最关注的中间件产品，我对其熟悉的程度超过现在的Oracle WebLogic，今天Oracle发布了WebLogic的10.3版，但WebSphere，仍然只是7.0的Open Beta版（其实也放出来一段时间了，具体日期不详）。尽管如此，我还是对其表示了极大的热情，决定来尝尝鲜！<br /><br />昨天晚上用那可怜的512K小猫Down了一晚上，终于将那821M的安装包Down下来了，IBM这次很大方，开放的Beta版是Network Deployment版的，记得以前想在网站Down 6.1的Network Deployment版找了好久也没有找到，后来只好直接用For AIX版的。<br />今天腾出笔记本上的1.5G空间来安装WAS7，先解压下载的ZIP包到另一个盘，天杀的，提示我有一个文件不能解压，出现错误，难道要我重新下载？不管了，继续安装...<br /><br /><font size="4"><strong>安装</strong></font><br />安装很简单，与前期版本没有什么区别。如果不会，可以参考Getting Start文档中的安装Flash演示（IBM第一次做了这样一件好事，估计以后的服务费收入又少了一笔）。具体目录位于：<br />......\WASv7_GettingStarted\viewlets\WASV7_Installation<br /><br /><strong><font size="4">新特性</font></strong><br />根据文档的说明，WAS 7.0最大的特性主要有：<br />1、支持JDK6<br />2、支持JavaEE5<br />3、增强了对SOA的支持<br /><br />迫不急待，进入Administration Console逛逛，登录画面更漂亮了点，界面还是熟悉的界面，熟悉的风格，这对于一个产品也是需要的，就像一个人穿了不同的衣服，气质还是那样。<br />下面来基于WAS6.1说说其内功的提升吧：<br />1，对JDK6可是真正的支持，有SystemOut.log为证：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">WebSphere Platform </span><span style="COLOR: #000000">7.0</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">0.0</span><span style="COLOR: #000000"> [ND </span><span style="COLOR: #000000">7.0</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">0.0</span><span style="COLOR: #000000"> h0823.</span><span style="COLOR: #000000">03</span><span style="COLOR: #000000">] running with process name starNode01Cell\starNode01\server1 and process id </span><span style="COLOR: #000000">3388</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />Detailed IFix information: No Interim Fixes applied to </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000"> build<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />Host Operating System is Windows XP, version </span><span style="COLOR: #000000">5.1</span><span style="COLOR: #000000"> build </span><span style="COLOR: #000000">2600</span><span style="COLOR: #000000"> Service Pack </span><span style="COLOR: #000000">2</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><font style="BACKGROUND-COLOR: #7fffd4" color="#0000ff">Java version </font></span><font color="#0000ff"><font style="BACKGROUND-COLOR: #7fffd4"><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">1.6</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, Java Compiler </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> j9jit24, Java VM name </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> IBM J9 VM</span></font></font></div><br />2，支持JavaEE5，对SOA的支持也增强了，再用Log为证（虽不能全面证明，但可见冰山一角）：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">[</span><span style="COLOR: #000000">08</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">8</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">7</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">:</span><span style="COLOR: #000000">06</span><span style="COLOR: #000000">:</span><span style="COLOR: #000000">15</span><span style="COLOR: #000000">:</span><span style="COLOR: #000000">569</span><span style="COLOR: #000000"> CST] </span><span style="COLOR: #000000">00000000</span><span style="COLOR: #000000"> WASAxis2Compo I   WSWS7001I: <font style="BACKGROUND-COLOR: #7fffd4" color="#0000ff">已启动 Axis2 服务。</font><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />[</span><span style="COLOR: #000000">08</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">8</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">7</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">:</span><span style="COLOR: #000000">06</span><span style="COLOR: #000000">:</span><span style="COLOR: #000000">15</span><span style="COLOR: #000000">:</span><span style="COLOR: #000000">969</span><span style="COLOR: #000000"> CST] </span><span style="COLOR: #000000">00000000</span><span style="COLOR: #000000"> SchedulerServ I   SCHD0031I: Scheduler 服务正在启动。<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />[</span><span style="COLOR: #000000">08</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">8</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">7</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">:</span><span style="COLOR: #000000">06</span><span style="COLOR: #000000">:</span><span style="COLOR: #000000">15</span><span style="COLOR: #000000">:</span><span style="COLOR: #000000">979</span><span style="COLOR: #000000"> CST] </span><span style="COLOR: #000000">00000000</span><span style="COLOR: #000000"> SchedulerServ I   SCHD0001I: Scheduler 服务已启动。<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />[</span><span style="COLOR: #000000">08</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">8</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">7</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">:</span><span style="COLOR: #000000">06</span><span style="COLOR: #000000">:</span><span style="COLOR: #000000">15</span><span style="COLOR: #000000">:</span><span style="COLOR: #000000">979</span><span style="COLOR: #000000"> CST] </span><span style="COLOR: #000000">00000000</span><span style="COLOR: #000000"> JPAComponentI I   CWWJP0028I: Java 持久性 API（JPA）组件正在启动。<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />[</span><span style="COLOR: #000000">08</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">8</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">7</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">:</span><span style="COLOR: #000000">06</span><span style="COLOR: #000000">:</span><span style="COLOR: #000000">15</span><span style="COLOR: #000000">:</span><span style="COLOR: #000000">989</span><span style="COLOR: #000000"> CST] </span><span style="COLOR: #000000">00000000</span><span style="COLOR: #000000"> JPAComponentI I   CWWJP0017I: <font style="BACKGROUND-COLOR: #7fffd4" color="#0000ff">已启动 Java 持久性 API（JPA）组件。</font></span></div><br />3，Administration Console的功能菜单：<br />A，服务器加了一级子菜单，但本质未发生变化。<br />B，就用程序有分类了，特别是突显了“资产”，这与SOA的理念是有直接关系的。<br />C，服务模块进一步加强，特别是策略集。<br />D，资源依旧是那些资源，但似乎突显了“Scheduler”。<br />E，服务集成增加了对“WS-Notification”的支持<br />（以上描述可能不够准确，没有仔细比对WAS6.1，说了是初体验）<br /><br /><font size="4"><strong>IBM J9 JVM 1.6.0尝鲜</strong></font><br />从上面的LOG中发现，默认是开启JIT编译的，从下面的配置中（<font color="#ff0000">disableJIT</font><span style="COLOR: #0000ff">="false"</span>）也可以看出。<br /><br />来看看GC有没有什么变化？在Java虚拟机的通用JVM参数中加入以下参数：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">-</span><span style="COLOR: #000000">verbose:gc </span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">XX:</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">PrintGCDetails </span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">Xverbosegclog:gc.log</span></div>请注意，此处SUN的HotSpot的参数不同。我一开始直接用SUN的参数，然后重启，结果导致启动失败，只好找到server的配置文件，然后手动修改其server.xml配置文件，其位置如下（假设你的WAS也安装在C:\IBM\WebSphere\AppServer目录中）：<br />C:\IBM\WebSphere\AppServer\profiles\AppSrv01\config\cells\starNode01Cell\nodes\starNode01\servers\server1<br />修改如下部分：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">jvmEntries </span><span style="COLOR: #ff0000">xmi:id</span><span style="COLOR: #0000ff">="JavaVirtualMachine_1183122130078"</span><span style="COLOR: #ff0000"> verboseModeClass</span><span style="COLOR: #0000ff">="false"</span><span style="COLOR: #ff0000"> verboseModeGarbageCollection</span><span style="COLOR: #0000ff">="false"</span><span style="COLOR: #ff0000"> verboseModeJNI</span><span style="COLOR: #0000ff">="false"</span><span style="COLOR: #ff0000"> runHProf</span><span style="COLOR: #0000ff">="false"</span><span style="COLOR: #ff0000"> debugMode</span><span style="COLOR: #0000ff">="false"</span><span style="COLOR: #ff0000"> debugArgs</span><span style="COLOR: #0000ff">="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=7777"</span><span style="COLOR: #ff0000"> genericJvmArguments</span><span style="COLOR: #0000ff">="-verbose:gc -XX:+PrintGCDetails -Xverbosegclog:gc.log"</span><span style="COLOR: #ff0000"> disableJIT</span><span style="COLOR: #0000ff">="false"</span><span style="COLOR: #0000ff">&gt;</span></div>看清楚地方了没？不用再指地方了吧。<br />然后重启，OK，又启起来了。<br /><br />再来看看GC的结果，gc.log文件位于如下位置（同样假设你的WAS也安装在C:\IBM\WebSphere\AppServer目录中）：<br />C:\IBM\WebSphere\AppServer\profiles\AppSrv01\<br />我机器上产生的样例片断如下：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id="Code_Closed_Image_031641" onclick="this.style.display='none'; Code_Closed_Text_031641.style.display='none'; Code_Open_Image_031641.style.display='inline'; Code_Open_Text_031641.style.display='inline';" height="16" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" width="11" align="top" /><img id="Code_Open_Image_031641" style="DISPLAY: none" onclick="this.style.display='none'; Code_Open_Text_031641.style.display='none'; Code_Closed_Image_031641.style.display='inline'; Code_Closed_Text_031641.style.display='inline';" height="16" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top" /><span id="Code_Closed_Text_031641" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span id="Code_Open_Text_031641" style="DISPLAY: none"><br /><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">&lt;?</span><span style="COLOR: #ff00ff">xml version="1.0" </span><span style="COLOR: #0000ff">?&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">verbosegc </span><span style="COLOR: #ff0000">version</span><span style="COLOR: #0000ff">="20080521_AC"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">af </span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="tenured"</span><span style="COLOR: #ff0000"> id</span><span style="COLOR: #0000ff">="1"</span><span style="COLOR: #ff0000"> timestamp</span><span style="COLOR: #0000ff">="Aug 07 02:15:56 2008"</span><span style="COLOR: #ff0000"> intervalms</span><span style="COLOR: #0000ff">="0.000"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">minimum </span><span style="COLOR: #ff0000">requested_bytes</span><span style="COLOR: #0000ff">="25536"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">time </span><span style="COLOR: #ff0000">exclusiveaccessms</span><span style="COLOR: #0000ff">="0.016"</span><span style="COLOR: #ff0000"> meanexclusiveaccessms</span><span style="COLOR: #0000ff">="0.016"</span><span style="COLOR: #ff0000"> threads</span><span style="COLOR: #0000ff">="0"</span><span style="COLOR: #ff0000"> lastthreadtid</span><span style="COLOR: #0000ff">="0x10F05100"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">refs </span><span style="COLOR: #ff0000">soft</span><span style="COLOR: #0000ff">="40"</span><span style="COLOR: #ff0000"> weak</span><span style="COLOR: #0000ff">="10082"</span><span style="COLOR: #ff0000"> phantom</span><span style="COLOR: #0000ff">="0"</span><span style="COLOR: #ff0000"> dynamicSoftReferenceThreshold</span><span style="COLOR: #0000ff">="32"</span><span style="COLOR: #ff0000"> maxSoftReferenceThreshold</span><span style="COLOR: #0000ff">="32"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">tenured </span><span style="COLOR: #ff0000">freebytes</span><span style="COLOR: #0000ff">="2621440"</span><span style="COLOR: #ff0000"> totalbytes</span><span style="COLOR: #0000ff">="52428800"</span><span style="COLOR: #ff0000"> percent</span><span style="COLOR: #0000ff">="5"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">soa </span><span style="COLOR: #ff0000">freebytes</span><span style="COLOR: #0000ff">="0"</span><span style="COLOR: #ff0000"> totalbytes</span><span style="COLOR: #0000ff">="49807360"</span><span style="COLOR: #ff0000"> percent</span><span style="COLOR: #0000ff">="0"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">loa </span><span style="COLOR: #ff0000">freebytes</span><span style="COLOR: #0000ff">="2621440"</span><span style="COLOR: #ff0000"> totalbytes</span><span style="COLOR: #0000ff">="2621440"</span><span style="COLOR: #ff0000"> percent</span><span style="COLOR: #0000ff">="100"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">tenured</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">gc </span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="global"</span><span style="COLOR: #ff0000"> id</span><span style="COLOR: #0000ff">="1"</span><span style="COLOR: #ff0000"> totalid</span><span style="COLOR: #0000ff">="1"</span><span style="COLOR: #ff0000"> intervalms</span><span style="COLOR: #0000ff">="0.000"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">classunloading </span><span style="COLOR: #ff0000">classloaders</span><span style="COLOR: #0000ff">="0"</span><span style="COLOR: #ff0000"> classes</span><span style="COLOR: #0000ff">="0"</span><span style="COLOR: #ff0000"> timevmquiescems</span><span style="COLOR: #0000ff">="0.000"</span><span style="COLOR: #ff0000"> timetakenms</span><span style="COLOR: #0000ff">="0.372"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">finalization </span><span style="COLOR: #ff0000">objectsqueued</span><span style="COLOR: #0000ff">="91"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">timesms </span><span style="COLOR: #ff0000">mark</span><span style="COLOR: #0000ff">="26.564"</span><span style="COLOR: #ff0000"> sweep</span><span style="COLOR: #0000ff">="2.019"</span><span style="COLOR: #ff0000"> compact</span><span style="COLOR: #0000ff">="0.000"</span><span style="COLOR: #ff0000"> total</span><span style="COLOR: #0000ff">="29.123"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">tenured </span><span style="COLOR: #ff0000">freebytes</span><span style="COLOR: #0000ff">="44916712"</span><span style="COLOR: #ff0000"> totalbytes</span><span style="COLOR: #0000ff">="52428800"</span><span style="COLOR: #ff0000"> percent</span><span style="COLOR: #0000ff">="85"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">soa </span><span style="COLOR: #ff0000">freebytes</span><span style="COLOR: #0000ff">="42295272"</span><span style="COLOR: #ff0000"> totalbytes</span><span style="COLOR: #0000ff">="49807360"</span><span style="COLOR: #ff0000"> percent</span><span style="COLOR: #0000ff">="84"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">loa </span><span style="COLOR: #ff0000">freebytes</span><span style="COLOR: #0000ff">="2621440"</span><span style="COLOR: #ff0000"> totalbytes</span><span style="COLOR: #0000ff">="2621440"</span><span style="COLOR: #ff0000"> percent</span><span style="COLOR: #0000ff">="100"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">tenured</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">gc</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">tenured </span><span style="COLOR: #ff0000">freebytes</span><span style="COLOR: #0000ff">="44891176"</span><span style="COLOR: #ff0000"> totalbytes</span><span style="COLOR: #0000ff">="52428800"</span><span style="COLOR: #ff0000"> percent</span><span style="COLOR: #0000ff">="85"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">soa </span><span style="COLOR: #ff0000">freebytes</span><span style="COLOR: #0000ff">="42269736"</span><span style="COLOR: #ff0000"> totalbytes</span><span style="COLOR: #0000ff">="49807360"</span><span style="COLOR: #ff0000"> percent</span><span style="COLOR: #0000ff">="84"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">loa </span><span style="COLOR: #ff0000">freebytes</span><span style="COLOR: #0000ff">="2621440"</span><span style="COLOR: #ff0000"> totalbytes</span><span style="COLOR: #0000ff">="2621440"</span><span style="COLOR: #ff0000"> percent</span><span style="COLOR: #0000ff">="100"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">tenured</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">refs </span><span style="COLOR: #ff0000">soft</span><span style="COLOR: #0000ff">="38"</span><span style="COLOR: #ff0000"> weak</span><span style="COLOR: #0000ff">="10062"</span><span style="COLOR: #ff0000"> phantom</span><span style="COLOR: #0000ff">="0"</span><span style="COLOR: #ff0000"> dynamicSoftReferenceThreshold</span><span style="COLOR: #0000ff">="27"</span><span style="COLOR: #ff0000"> maxSoftReferenceThreshold</span><span style="COLOR: #0000ff">="32"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">time </span><span style="COLOR: #ff0000">totalms</span><span style="COLOR: #0000ff">="29.367"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">af</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">af </span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="tenured"</span><span style="COLOR: #ff0000"> id</span><span style="COLOR: #0000ff">="2"</span><span style="COLOR: #ff0000"> timestamp</span><span style="COLOR: #0000ff">="Aug 07 02:15:56 2008"</span><span style="COLOR: #ff0000"> intervalms</span><span style="COLOR: #0000ff">="365.335"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">minimum </span><span style="COLOR: #ff0000">requested_bytes</span><span style="COLOR: #0000ff">="40"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">time </span><span style="COLOR: #ff0000">exclusiveaccessms</span><span style="COLOR: #0000ff">="0.011"</span><span style="COLOR: #ff0000"> meanexclusiveaccessms</span><span style="COLOR: #0000ff">="0.011"</span><span style="COLOR: #ff0000"> threads</span><span style="COLOR: #0000ff">="0"</span><span style="COLOR: #ff0000"> lastthreadtid</span><span style="COLOR: #0000ff">="0x10F05100"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">refs </span><span style="COLOR: #ff0000">soft</span><span style="COLOR: #0000ff">="39"</span><span style="COLOR: #ff0000"> weak</span><span style="COLOR: #0000ff">="10062"</span><span style="COLOR: #ff0000"> phantom</span><span style="COLOR: #0000ff">="0"</span><span style="COLOR: #ff0000"> dynamicSoftReferenceThreshold</span><span style="COLOR: #0000ff">="27"</span><span style="COLOR: #ff0000"> maxSoftReferenceThreshold</span><span style="COLOR: #0000ff">="32"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">tenured </span><span style="COLOR: #ff0000">freebytes</span><span style="COLOR: #0000ff">="2621440"</span><span style="COLOR: #ff0000"> totalbytes</span><span style="COLOR: #0000ff">="52428800"</span><span style="COLOR: #ff0000"> percent</span><span style="COLOR: #0000ff">="5"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">soa </span><span style="COLOR: #ff0000">freebytes</span><span style="COLOR: #0000ff">="0"</span><span style="COLOR: #ff0000"> totalbytes</span><span style="COLOR: #0000ff">="49807360"</span><span style="COLOR: #ff0000"> percent</span><span style="COLOR: #0000ff">="0"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">loa </span><span style="COLOR: #ff0000">freebytes</span><span style="COLOR: #0000ff">="2621440"</span><span style="COLOR: #ff0000"> totalbytes</span><span style="COLOR: #0000ff">="2621440"</span><span style="COLOR: #ff0000"> percent</span><span style="COLOR: #0000ff">="100"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">tenured</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">gc </span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="global"</span><span style="COLOR: #ff0000"> id</span><span style="COLOR: #0000ff">="2"</span><span style="COLOR: #ff0000"> totalid</span><span style="COLOR: #0000ff">="2"</span><span style="COLOR: #ff0000"> intervalms</span><span style="COLOR: #0000ff">="365.529"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">finalization </span><span style="COLOR: #ff0000">objectsqueued</span><span style="COLOR: #0000ff">="206"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">timesms </span><span style="COLOR: #ff0000">mark</span><span style="COLOR: #0000ff">="28.471"</span><span style="COLOR: #ff0000"> sweep</span><span style="COLOR: #0000ff">="2.609"</span><span style="COLOR: #ff0000"> compact</span><span style="COLOR: #0000ff">="0.000"</span><span style="COLOR: #ff0000"> total</span><span style="COLOR: #0000ff">="31.220"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">tenured </span><span style="COLOR: #ff0000">freebytes</span><span style="COLOR: #0000ff">="44063464"</span><span style="COLOR: #ff0000"> totalbytes</span><span style="COLOR: #0000ff">="52428800"</span><span style="COLOR: #ff0000"> percent</span><span style="COLOR: #0000ff">="84"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">soa </span><span style="COLOR: #ff0000">freebytes</span><span style="COLOR: #0000ff">="41442024"</span><span style="COLOR: #ff0000"> totalbytes</span><span style="COLOR: #0000ff">="49807360"</span><span style="COLOR: #ff0000"> percent</span><span style="COLOR: #0000ff">="83"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">loa </span><span style="COLOR: #ff0000">freebytes</span><span style="COLOR: #0000ff">="2621440"</span><span style="COLOR: #ff0000"> totalbytes</span><span style="COLOR: #0000ff">="2621440"</span><span style="COLOR: #ff0000"> percent</span><span style="COLOR: #0000ff">="100"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">tenured</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">gc</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">tenured </span><span style="COLOR: #ff0000">freebytes</span><span style="COLOR: #0000ff">="44062496"</span><span style="COLOR: #ff0000"> totalbytes</span><span style="COLOR: #0000ff">="52428800"</span><span style="COLOR: #ff0000"> percent</span><span style="COLOR: #0000ff">="84"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">soa </span><span style="COLOR: #ff0000">freebytes</span><span style="COLOR: #0000ff">="41441056"</span><span style="COLOR: #ff0000"> totalbytes</span><span style="COLOR: #0000ff">="49807360"</span><span style="COLOR: #ff0000"> percent</span><span style="COLOR: #0000ff">="83"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">loa </span><span style="COLOR: #ff0000">freebytes</span><span style="COLOR: #0000ff">="2621440"</span><span style="COLOR: #ff0000"> totalbytes</span><span style="COLOR: #0000ff">="2621440"</span><span style="COLOR: #ff0000"> percent</span><span style="COLOR: #0000ff">="100"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">tenured</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">refs </span><span style="COLOR: #ff0000">soft</span><span style="COLOR: #0000ff">="39"</span><span style="COLOR: #ff0000"> weak</span><span style="COLOR: #0000ff">="10062"</span><span style="COLOR: #ff0000"> phantom</span><span style="COLOR: #0000ff">="0"</span><span style="COLOR: #ff0000"> dynamicSoftReferenceThreshold</span><span style="COLOR: #0000ff">="26"</span><span style="COLOR: #ff0000"> maxSoftReferenceThreshold</span><span style="COLOR: #0000ff">="32"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">time </span><span style="COLOR: #ff0000">totalms</span><span style="COLOR: #0000ff">="31.292"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">af</span><span style="COLOR: #0000ff">&gt;</span></span></div>试试用我喜爱的GCViewer（关于GCViewer的相关内容，可以参考我的另一篇文章：《<a class="postTitle2" id="viewpost1_TitleUrl" href="/fastzch/archive/2008/07/20/216240.html"><font color="#1a8bc8">JVM分析的两个工具(MAT&amp;GCViewer)试用</font></a> 》）打开来看看，如果你也这样干，你会跟我一样失望，从数据面板中看给你的结果是一些莫名其妙的值，很显然，目前GCViewer的1.28版似乎还不支持此JVM产生的GC日志。有兴趣的朋友可以写篇文章来分析或解读一下此日志。<br /><br /><font size="4"><strong>相关资源：<br /></strong></font>WAS 7.0主页如下：<br /><a href="https://www14.software.ibm.com/iwm/web/cc/earlyprograms/websphere/wasndv7/">https://www14.software.ibm.com/iwm/web/cc/earlyprograms/websphere/wasndv7/</a><br />IBM还专门为介绍这个版本的新特性和亮点做了一个很不错的Flash的Demo，其观看地址为：<br /><a href="https://www14.software.ibm.com/iwm/web/cc/earlyprograms/websphere/wasndv7/player.html" target="_blank">https://www14.software.ibm.com/iwm/web/cc/earlyprograms/websphere/wasndv7/player.html</a><br />WebSphere Application Server Network Deployment的下载地址：<br /><a href="https://www14.software.ibm.com/webapp/iwm/web/preLogin.do?source=swerpws-wasndv7-3&amp;S_PKG=code">https://www14.software.ibm.com/webapp/iwm/web/preLogin.do?source=swerpws-wasndv7-3&amp;S_PKG=code</a><br />同时还提供了全套文档的下载地址（目前好像仅提供英文文档）：<br /><a href="https://www14.software.ibm.com/webapp/iwm/web/preLogin.do?source=swerpws-wasndv7-3&amp;S_PKG=library">https://www14.software.ibm.com/webapp/iwm/web/preLogin.do?source=swerpws-wasndv7-3&amp;S_PKG=library</a><br /><br />同时还升级了RAD（Rational® Application Developer）到7.5来支持最新的WAS版本（也是Beta版，比WAS7的Beta版出得早），其网址如下：<br /><a href="https://www14.software.ibm.com/iwm/web/cc/earlyprograms/rational/RAD75OpenBeta/">https://www14.software.ibm.com/iwm/web/cc/earlyprograms/rational/RAD75OpenBeta/</a><br /><br /><br />今天就先写到这里，太晚了，该睡下了。<img src ="http://www.blogjava.net/fastzch/aggbug/220553.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fastzch/" target="_blank">Robin's Programming World</a> 2008-08-07 03:27 <a href="http://www.blogjava.net/fastzch/archive/2008/08/07/220553.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JVM分析的两个工具(MAT&amp;GCViewer)试用</title><link>http://www.blogjava.net/fastzch/archive/2008/07/20/216240.html</link><dc:creator>Robin's Programming World</dc:creator><author>Robin's Programming World</author><pubDate>Sun, 20 Jul 2008 13:38:00 GMT</pubDate><guid>http://www.blogjava.net/fastzch/archive/2008/07/20/216240.html</guid><wfw:comment>http://www.blogjava.net/fastzch/comments/216240.html</wfw:comment><comments>http://www.blogjava.net/fastzch/archive/2008/07/20/216240.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.blogjava.net/fastzch/comments/commentRss/216240.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fastzch/services/trackbacks/216240.html</trackback:ping><description><![CDATA[
		<p>
				<font color="#ff0000">本Blog所有内容不得随意转载，版权属于作者所有。如需转载请与作者联系（</font>
				<a href="mailto:fastzch@163.com">
						<font style="BACKGROUND-COLOR: #ffffff" color="#ff0000">fastzch@163.com</font>
						<font color="#1a8bc8">
						</font>
				</a>
				<font style="BACKGROUND-COLOR: #ffffff" color="#ff0000">）。<br />未经许可的转载，本人保留一切法律权益。<br />一直以来，发现有某些人完全不尊重我的劳动成果，随意转载，提醒一下那些人小心哪天惹上官司。</font>
				<br />
				<br />昨天在Javaeye.com上看到一篇《十个最好的Java性能故障排除工具》(<a href="http://www.javaeye.com/news/2943">http://www.javaeye.com/news/2943</a>)的文章，随即对其中两个(MAT和GCViewer)进行了试用,下面简单的谈谈感受：<br /><br />GCViewer的使用很简单，首先配置JDK的参数为：<br /> -verbose:gc -Xloggc:gc.log<br />这样，GC的相关Log就会被写入到gc.log文件中，如果你使用Tomcat，那么此文件会写到%TOMCAT_HOME%/bin/目录下。<br />然后，你就可以用GCViewer打开这个文件了，画面如下：<br /><img height="449" alt="r_gcv001.gif" src="http://www.blogjava.net/images/blogjava_net/fastzch/7477/r_gcv001.gif" width="640" border="0" /><br />上图中黑色部分为OOM时的图形表现，出现了这样的情况后，后边对于Heap的Summary的一些信息再也不能正确的显示了，看看Freed Memory,有1829.298M，而上图是我为了同时试用MAT对JVM作了一些特殊设计后产生的结果，完整的设置如下：<br />-Xms16m -Xmx20m -verbose:gc -Xloggc:gc.log -XX:+HeapDumpOnOutOfMemoryError<br /><br />大家可以看到，我将最大堆设为20M，所以上图才会出现OOM这种状况，当然如果你的程序设计有问题的话，即使你设堆设为最大1024M，也会出现OOM。<br />正是由于上面有设置-XX:+HeapDumpOnOutOfMemoryError这个参数，所以当出现OOM状况时，在TOMCAT_HOME%/bin/目录下才会出现java_pid3164.hprof这样的文件，文件名中的数字会根据当前JVM所占用的PID不同而不同。<br /><br />那么我们可以在MAT同打开这个文件，如下图所示：<br /><img height="492" alt="mat001.gif" src="http://www.blogjava.net/images/blogjava_net/fastzch/7477/mat001.gif" width="749" border="0" /><br />在工具栏中，我们可以先把各种各样的统计结果和详细结果。<br /><br />更多的信息，可参考各自己的官方网站：<br />1，MAT：<a href="http://www.eclipse.org/mat/">http://www.eclipse.org/mat/</a><br />2，GCViewer：<a href="http://www.tagtraum.com/gcviewer.html">http://www.tagtraum.com/gcviewer.html</a></p>
<img src ="http://www.blogjava.net/fastzch/aggbug/216240.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fastzch/" target="_blank">Robin's Programming World</a> 2008-07-20 21:38 <a href="http://www.blogjava.net/fastzch/archive/2008/07/20/216240.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>