﻿<?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-&lt;strong&gt;&lt;font style="font-size:25px;"&gt;vista&lt;/font&gt;&lt;/strong&gt;</title><link>http://www.blogjava.net/vista/</link><description>&lt;font style="font-size:18px;"&gt;回顾※展望&lt;font&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;潜心技术&amp;&amp;不再搁浅
&lt;a onClick="谢谢点击" href="http://blog.csdn.net/images/blog_csdn_net/Diego1983/hehe.jpg" target="_blank"&gt;&lt;img src="http://blog.csdn.net/images/blog_csdn_net/Diego1983/hehe.jpg"  height="40" border="0" /&gt;&lt;/a&gt;</description><language>zh-cn</language><lastBuildDate>Sun, 05 Apr 2026 20:42:32 GMT</lastBuildDate><pubDate>Sun, 05 Apr 2026 20:42:32 GMT</pubDate><ttl>60</ttl><item><title>华为面试归来</title><link>http://www.blogjava.net/vista/archive/2006/12/15/87835.html</link><dc:creator>Vista</dc:creator><author>Vista</author><pubDate>Thu, 14 Dec 2006 17:19:00 GMT</pubDate><guid>http://www.blogjava.net/vista/archive/2006/12/15/87835.html</guid><wfw:comment>http://www.blogjava.net/vista/comments/87835.html</wfw:comment><comments>http://www.blogjava.net/vista/archive/2006/12/15/87835.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/vista/comments/commentRss/87835.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/vista/services/trackbacks/87835.html</trackback:ping><description><![CDATA[
		<p>      前些天,也就是6号辞职了,这些天只在中博和网信联动面试了下,投了很多简历,而且简历也被阅览了很多次,但很少接到电话,呆在家里不上班的日子,真是特快,心里没什么底,有点后悔辞职的冲动,不会也没什么,机会还是有的,况且自己还是相信自己的实力,毕竟有一年的工作经验,不过这些天还是在努力地学习,把基础打牢再说.<br />      华为一般是周五面试,其实我几乎没去华为面试,有几次华为打电话过来,我恰好有其他的面试,所以去不了,这次反正闲着也是闲着,所以,在上午接到电话后,下午坐公车去了.<br />      我住的地方去华为基地比较远,坐公车都要5元RMB,下了车,打了电话,经过电话指点,终于找到了面试地点,外面好冷,进去就不怎么冷了,没说别的,拿起试卷就开始做题.<br />      题目的难度在我预料之中,依我的水平也就拿个70分左右的样子(一般的公司我可以拿80以上,^_^),<br />令我意外的是,笔试完后,面试技术的考官并没怎么看我的答案,而是直接和我聊起技术方面的东西,问的很详细,特别是问到具体做过的项目时,问的比较仔细,要不是我真的做过,非穿帮不可,呵呵,问了项目,就开始问技术,只要我简历上写的技术,他都会问的很仔细,有几个地方,我记得不是很清楚,也就打哈哈过去,他也没说什么,就这样问了大概一个多钟头,他才说,好了,你在这等下,就走了,我好不容易许了一口气,心里也没什么底,等了10分钟的样子,来了一个领导模样的人物,拿了本笔记本,就坐在我旁边,和我聊起了一些看似琐碎的东西,其实在暗里考察的问题,总体感觉还过的去,完了,他说,我考虑下,就走了,出去的时候我和面试我技术的考官一起出去,他问我感觉怎么样,我说还行,他说过几天会电话通知我,呵呵,当时应该问下他机会大不,可惜了,现在也只好在家等结果了,不过中博那边如果要我马上上班的话,我还真不好抉择,因为中博那边是做外包,而且要出差,虽然薪资有点诱人,但毕竟感觉没进华为好.<br />      失业的日子的确比较枯燥,闲着没事就随便写写 了,呵呵,很晚了,要睡了....<br /></p>
<img src ="http://www.blogjava.net/vista/aggbug/87835.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/vista/" target="_blank">Vista</a> 2006-12-15 01:19 <a href="http://www.blogjava.net/vista/archive/2006/12/15/87835.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转贴 -- 通过分析SQL语句的执行计划优化SQL(总结)</title><link>http://www.blogjava.net/vista/archive/2006/12/13/87567.html</link><dc:creator>Vista</dc:creator><author>Vista</author><pubDate>Wed, 13 Dec 2006 11:32:00 GMT</pubDate><guid>http://www.blogjava.net/vista/archive/2006/12/13/87567.html</guid><wfw:comment>http://www.blogjava.net/vista/comments/87567.html</wfw:comment><comments>http://www.blogjava.net/vista/archive/2006/12/13/87567.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/vista/comments/commentRss/87567.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/vista/services/trackbacks/87567.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 通过分析SQL语句的执行计划优化SQL(总结)						做DBA快7年了，中间感悟很多。在DBA的日常工作中，调整个别性能较差的SQL语句时一项富有挑战性的工作。其中的关键在于如何得到SQL语句的执行计划和如何从SQL语句的执行计划中发现问题。总是想将日常经验的点点滴滴总结一下，但是直到最近才下定决心，总共花了3个周末时间，才将其整理成册，便于自己日常工作。不好意思独享，所以将其贴出...&nbsp;&nbsp;<a href='http://www.blogjava.net/vista/archive/2006/12/13/87567.html'>阅读全文</a><img src ="http://www.blogjava.net/vista/aggbug/87567.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/vista/" target="_blank">Vista</a> 2006-12-13 19:32 <a href="http://www.blogjava.net/vista/archive/2006/12/13/87567.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>vista精神之---dom4j入门(转贴)</title><link>http://www.blogjava.net/vista/archive/2006/12/09/86602.html</link><dc:creator>Vista</dc:creator><author>Vista</author><pubDate>Sat, 09 Dec 2006 14:41:00 GMT</pubDate><guid>http://www.blogjava.net/vista/archive/2006/12/09/86602.html</guid><wfw:comment>http://www.blogjava.net/vista/comments/86602.html</wfw:comment><comments>http://www.blogjava.net/vista/archive/2006/12/09/86602.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/vista/comments/commentRss/86602.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/vista/services/trackbacks/86602.html</trackback:ping><description><![CDATA[
		<h3>dom4j（Version 1.6.1）快速入门</h3>
		<p>Parsing XML</p>
		<p>或许你想要做的第一件事情就是解析一个某种类型的XML文档，用dom4j很容易做到。请看下面的示范代码：</p>
		<p>import java.net.URL;</p>
		<p>import org.dom4j.Document;<br />import org.dom4j.DocumentException;<br />import org.dom4j.io.SAXReader;</p>
		<p>public class Foo {</p>
		<p>public Document parse(URL url) throws DocumentException {<br />SAXReader reader = new SAXReader();<br />Document document = reader.read(url);<br />return document;<br />}<br />}</p>
		<div id="a000315more">
				<div id="more">
						<p>使用迭代器（Iterators）</p>
						<p>我们可以通过多种方法来操作XML文档，这些方法返回java里标准的迭代器（Iterators）。例如：</p>
						<p>public void bar(Document document) throws DocumentException {<br />Element root = document.getRootElement();<br />//迭代根元素下面的所有子元素<br />for ( Iterator i = root.elementIterator(); i.hasNext(); ) {<br />Element element = (Element) i.next();<br />//处理代码<br />}</p>
						<p>//迭代根元素下面名称为"foo"的子元素<br />for ( Iterator i = root.elementIterator( "foo" ); i.hasNext(); ) {<br />Element foo = (Element) i.next();<br />//处理代码<br />}</p>
						<p>// 迭代根元素的属性attributes）元素<br />for ( Iterator i = root.attributeIterator(); i.hasNext(); ) {<br />Attribute attribute = (Attribute) i.next();<br />// do something<br />}<br />}</p>
						<p>强大的XPath导航</p>
						<p>在dom4j中XPath可以表示出在XML树状结构中的Document或者任意的节点（Node）（例如：Attribute，Element 或者 ProcessingInstruction等）。它可以使在文档中复杂的操作仅通过一行代码就可以完成。例如：</p>
						<p>public void bar(Document document) {<br />List list = document.selectNodes( "//foo/bar" );</p>
						<p>Node node = document.selectSingleNode( "//foo/bar/author" );</p>
						<p>String name = node.valueOf( "@name" );<br />}</p>
						<p>如果你想得到一个XHTML文档中的所有超文本链接（hypertext links）你可以使用下面的代码：</p>
						<p>public void findLinks(Document document) throws DocumentException {</p>
						<p>List list = document.selectNodes( "//a/@href" );</p>
						<p>for (Iterator iter = list.iterator(); iter.hasNext(); ) {<br />Attribute attribute = (Attribute) iter.next();<br />String url = attribute.getValue();<br />}<br />}</p>
						<p>如果你需要关于XPath语言的任何帮助，我们强烈推荐这个站点Zvon tutorial他会通过一个一个的例子引导你学习。</p>
						<p>快速遍历（Fast Looping）</p>
						<p>
								<br />如果你不得不遍历一个非常大的XML文档，然后才去执行，我们建议你使用快速遍历方法（fast looping method），它可以避免为每一个循环的节点创建一个迭代器对象,如下所示：</p>
						<p>public void treeWalk(Document document) {<br />treeWalk( document.getRootElement() );<br />}</p>
						<p>public void treeWalk(Element element) {<br />for ( int i = 0, size = element.nodeCount(); i &lt; size; i++ ) {<br />Node node = element.node(i);<br />if ( node instanceof Element ) {<br />treeWalk( (Element) node );<br />}<br />else {<br />// do something....<br />}<br />}<br />}</p>
						<p>生成一个新的XML文档对象</p>
						<p>在dom4j中你可能常常希望用程序生成一个XML文档对象，下面的程序为你进行了示范：</p>
						<p>import org.dom4j.Document;<br />import org.dom4j.DocumentHelper;<br />import org.dom4j.Element;</p>
						<p>public class Foo {</p>
						<p>public Document createDocument() {<br />Document document = DocumentHelper.createDocument();<br />Element root = document.addElement( "root" );</p>
						<p>Element author1 = root.addElement( "author" )<br />.addAttribute( "name", "James" )<br />.addAttribute( "location", "UK" )<br />.addText( "James Strachan" );<br /><br />Element author2 = root.addElement( "author" )<br />.addAttribute( "name", "Bob" )<br />.addAttribute( "location", "US" )<br />.addText( "Bob McWhirter" );</p>
						<p>return document;<br />}<br />}</p>
						<p>将一个文档对象写入文件中</p>
						<p>将一个文档对象写入Writer对象的一个简单快速的途径是通过write()方法。</p>
						<p>FileWriter out = new FileWriter( "foo.xml" );<br />document.write( out );</p>
						<p>如果你想改变输出文件的排版格式，比如你想要一个漂亮的格式或者是一个紧凑的格式，或者你想用Writer 对象或者OutputStream 对象来操作，那么你可以使用XMLWriter 类。</p>
						<p>import org.dom4j.Document;<br />import org.dom4j.io.OutputFormat;<br />import org.dom4j.io.XMLWriter;</p>
						<p>public class Foo {</p>
						<p>public void write(Document document) throws IOException {</p>
						<p>// 写入文件<br />XMLWriter writer = new XMLWriter(<br />new FileWriter( "output.xml" )<br />);<br />writer.write( document );<br />writer.close();</p>
						<p>
								<br />// 以一种优雅的格式写入System.out对象<br />OutputFormat format = OutputFormat.createPrettyPrint();<br />writer = new XMLWriter( System.out, format );<br />writer.write( document );</p>
						<p>// 以一种紧凑的格式写入System.out对象<br />format = OutputFormat.createCompactFormat();<br />writer = new XMLWriter( System.out, format );<br />writer.write( document );<br />}<br />}</p>
						<p>转化为字符串，或者从字符串转化</p>
						<p>如果你有一个文档（Document）对象或者任何一个节点（Node）对象的引用（reference），象属性（Attribute）或者元素（Element），你可以通过asXML()方法把它转化为一个默认的XML字符串：</p>
						<p>Document document = ...;<br />String text = document.asXML();</p>
						<p>如果你有一些XML内容的字符串表示，你可以通过DocumentHelper.parseText()方法将它重新转化为文档（Document）对象：</p>
						<p>String text = "<person><name>James</name></person>";<br />Document document = DocumentHelper.parseText(text);</p>
						<p>通过XSLT样式化文档（Document）</p>
						<p>
								<br />使用Sun公司提供的JAXP API将XSLT 应用到文档（Document）上是很简单的。它允许你使用任何的XSLT引擎（例如：Xalan或SAXON等）来开发。下面是一个使用JAXP创建一个转化器（transformer），然后将它应用到文档（Document）上的例子：</p>
						<p>import javax.xml.transform.Transformer;<br />import javax.xml.transform.TransformerFactory;</p>
						<p>import org.dom4j.Document;<br />import org.dom4j.io.DocumentResult;<br />import org.dom4j.io.DocumentSource;</p>
						<p>public class Foo {</p>
						<p>public Document styleDocument(<br />Document document, <br />String stylesheet<br />) throws Exception {</p>
						<p>// 使用 JAXP 加载转化器<br />TransformerFactory factory = TransformerFactory.newInstance();<br />Transformer transformer = factory.newTransformer( <br />new StreamSource( stylesheet ) <br />);</p>
						<p>// 现在来样式化一个文档（Document）<br />DocumentSource source = new DocumentSource( document );<br />DocumentResult result = new DocumentResult();<br />transformer.transform( source, result );</p>
						<p>// 返回经过样式化的文档（Document）<br />Document transformedDoc = result.getDocument();<br />return transformedDoc;<br />}<br />}</p>
						<p>
								<a href="http://dom4j.org/guide.html">原文地址</a>
								<br />
								<a href="http://prdownloads.sourceforge.net/dom4j/dom4j-1.6.1.zip?download">dom4j下载地址</a>
						</p>
				</div>
		</div>
<img src ="http://www.blogjava.net/vista/aggbug/86602.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/vista/" target="_blank">Vista</a> 2006-12-09 22:41 <a href="http://www.blogjava.net/vista/archive/2006/12/09/86602.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转贴---ORACLE 体系结构</title><link>http://www.blogjava.net/vista/archive/2006/12/06/85915.html</link><dc:creator>Vista</dc:creator><author>Vista</author><pubDate>Wed, 06 Dec 2006 11:10:00 GMT</pubDate><guid>http://www.blogjava.net/vista/archive/2006/12/06/85915.html</guid><wfw:comment>http://www.blogjava.net/vista/comments/85915.html</wfw:comment><comments>http://www.blogjava.net/vista/archive/2006/12/06/85915.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/vista/comments/commentRss/85915.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/vista/services/trackbacks/85915.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 主　　题：																																																																																																																								 																																														OR...&nbsp;&nbsp;<a href='http://www.blogjava.net/vista/archive/2006/12/06/85915.html'>阅读全文</a><img src ="http://www.blogjava.net/vista/aggbug/85915.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/vista/" target="_blank">Vista</a> 2006-12-06 19:10 <a href="http://www.blogjava.net/vista/archive/2006/12/06/85915.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转贴－－JBOSS集群</title><link>http://www.blogjava.net/vista/archive/2006/12/05/85483.html</link><dc:creator>Vista</dc:creator><author>Vista</author><pubDate>Tue, 05 Dec 2006 01:30:00 GMT</pubDate><guid>http://www.blogjava.net/vista/archive/2006/12/05/85483.html</guid><wfw:comment>http://www.blogjava.net/vista/comments/85483.html</wfw:comment><comments>http://www.blogjava.net/vista/archive/2006/12/05/85483.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/vista/comments/commentRss/85483.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/vista/services/trackbacks/85483.html</trackback:ping><description><![CDATA[
		<!--开始头部--> 
<table cellspacing="0" width="100%" border="0"><tbody><tr><td valign="top" align="left"><a href="http://www.huihoo.com/jboss/index.html"><img alt="Huihoo - Enterprise Open Source" src="http://www.huihoo.com/huihoo.org.jpg" align="left" border="0" /></a></td></tr></tbody></table><!--结束头部--><!--开始中部--><table cellspacing="0" cellpadding="3" width="100%" align="center" border="0"><tbody><tr width="100%"><td width="1%"></td><!--开始正文--><td width="98%"><hr width="98%" noshade="" size="1" />
 Last Modified: <font color="red">2006.02.23</font><br /><center><h4>JBoss 4.0.2集群指南</h4></center><br />(来源：http://www.javaresearch.org ) <br /><br /><br />bromon原创 请尊重版权<br /><br />    本文主要讲解JBoss cluster的基本知识以及简单的配置方法，其间涉及了一些jboss的补充知识。<br /><br />一、材料准备： <br /><br />1、    JBoss 4.0.2    <br /><br />JBoss各个版本之间差异比较大，即使同为jboss 4.x的版本，内部组件的版本也不一致，所以请尽量使用同一版本的server。目前已经证明可以配置cluster的版本多为jboss 3.2.6和jboss 4.0.2。<br /><br />2、    Apache 2.0.54<br /><br />3、    Apache mod_jk-1-2-13-apache-2-0-54<br /><br />二、安装：<br /><br />1、    jboss4.0.2与apache 2.0.54的安装请自行搞定。假设jboss的安装目录为%jboss%，apache安装目录为%apache%。<br /><br />2、    mod_jk的安装。<br /><br />从apache.org获得文件mod_jk-1-2-13-apache-2-0-54.so，将该文件拷贝到%apache%\ modules。<br /><br />三、jboss cluster入门<br /><br />    Jboss 支持如下类型的cluster：EJB、web、JNDI、JMS，我们主要了解web cluster。<br />Web cluster实际上可以划分为两个话题：负载均衡 (load balance) 和状态同步。它们是互相独立的，单独配置。<br /><br />负载均衡的概念比较简单，重要的是负载均衡的粒度。可以选择针对每个request的均衡，或者是针对每个用户的均衡。选择不同的粒度，需要不同的状态同步方式。<br /><br />1、基于request的负载均衡<br /><br />    该种方式下，负载均衡器 (load balancer)会根据各个node的状况，把每个http request进行分发。使用这样的均衡策略，就必须在多个node之间复制用户的session，实时保持整个cluster的用户状态同步，这种操作被称为session复制(session replication)。Jboss的实现原理是使用拦截器(interceptor)，根据用户的同步策略拦截request，做同步处理后再交给server产生响应。<br /><br />    该方法的优点是客户不会被绑定都具体的node，只要还有一个node存活，用户状态都不会丢失，cluster都能够继续工作。缺点是node之间通信频繁，响应速度有影响，多并发、高频操作的情况下性能下降比较厉害。<br /><br />2、    基于用户的负载均衡<br /><br />该种方式下，当用户发出第一个request后，负载均衡器动态的把该用户分配到某个节点，并记录该节点的jvm路由，以后该用户的所有request都会被绑定这个jvm路由，用户只会与该server发生交互，这种策略被称为粘性session(session sticky)。<br /><br />该方法的优点是响应速度快，多个节点之间无须通信。缺点也很明显，某个node死掉以后，它负责的所有用户都会丢失session。<br /><br />四、实战<br /><br />1、负载均衡<br /><br />    Jboss的负载均衡目前有两种方案，一是使用apache的mod_jk，二是使用jboss自带的负载均衡模块。下面分别讲解这两种配置。<br /><br />mod_jk的配置<br /><br />1、    请确认%apache%\modules下已经有mod_jk-1-2-13-apache-2-0-54.so文件。<br />2、    修改%apache%\conf\httpd.conf    在文件末尾添加:    Include conf/mod_jk2.conf<br />3、    在%apache%\conf下新建文件    mod_jk2.conf        文件内容如下：<br /><br /># Load mod_jk module. Specify the filename<br /># of the mod_jk lib you’ve downloaded and<br /># installed in the previous section<br />LoadModule jk_module modules/mod_jk-1-2-13-apache-2-0-54.so<br /># Where to find workers.properties<br />JkWorkersFile conf/workers2.properties<br /># Where to put jk logs<br />JkLogFile logs/mod_jk.log<br /># Set the jk log level [debug/error/info]<br />JkLogLevel info<br /># Select the log format<br />JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "<br /># JkOptions indicate to send SSL KEY SIZE,<br />JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories<br /># JkRequestLogFormat set the request format<br />JkRequestLogFormat "%w %V %T"<br />JkMount /* loadbalancer<br /><br />其中JkMount /* loadbalancer的意思是，把所有的请求都发给loadbalancer处理。可以通过修改url来控制发送某些request。<br />4、在%apache%\conf下新建文件    workers2.properties        其内容为：<br /><br />worker.list=loadbalancer,server1,server2<br /><br /># Define the first node...<br />worker.server1.port=8009<br />worker.server1.host=172.16.0.116<br />worker.server1.type=ajp13<br />worker.server1.lbfactor=1<br />worker.server1.local_worker=1<br />worker.server1.cachesize=10<br /><br /># Define the first node...<br />worker.server2.port=8009<br />worker.server2.host=172.16.32.88<br />worker.server2.type=ajp13<br />worker.server2.lbfactor=1<br />worker.server2.local_worker=1<br />worker.server2.cachesize=10<br /><br /># Now we define the load-balancing behaviour<br />worker.loadbalancer.type=lb<br />worker.loadbalancer.balanced_workers=server1,server2<br />worker.loadbalancer.sticky_session=1<br /><br />其中对于node的命名规则是worker.节点名.xxxx。所以上述文件定义了两个节点：server1和server2。8009端口是jboss默认的ajp端口，另外需要注意的是worker.server2.lbfactor参数，它是节点的负载加权，它的值越大，获得负载的机会就越大。可以根据node的硬件性能进行调整。worker.loadbalancer.sticky_session参数是指定是否使用粘性session。<br /><br />所有需要负载均衡的节点，都必须在worker.loadbalancer.balanced_workers参数中列举出来。<br /><br />请记住所有node的名称和它对应着哪台机器，后面的配置中会使用。<br /><br />尝试启动apache：%apache\bin\apache.exe，正常情况下没有任何提示。如果你使用的jk是2.0的，那么配置文件的写法完全不同，由于mod_jk2已经停止开发，所以apache并没有提供任何讲解，对于配置文件的编写也没有任何指导。<br /><br />Jboss自带均衡器的配置<br /><br />    将文件夹%jboss%\docs\examples\varia\loadbalancer\loadbalancer.sar拷贝到%jboss%\server\all\deploy下，并且修改loadbalancer.sar\loadbalancer.sar\META-INF\jboss-service.xml，在&lt;host&gt;标签中类出所有节点，在&lt;sticky-session&gt;标签中指定是否使用粘性session。配置完成。<br /><br />    该均衡器的缺点是负载能力相对不高，配置参数太少，比如无法指定不同节点的负载加权，所以后面都以mod_jk为例，不再讲解jboss自带的负载均衡器的内容。<br /> <br /><br />    负载均衡的配置基本完成，启动jboss，其中过程中会列出DefaultPatition中所有的节点：<br />run.bat -c all<br /><br /> <img src="http://www.huihoo.com/jboss/clustering/i/1_195.jpg" /><br /><br />任何节点的关闭与启动都会在cluster中广播，比如加如一个新节点后，其他节点会得到以下提示：<br /> <br /><img src="http://www.huihoo.com/jboss/clustering/i/2_149.jpg" /><br /><br />2、session sticky配置<br /><br />    apache应该会以粘性session的方式分发请求。部署一个应用测试一下，你会发现粘性session没有起作用。因为我们还没有给jboss配置jvm路由( jvmRoute)，apache就无法知道究竟哪些session是属于哪个节点的。我们继续往下：<br /><br />    修改server1机器上的jboss的配置文件：%jboss%\server\all\deploy\jbossweb-tomcat55.sar\ META-INF\ jboss-service.xml<br /><br />    在110行有：&lt;attribute name="UseJK"&gt;false&lt;/attribute&gt;，将它改为true。值得注意的是在这行标签上面有一段注释，要求你在server.xml中必须有：<br />Engine name="jboss.web" jmvRoute="Node1" defaultHost="localhost"<br /><br />    请注意这里有一个气死人不偿命的小bug，jboss的官方文档把 jvmRoute写成了jmvRoute，就是v和m两个字母的颠倒让我郁闷了三天，翻遍了jboss.com和theserverside.com。都是直接拷贝的错，吐血吐到脱水啊。<br /><br />    下面需要修改server1上的%jboss%\server\all\deploy\jbossweb-tomcat55.sar\ server.xml，在32行左右有：<br /><br />&lt;Engine name="jboss.web" defaultHost="localhost"&gt;<br /><br />给它增加一个jvmRoute属性：<br /><br />&lt;Engine jvmRoute="server1" name="jboss.web" defaultHost="localhost"&gt;<br /><br />请注意，jvmRoute的值必须和mod_jk中的节点名字正确对应，否则无法正确路由。Cluster中的所有节点都应该做相应的配置。<br /><br />Jboss的配置完成了，下面需要在你的web应用中修改配置文件，让它支持集群。<br /><br />在WEB-INF\web.xml中加入属性：    &lt;distributable/&gt;<br /><br />Ok，基于用户的cluster完成了，每个用户会绑定都某个节点上进行交互。这种绑定是如何完成的呢？原来apache把客户分发到节点后，该节点会在用户的session id后面加上此节点的路由名称，变成这个样子：<br /><br />Efdfxxd98daja87daj76da2dka**,server1<br /><br />    有了这个标志，就能分辨该session属于哪个节点。<br /><br />3、session replication配置<br /><br />    下面要做的是基于request的cluster，也就让各个节点之间互相复制session状态。有两种复制模式，同步与异步。使用同步的方式，jboss会把session复制的操作和对request的响应放到一个应用事务(application transaction)，session复制完成后才去处理request。异步复制则发送session复制的消息后马上处理request，session复制则会稍有延迟。但是在多框架的web页面中，这样的集群方式会有问题。由于frame在同一时间发出多个request，会造成一些混乱，这也是采用基于用户的集群方式的原因之一。<br /><br />    JBoss 4.0.2中采用了Jboss cache来实现session复制，实际上就是一个分布式缓存，由于session id中包含了jvm route，所以能够分辨session属于哪个节点。Session的更新类似于hibernate中的乐观锁，有了更新之后就让session的版本号增加，其他节点通过对比版本号来决定是否同步session状态。<br /><br />    配置session replication首先需要编辑<br />%jboss% server\all\deploy\jbossweb-tomcat55.sar\META-INF\ jboss-service.xml，88行左右有：<br />&lt;attribute name="SnapshotMode"&gt;instant&lt;/attribute&gt;<br />这就是刚才提到的复制模式，instant为立即复制，如果设为interval 那么系统会在延迟一段时间再进行复制，时间长度在&lt;attribute name="SnapshotInterval"&gt;2000&lt;/attribute&gt;中指定，单位是毫秒。<br /><br />单独配置这一个地方还不够，在%jboss% server\all\deploy\ tc5-cluster-service.xml中有：<br /><br />&lt;attribute name="CacheMode"&gt;REPL_ASYNC&lt;/attribute&gt;<br /><br />这里才真正决定复制是同步的还是异步的，可以指定为REPL_ASYNC(异步)或者REPL_SYNC(同步)。<br /><br />在这个文件下面一点，还有一个config标签，里面指定了各个节点在进行session复制的时候如何通信，有udp和tcp两种可选，如果使用udp方式，那么应该将udp的lookback属性指定为true，因为windows上有一个叫做media sense的东西会影响udp multicast。注意如果你不了解multi address的ip规则，请不要随便修改mcast_addr的值。如果采用tcp方式的话，应该指定bind_addr的值为本机ip，并且在TCPPING标签的initial_hosts属性中列出所有节点，格式是”机器名[端口号]”，比如在我们的例子中，就应该这样配置tcp(以其中一个节点为例)：<br /><br />&lt;config&gt;<br />&lt;TCP bind_addr="172.16.0.116" start_port="7810" loopback="true"/&gt;<br />&lt;TCPPING initial_hosts="172.16.0.116[7810],172.16.32.88[7810]" port_range="3" timeout="3500"<br />num_initial_members="3" up_thread="true" down_thread="true"/&gt;<br />&lt;MERGE2 min_interval="5000" max_interval="10000"/&gt;<br />&lt;FD shun="true" timeout="2500" max_tries="5" up_thread="true" down_thread="true" /&gt;<br />&lt;VERIFY_SUSPECT timeout="1500" down_thread="false" up_thread="false" /&gt;<br />    &lt;pbcast.NAKACK down_thread="true" up_thread="true" gc_lag="100"<br />         retransmit_timeout="3000"/&gt;<br />    &lt;pbcast.STABLE desired_avg_gossip="20000" down_thread="false" up_thread="false" /&gt;<br />    &lt;pbcast.GMS join_timeout="5000" join_retry_timeout="2000" shun="false"<br />print_local_addr="true" down_thread="true" up_thread="true"/&gt;<br />&lt;pbcast.STATE_TRANSFER up_thread="true" down_thread="true"/&gt;<br />&lt;/config&gt;<br /><br />    JBoss的clustering版主建议尽量使用udp。不过在Sobey内部，建议使用tcp方式，经测试可能有不明物体在影响udp通信，导致Timeout异常。<br /><br />    在%jboss%\ server\all\deploy\ cluster-service.xml中也有关于udp和tcp的配置信息，在4.0以前版本的jboss中，会以这个文件为主配置，4.0以后都以tc5-cluster-service.xml为主配置。<br /><br />    Jboss的配置完成了，最后需要在web应用中增加配置信息，控制session复制的粒度。在WEB-INF\    jboss-web.xml中增加以下内容：<br /><br />&lt;replication-config&gt;<br />    &lt;replication-trigger&gt;SET_AND_NON_PRIMITIVE_GET&lt;/replication-trigger&gt;<br />    &lt;replication-granularity&gt;SESSION&lt;/replication-granularity&gt;<br />  &lt;/replication-config&gt;<br /><br />其中replication-trigger是指定哪些操作引发session的版本更新，它的取值有：<br /><br />SET_AND_GET        <br />SET_AND_NON_PRIMITIVE_GET<br />SET<br /><br />replication-granularity是复制粒度，可以取session或attribute。如果取为attribute有可能导致复制失败，这是目前版本的jboss cache的一个bug，等待修正。<br /><br />部署项目，测试，如果配置没有问题，可以在%jboss%\0server\all\log\server.log中发现类似于这样的信息：<br /><br />DEBUG [org.jboss.web.tomcat.tc5.session.JBossCacheManager] check to see if needs to store and replicate session with id Im9-qpuaXppMS+xXwE3M+Q**.server1 <br /><br />DEBUG [org.jboss.web.tomcat.tc5.session.ClusteredSession] processSessionRepl(): session is dirty. Will increment version from: 20 and replicate.<br /><br />    Session replication配置的成功率比较低，情况也很复杂，请仔细操作。<br /><br />五、分布式热部署(distributable hot deploy)<br /><br />    在一个节点很多的cluster中，如果部署应用的时候必须把程序文件拷贝到每个机器上的话，那实在太愚蠢了，幸好通过all启动的jboss自动支持分布式热部署。把支持cluster的应用（通常需要打包成war文件），放到%jboss%\server\all\farm下，那么处于同一cluster中的其他节点会自动下载并且部署，jboss把这个称为Farm deploy。如下图：<br /><br /><img src="http://www.huihoo.com/jboss/clustering/i/farm.jpg" /><br /><br />End 2005-7-11 Released by bromon </td><!--结束正文--><td width="1%"></td></tr></tbody></table><!--结束中部--><hr width="98%" noshade="" size="1" /><!--开始底部--><script language="javascript" src="../../public/bottom.js"></script><table cellspacing="0" cellpadding="0" width="760" align="center" border="0"><tbody><tr><td align="middle"><font size="2">© 2006 Huihoo</font><br /></td></tr></tbody></table><!--结束底部--><img src ="http://www.blogjava.net/vista/aggbug/85483.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/vista/" target="_blank">Vista</a> 2006-12-05 09:30 <a href="http://www.blogjava.net/vista/archive/2006/12/05/85483.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转－JS正则表达式详解[来自javaeye]</title><link>http://www.blogjava.net/vista/archive/2006/11/10/80314.html</link><dc:creator>Vista</dc:creator><author>Vista</author><pubDate>Fri, 10 Nov 2006 01:58:00 GMT</pubDate><guid>http://www.blogjava.net/vista/archive/2006/11/10/80314.html</guid><wfw:comment>http://www.blogjava.net/vista/comments/80314.html</wfw:comment><comments>http://www.blogjava.net/vista/archive/2006/11/10/80314.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/vista/comments/commentRss/80314.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/vista/services/trackbacks/80314.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: JS正则表达式详解[收藏]																																																																																																																																																															...&nbsp;&nbsp;<a href='http://www.blogjava.net/vista/archive/2006/11/10/80314.html'>阅读全文</a><img src ="http://www.blogjava.net/vista/aggbug/80314.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/vista/" target="_blank">Vista</a> 2006-11-10 09:58 <a href="http://www.blogjava.net/vista/archive/2006/11/10/80314.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>vista精神之－－动态代理学习</title><link>http://www.blogjava.net/vista/archive/2006/11/07/79662.html</link><dc:creator>Vista</dc:creator><author>Vista</author><pubDate>Tue, 07 Nov 2006 10:14:00 GMT</pubDate><guid>http://www.blogjava.net/vista/archive/2006/11/07/79662.html</guid><wfw:comment>http://www.blogjava.net/vista/comments/79662.html</wfw:comment><comments>http://www.blogjava.net/vista/archive/2006/11/07/79662.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/vista/comments/commentRss/79662.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/vista/services/trackbacks/79662.html</trackback:ping><description><![CDATA[这个知识点不多，但属于java的高级技术，相信熟悉SPRING的朋友对它一定不会陌生，今天花了点时间对java的动态代理进行了学习，感觉还可以，因为是结合spring来看的，所以练习的是面向接口的代理模式，但应该也是最常用的动态代理..，废话不多说，看例子：<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"> org.diego;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_40_62_Open_Image" onclick="this.style.display='none'; Codehighlighter1_40_62_Open_Text.style.display='none'; Codehighlighter1_40_62_Closed_Image.style.display='inline'; Codehighlighter1_40_62_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_40_62_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_40_62_Closed_Text.style.display='none'; Codehighlighter1_40_62_Open_Image.style.display='inline'; Codehighlighter1_40_62_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">interface</span><span style="COLOR: #000000"> Ip </span><span id="Codehighlighter1_40_62_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_40_62_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">void</span><span style="COLOR: #000000"> say();<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 />实现类：<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"> org.diego;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_48_104_Open_Image" onclick="this.style.display='none'; Codehighlighter1_48_104_Open_Text.style.display='none'; Codehighlighter1_48_104_Closed_Image.style.display='inline'; Codehighlighter1_48_104_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_48_104_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_48_104_Closed_Text.style.display='none'; Codehighlighter1_48_104_Open_Image.style.display='inline'; Codehighlighter1_48_104_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"> P </span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000"> Ip</span><span id="Codehighlighter1_48_104_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_48_104_Open_Text"><span style="COLOR: #000000">{<br /><img id="Codehighlighter1_68_102_Open_Image" onclick="this.style.display='none'; Codehighlighter1_68_102_Open_Text.style.display='none'; Codehighlighter1_68_102_Closed_Image.style.display='inline'; Codehighlighter1_68_102_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_68_102_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_68_102_Closed_Text.style.display='none'; Codehighlighter1_68_102_Open_Image.style.display='inline'; Codehighlighter1_68_102_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> say()</span><span id="Codehighlighter1_68_102_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_68_102_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">hello</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div><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: #0000ff">package</span><span style="COLOR: #000000"> org.diego;<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.lang.reflect.InvocationHandler;<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.lang.reflect.Method;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_146_578_Open_Image" onclick="this.style.display='none'; Codehighlighter1_146_578_Open_Text.style.display='none'; Codehighlighter1_146_578_Closed_Image.style.display='inline'; Codehighlighter1_146_578_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_146_578_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_146_578_Closed_Text.style.display='none'; Codehighlighter1_146_578_Open_Image.style.display='inline'; Codehighlighter1_146_578_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> TraceHandler </span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000"> InvocationHandler </span><span id="Codehighlighter1_146_578_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_146_578_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> Object target;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_204_221_Open_Image" onclick="this.style.display='none'; Codehighlighter1_204_221_Open_Text.style.display='none'; Codehighlighter1_204_221_Closed_Image.style.display='inline'; Codehighlighter1_204_221_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_204_221_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_204_221_Closed_Text.style.display='none'; Codehighlighter1_204_221_Open_Image.style.display='inline'; Codehighlighter1_204_221_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> TraceHandler(Object t) </span><span id="Codehighlighter1_204_221_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_204_221_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        target </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> t;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_307_576_Open_Image" onclick="this.style.display='none'; Codehighlighter1_307_576_Open_Text.style.display='none'; Codehighlighter1_307_576_Closed_Image.style.display='inline'; Codehighlighter1_307_576_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_307_576_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_307_576_Closed_Text.style.display='none'; Codehighlighter1_307_576_Open_Image.style.display='inline'; Codehighlighter1_307_576_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> Object invoke(Object proxy, Method method, Object[] args) </span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> Throwable </span><span id="Codehighlighter1_307_576_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_307_576_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> TODO Auto-generated method stub</span><span style="COLOR: #008000"><br /><img id="Codehighlighter1_388_555_Open_Image" onclick="this.style.display='none'; Codehighlighter1_388_555_Open_Text.style.display='none'; Codehighlighter1_388_555_Closed_Image.style.display='inline'; Codehighlighter1_388_555_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_388_555_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_388_555_Closed_Text.style.display='none'; Codehighlighter1_388_555_Open_Image.style.display='inline'; Codehighlighter1_388_555_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span><span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (method.getName().startsWith(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">say</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)) </span><span id="Codehighlighter1_388_555_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_388_555_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">hello,before method<img src="http://www.blogjava.net/images/dot.gif" /></span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            Object result </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> method.invoke(target, args);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">World,after method<img src="http://www.blogjava.net/images/dot.gif" /></span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> result;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">null</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></div><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 id="Codehighlighter1_0_77_Open_Image" onclick="this.style.display='none'; Codehighlighter1_0_77_Open_Text.style.display='none'; Codehighlighter1_0_77_Closed_Image.style.display='inline'; Codehighlighter1_0_77_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_0_77_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_0_77_Closed_Text.style.display='none'; Codehighlighter1_0_77_Open_Image.style.display='inline'; Codehighlighter1_0_77_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span id="Codehighlighter1_0_77_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id="Codehighlighter1_0_77_Open_Text"><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * @author diego.liu<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * @contact vista.lbw@gmail.com<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * @date 2006-11-7<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /> </span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> org.diego;<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.lang.reflect.InvocationHandler;<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.lang.reflect.Proxy;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_199_459_Open_Image" onclick="this.style.display='none'; Codehighlighter1_199_459_Open_Text.style.display='none'; Codehighlighter1_199_459_Closed_Image.style.display='inline'; Codehighlighter1_199_459_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_199_459_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_199_459_Closed_Text.style.display='none'; Codehighlighter1_199_459_Open_Image.style.display='inline'; Codehighlighter1_199_459_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"> ProxyTest </span><span id="Codehighlighter1_199_459_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_199_459_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_242_456_Open_Image" onclick="this.style.display='none'; Codehighlighter1_242_456_Open_Text.style.display='none'; Codehighlighter1_242_456_Closed_Image.style.display='inline'; Codehighlighter1_242_456_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_242_456_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_242_456_Closed_Text.style.display='none'; Codehighlighter1_242_456_Open_Image.style.display='inline'; Codehighlighter1_242_456_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> main(String[] args) </span><span id="Codehighlighter1_242_456_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_242_456_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        P test </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> P();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        InvocationHandler handler </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> TraceHandler(test);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        Ip proxy </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (Ip) Proxy.newProxyInstance(test.getClass().getClassLoader(), test.getClass().getInterfaces(),<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                handler);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        proxy.say();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img 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 />已经测试可以运行，欢迎拍砖。。。<img src ="http://www.blogjava.net/vista/aggbug/79662.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/vista/" target="_blank">Vista</a> 2006-11-07 18:14 <a href="http://www.blogjava.net/vista/archive/2006/11/07/79662.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>vista精神之－dom4j读写xml文件</title><link>http://www.blogjava.net/vista/archive/2006/10/31/78327.html</link><dc:creator>Vista</dc:creator><author>Vista</author><pubDate>Tue, 31 Oct 2006 09:10:00 GMT</pubDate><guid>http://www.blogjava.net/vista/archive/2006/10/31/78327.html</guid><wfw:comment>http://www.blogjava.net/vista/comments/78327.html</wfw:comment><comments>http://www.blogjava.net/vista/archive/2006/10/31/78327.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/vista/comments/commentRss/78327.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/vista/services/trackbacks/78327.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 虽然考虑到读取文件会影响性能，最终没有采用这种方式，而是取数据库，但总结出来以后说不定用的着，呵呵.1，下载dom4j2，写xml的代码public class AddPictureAction extends BaseAction {    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServl...&nbsp;&nbsp;<a href='http://www.blogjava.net/vista/archive/2006/10/31/78327.html'>阅读全文</a><img src ="http://www.blogjava.net/vista/aggbug/78327.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/vista/" target="_blank">Vista</a> 2006-10-31 17:10 <a href="http://www.blogjava.net/vista/archive/2006/10/31/78327.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>vista精神之 －－javascript篇</title><link>http://www.blogjava.net/vista/archive/2006/10/13/75050.html</link><dc:creator>Vista</dc:creator><author>Vista</author><pubDate>Fri, 13 Oct 2006 12:39:00 GMT</pubDate><guid>http://www.blogjava.net/vista/archive/2006/10/13/75050.html</guid><wfw:comment>http://www.blogjava.net/vista/comments/75050.html</wfw:comment><comments>http://www.blogjava.net/vista/archive/2006/10/13/75050.html#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://www.blogjava.net/vista/comments/commentRss/75050.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/vista/services/trackbacks/75050.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 这是一个小东东，有的时候用的着，呵呵。&lt;script language="javascript" &gt;    function leftToRight(aa,bb,cc){        var selected;        var b = false;        var bLength = bb.length;        for(var i=0; i &lt; aa.len...&nbsp;&nbsp;<a href='http://www.blogjava.net/vista/archive/2006/10/13/75050.html'>阅读全文</a><img src ="http://www.blogjava.net/vista/aggbug/75050.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/vista/" target="_blank">Vista</a> 2006-10-13 20:39 <a href="http://www.blogjava.net/vista/archive/2006/10/13/75050.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>vista 精神之 － 类库篇</title><link>http://www.blogjava.net/vista/archive/2006/09/29/72826.html</link><dc:creator>Vista</dc:creator><author>Vista</author><pubDate>Fri, 29 Sep 2006 07:05:00 GMT</pubDate><guid>http://www.blogjava.net/vista/archive/2006/09/29/72826.html</guid><wfw:comment>http://www.blogjava.net/vista/comments/72826.html</wfw:comment><comments>http://www.blogjava.net/vista/archive/2006/09/29/72826.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/vista/comments/commentRss/72826.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/vista/services/trackbacks/72826.html</trackback:ping><description><![CDATA[一，一个功能强大的数据库连接池<br /><img height="19" src="http://www.blogjava.net/Emoticons/emcake.gif" width="19" border="0" />   <a href="/tonyzhou00/archive/2006/09/28/72566.html">http://www.blogjava.net/tonyzhou00/archive/2006/09/28/72566.html</a><img src ="http://www.blogjava.net/vista/aggbug/72826.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/vista/" target="_blank">Vista</a> 2006-09-29 15:05 <a href="http://www.blogjava.net/vista/archive/2006/09/29/72826.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>