﻿<?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-ann-随笔分类-java</title><link>http://www.blogjava.net/ann/category/35029.html</link><description>冰是没有未来的，因为它的永恒</description><language>zh-cn</language><lastBuildDate>Tue, 23 Aug 2011 01:35:30 GMT</lastBuildDate><pubDate>Tue, 23 Aug 2011 01:35:30 GMT</pubDate><ttl>60</ttl><item><title>tomcat-6.0.18 log4j设置</title><link>http://www.blogjava.net/ann/archive/2010/01/14/309485.html</link><dc:creator>冰是没有未来的，因为它的永恒</dc:creator><author>冰是没有未来的，因为它的永恒</author><pubDate>Thu, 14 Jan 2010 10:10:00 GMT</pubDate><guid>http://www.blogjava.net/ann/archive/2010/01/14/309485.html</guid><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 按照我写的目录结构来放置。<br>下载地址：<br>http://www.apache.org/dist/tomcat/tomcat-6/v6.0.18/bin/extras/tomcat-juli.jar<br>http://www.apache.org/dist/tomcat/tomcat-6/v6.0.18/bin/extras/tomcat-juli-adapters.jar<br><br>tomcat6-------lib<br>                |       |--------tomcat-juli-adapters.jar<br>                |       |--------log4j.jar<br>                |       |--------log4j.properites<br>                |<br>                |----bin<br>                         |--------tomcat-juli.jar<br><br&nbsp;&nbsp;<a href='http://www.blogjava.net/ann/archive/2010/01/14/309485.html'>阅读全文</a><img src ="http://www.blogjava.net/ann/aggbug/309485.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ann/" target="_blank">冰是没有未来的，因为它的永恒</a> 2010-01-14 18:10 <a href="http://www.blogjava.net/ann/archive/2010/01/14/309485.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>debian ： SEVERE: Failed to instanciate class hudson.node_monitors.DiskSpaceMonitor</title><link>http://www.blogjava.net/ann/archive/2010/01/12/309137.html</link><dc:creator>冰是没有未来的，因为它的永恒</dc:creator><author>冰是没有未来的，因为它的永恒</author><pubDate>Tue, 12 Jan 2010 05:22:00 GMT</pubDate><guid>http://www.blogjava.net/ann/archive/2010/01/12/309137.html</guid><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 找到启动用户目录<br>比如是/home/hudson/下面<br>  .hudson/nodeMonitors.xml 加入<br><br> <hudson.node__monitors.TemporarySpaceMonitor><br>    <ignored>false</ignored><br>  </hudson.node__monitors.TemporarySpaceMonitor><br>  <hudson.node__monitors.DiskSpaceMonitor><br>    <ignored>false</ignored><br>  </hudson.node__monitors.DiskSpaceMonitor><br><br><br>&nbsp;&nbsp;<a href='http://www.blogjava.net/ann/archive/2010/01/12/309137.html'>阅读全文</a><img src ="http://www.blogjava.net/ann/aggbug/309137.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ann/" target="_blank">冰是没有未来的，因为它的永恒</a> 2010-01-12 13:22 <a href="http://www.blogjava.net/ann/archive/2010/01/12/309137.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jetty 错误日志ava.lang.IllegalStateException: Form too large225854&gt;200000 解决的办法</title><link>http://www.blogjava.net/ann/archive/2010/01/12/309107.html</link><dc:creator>冰是没有未来的，因为它的永恒</dc:creator><author>冰是没有未来的，因为它的永恒</author><pubDate>Tue, 12 Jan 2010 03:09:00 GMT</pubDate><guid>http://www.blogjava.net/ann/archive/2010/01/12/309107.html</guid><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: <br><br>Jetty's default configuration has a limitation on POST data （200000 bytes）that<br>prevents Hudson from reading the Update Center data (available<br>plugins). Jetty gets an error like java.lang.IllegalStateException: Form too large. To resolve this, add something like this to jetty.xml:<br><br>Jetty 6:<br><br>在jetty.xml中设置该参数<br><br><Call class="java.lang.System" name="setProperty"><br><br>      <Arg>org.mortbay.jetty.Request.maxFormContentSize</Arg><br><br>      <Arg>-1</Ar&nbsp;&nbsp;<a href='http://www.blogjava.net/ann/archive/2010/01/12/309107.html'>阅读全文</a><img src ="http://www.blogjava.net/ann/aggbug/309107.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ann/" target="_blank">冰是没有未来的，因为它的永恒</a> 2010-01-12 11:09 <a href="http://www.blogjava.net/ann/archive/2010/01/12/309107.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java restful webservice 之MultivaluedMap 例子</title><link>http://www.blogjava.net/ann/archive/2010/01/11/309042.html</link><dc:creator>冰是没有未来的，因为它的永恒</dc:creator><author>冰是没有未来的，因为它的永恒</author><pubDate>Mon, 11 Jan 2010 09:02:00 GMT</pubDate><guid>http://www.blogjava.net/ann/archive/2010/01/11/309042.html</guid><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: server：<br>    <br>package  com.test.web.resources;<br><br>import javax.ws.rs.Consumes;<br>import javax.ws.rs.POST;<br>import javax.ws.rs.Path;<br>import javax.ws.rs.Produces;<br>import javax.ws.rs.core.MediaType;<br>import javax.ws.rs.core.MultivaluedMap;<br><br>import org.springframework.stereotype.Component;<br><br><br>/**<br> * 测试<br> * @author ann<br> *<br> */<br>@Path("/test")<br>@Component<br>public class Test {<br>    <br>    @POST<br>    @Path("/formTest")<br>  &nbsp;&nbsp;<a href='http://www.blogjava.net/ann/archive/2010/01/11/309042.html'>阅读全文</a><img src ="http://www.blogjava.net/ann/aggbug/309042.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ann/" target="_blank">冰是没有未来的，因为它的永恒</a> 2010-01-11 17:02 <a href="http://www.blogjava.net/ann/archive/2010/01/11/309042.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>并发集合类的选择</title><link>http://www.blogjava.net/ann/archive/2010/01/07/308580.html</link><dc:creator>冰是没有未来的，因为它的永恒</dc:creator><author>冰是没有未来的，因为它的永恒</author><pubDate>Thu, 07 Jan 2010 10:04:00 GMT</pubDate><guid>http://www.blogjava.net/ann/archive/2010/01/07/308580.html</guid><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要:     同步的集合类Hashtable和Vector，以及同步的包装器类Collections.synchronizedMap和Collections.synchronizedList，为Map和List提供了基本的有条件的线程安全的实现。然而，某些因素使得它们并不适用于具有高度并发性的应用程序中――它们的集合范围的单锁特性对于可伸缩性来说是一个障碍，而且，很多时候还必须在一段较长的时间内锁定一个集合，以防止出现ConcurrentModificationExceptions异常。<br><br>ConcurrentHashMap和CopyOnWriteArrayList实现提供了更高的并发性，同时还保住了线程安全性，只不过在对其调用者的承诺上打了点折扣。ConcurrentHashMap和CopyOnWriteArrayList并不是在您使用HashMap或ArrayList的任何地方都一定有用，但是它们是设计用来优化某些特定的公用解决方案的。许多并发应用程序将从对它们的使用中获得好处。<br><br>总结：在多线程并发情况下，为了避免ConcurrentModificati&nbsp;&nbsp;<a href='http://www.blogjava.net/ann/archive/2010/01/07/308580.html'>阅读全文</a><img src ="http://www.blogjava.net/ann/aggbug/308580.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ann/" target="_blank">冰是没有未来的，因为它的永恒</a> 2010-01-07 18:04 <a href="http://www.blogjava.net/ann/archive/2010/01/07/308580.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java jar </title><link>http://www.blogjava.net/ann/archive/2009/12/22/306873.html</link><dc:creator>冰是没有未来的，因为它的永恒</dc:creator><author>冰是没有未来的，因为它的永恒</author><pubDate>Tue, 22 Dec 2009 01:47:00 GMT</pubDate><guid>http://www.blogjava.net/ann/archive/2009/12/22/306873.html</guid><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: java -cp "./WEB-INF/lib/*:./WEB-INF/classes" bran.RestaurantCenterJettyStarter&nbsp;&nbsp;<a href='http://www.blogjava.net/ann/archive/2009/12/22/306873.html'>阅读全文</a><img src ="http://www.blogjava.net/ann/aggbug/306873.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ann/" target="_blank">冰是没有未来的，因为它的永恒</a> 2009-12-22 09:47 <a href="http://www.blogjava.net/ann/archive/2009/12/22/306873.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>gson（JSON字符串转换成一个相等的Java对象）</title><link>http://www.blogjava.net/ann/archive/2009/11/05/gson.html</link><dc:creator>冰是没有未来的，因为它的永恒</dc:creator><author>冰是没有未来的，因为它的永恒</author><pubDate>Thu, 05 Nov 2009 07:31:00 GMT</pubDate><guid>http://www.blogjava.net/ann/archive/2009/11/05/gson.html</guid><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 目前大多数使用gson的还要求在java类中使用java annotation，不完全支持POJO。<br>Gson这个Java类库可以把Java对象转换成JSON，也可以把JSON字符串转换成一个相等的Java对象。Gson支持任意复杂Java对象包括没有源代码的对象。<br><br>下载地址<br>http://code.google.com/p/google-gson/downloads/list&nbsp;&nbsp;<a href='http://www.blogjava.net/ann/archive/2009/11/05/gson.html'>阅读全文</a><img src ="http://www.blogjava.net/ann/aggbug/301283.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ann/" target="_blank">冰是没有未来的，因为它的永恒</a> 2009-11-05 15:31 <a href="http://www.blogjava.net/ann/archive/2009/11/05/gson.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>restful webservice 返回json格式的string出现的问题</title><link>http://www.blogjava.net/ann/archive/2009/10/15/298314.html</link><dc:creator>冰是没有未来的，因为它的永恒</dc:creator><author>冰是没有未来的，因为它的永恒</author><pubDate>Thu, 15 Oct 2009 01:28:00 GMT</pubDate><guid>http://www.blogjava.net/ann/archive/2009/10/15/298314.html</guid><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在测试发现 当数组返回json格式的String的时候，如果数组中只有一个，则返回的json格式不是数组形式，而是单一对象格式。&nbsp;&nbsp;<a href='http://www.blogjava.net/ann/archive/2009/10/15/298314.html'>阅读全文</a><img src ="http://www.blogjava.net/ann/aggbug/298314.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ann/" target="_blank">冰是没有未来的，因为它的永恒</a> 2009-10-15 09:28 <a href="http://www.blogjava.net/ann/archive/2009/10/15/298314.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java restful 风格的Webservice</title><link>http://www.blogjava.net/ann/archive/2009/09/27/296641.html</link><dc:creator>冰是没有未来的，因为它的永恒</dc:creator><author>冰是没有未来的，因为它的永恒</author><pubDate>Sun, 27 Sep 2009 07:19:00 GMT</pubDate><guid>http://www.blogjava.net/ann/archive/2009/09/27/296641.html</guid><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 这里面用的是jersey<br><br>1. 创建一个project<br><br>2. 建立返回的model<br>    <br>         这里面的model例子<br>          <br>/*<br> * To change this template, choose Tools | Templates<br> * and open the template in the editor.<br> */<br><br>package com.test.webservice.model;<br><br>/**<br> *<br> * @author ann<br> */<br>import com.fg114.model.People;<br>import java.util.Date;<br>import javax.xml.bind.annotation.XmlAccessType;<br>import javax.xml.bind.annotation.XmlAccessorType;<br>import javax&nbsp;&nbsp;<a href='http://www.blogjava.net/ann/archive/2009/09/27/296641.html'>阅读全文</a><img src ="http://www.blogjava.net/ann/aggbug/296641.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ann/" target="_blank">冰是没有未来的，因为它的永恒</a> 2009-09-27 15:19 <a href="http://www.blogjava.net/ann/archive/2009/09/27/296641.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java.lang.LinkageError: loader constraint violation: when resolving overridden method "com.sun.xml.ws.message.jaxb.AttachmentMarshallerImpl.addMtomAttachment(Ljavax/activation/DataHandler;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" the c</title><link>http://www.blogjava.net/ann/archive/2009/09/18/295584.html</link><dc:creator>冰是没有未来的，因为它的永恒</dc:creator><author>冰是没有未来的，因为它的永恒</author><pubDate>Fri, 18 Sep 2009 08:13:00 GMT</pubDate><guid>http://www.blogjava.net/ann/archive/2009/09/18/295584.html</guid><description><![CDATA[<span style="font-family: 'lucida grande', verdana, arial, geneva, lucida, sans-serif; font-size: 12px; white-space: pre-wrap; ">java.lang.LinkageError: loader constraint violation: when resolving overridden method "com.sun.xml.ws.message.jaxb.AttachmentMarshallerImpl.addMtomAttachment(Ljavax/activation/DataHandler;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" the class loader (instance of org/mortbay/jetty/webapp/WebAppClassLoader) of the current class, com/sun/xml/ws/message/jaxb/AttachmentMarshallerImpl, and its superclass loader (instance of &lt;bootloader&gt;), have different Class objects for the type javax/activation/DataHandler used in the signature
因为jetty自带的activation.jar和你的application中用到的activation.jar版本不一样 也即It seems that versions of the same library are loaded in different classloaders, nasty error.
解决的办法就是把删除一个，把javaee.jar移动到jetty的lib下面</span>
<img src ="http://www.blogjava.net/ann/aggbug/295584.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ann/" target="_blank">冰是没有未来的，因为它的永恒</a> 2009-09-18 16:13 <a href="http://www.blogjava.net/ann/archive/2009/09/18/295584.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jvm调优总结</title><link>http://www.blogjava.net/ann/archive/2009/07/15/286871.html</link><dc:creator>冰是没有未来的，因为它的永恒</dc:creator><author>冰是没有未来的，因为它的永恒</author><pubDate>Wed, 15 Jul 2009 06:26:00 GMT</pubDate><guid>http://www.blogjava.net/ann/archive/2009/07/15/286871.html</guid><description><![CDATA[<span  style="font-family: Arial; font-size: 12px; line-height: 18px; ">
<div class="blog_title" style="margin-bottom: 15px; ">
<h3 class="type_reprint" title="转载" style="font-size: 16px; line-height: 1.5em; margin-top: 0px; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding-top: 10px; padding-right: 0px; padding-bottom: 0px; padding-left: 25px; color: black; background-repeat: no-repeat; background-image: url(http://www.javaeye.com/images/blog/type_reprint.png); background-position: 0px 13px; "><span  style="font-weight: normal; line-height: 18px; font-size: 12px; ">
<h3 class="type_reprint" title="转载" style="font-size: 16px; line-height: 1.5em; margin-top: 0px; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding-top: 10px; padding-right: 0px; padding-bottom: 0px; padding-left: 25px; color: black; background-repeat: no-repeat; background-image: url(http://www.javaeye.com/images/blog/type_reprint.png); background-position: 0px 13px; "><a href="http://liu-swei.javaeye.com/blog/266526" style="color: #108ac6; text-decoration: underline; ">jvm调优总结</a></h3>
</span></h3>
</div>
<div class="blog_content">
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">由于应用服务器本身对内存消耗比较大，所以遇到不同配置的机器时经常要对suite的启动脚本进行修改</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">来调整内存参数，尤其是在虚拟机分配内存过小的情况</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">于是想总结一下内存参数相关的内容，但搜索之后发现unixboy已经很好的总结了</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">于是转载过来以供自己学习参考。</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">声明：本文一下内容转自：<a href="http://unixboy.javaeye.com/blog/174173" style="color: #108ac6; text-decoration: underline; ">http://unixboy.javaeye.com/blog/174173</a></p>
<div class="blog_content">
<ol style="font-size: 1em; line-height: 1.4em; margin-top: 0px; margin-right: 0px; margin-bottom: 1.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><strong style="font-weight: bold; ">堆大小设置<br />
    </strong>JVM 中最大堆大小有三方面限制：相关操作系统的数据模型（32-bt还是64-bit）限制；系统的可用虚拟内存限制；系统的可用物理内存限制。32位系统下，一般限制在1.5G~2G；64为操作系统对内存无限制。我在Windows Server 2003 系统，3.5G物理内存，JDK5.0下测试，最大可设置为1478m。<br />
    <strong style="font-weight: bold; "><span style="font-family: 'Courier New'; ">典型设置：</span></strong>
    <ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
        <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 1em; "><span style="font-family: 'Courier New'; ">java&nbsp;<strong style="font-weight: bold; ">-Xmx3550m -Xms3550m -Xmn2g</strong>&nbsp;</span><span style="font-family: 'Courier New'; "><strong style="font-weight: bold; ">-Xss128k</strong><br />
        <strong style="font-weight: bold; ">-</strong></span><span style="font-family: 'Courier New'; "><strong style="font-weight: bold; ">Xmx3550m</strong>：设置JVM最大可用内存为3550M。<br />
        <strong style="font-weight: bold; ">-Xms3550m</strong></span><span style="font-family: 'Courier New'; ">：设置JVM促使内存为3550m。此值可以设置与-Xmx相同，以避免每次垃圾回收完成后JVM重新分配内存。<br />
        <strong style="font-weight: bold; "><span style="color: #ff0000; ">-Xmn2g</span></strong></span><span style="font-family: 'Courier New'; ">：设置年轻代大小为2G。<strong style="font-weight: bold; "><span style="color: #0000ff; ">整个堆大小=年轻代大小 + 年老代大小 + 持久代大小</span></strong>。持久代一般固定大小为64m，所以增大年轻代后，将会减小年老代大小。此值对系统性能影响较大，Sun官方推荐配置为整个堆的3/8。<br />
        <strong style="font-weight: bold; ">-Xss128k</strong></span><span style="font-family: 'Courier New'; ">：设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M，以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内存下，减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的，不能无限生成，经验值在3000~5000左右。<br />
        </span></li>
        <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 1em; "><span style="font-family: 'Courier New'; ">java -Xmx3550m -Xms3550m -Xss128k&nbsp;<strong style="font-weight: bold; ">-XX:NewRatio=4 -XX:SurvivorRatio=4 -XX:MaxPermSize=16m -XX:MaxTenuringThreshold=0</strong><br />
        <strong style="font-weight: bold; ">-XX:NewRatio=4</strong></span><span style="font-family: 'Courier New'; ">:设置年轻代（包括Eden和两个Survivor区）与年老代的比值（除去持久代）。设置为4，则年轻代与年老代所占比值为1：4，年轻代占整个堆栈的1/5<br />
        <strong style="font-weight: bold; ">-XX:SurvivorRatio=4</strong></span>：设置年轻代中Eden区与Survivor区的大小比值。设置为4，则两个Survivor区与一个Eden区的比值为2:4，一个Survivor区占整个年轻代的1/6<br />
        <strong style="font-weight: bold; "><span style="font-family: 'Courier New'; ">-XX:MaxPermSize=16m</span></strong>:设置持久代大小为16m。<br />
        <span style="font-family: 'Courier New'; "><strong style="font-weight: bold; ">-XX:MaxTenuringThreshold=0</strong>：设置垃圾最大年龄。<strong style="font-weight: bold; "><span style="color: #0000ff; ">如果设置为0的话，则年轻代对象不经过Survivor区，直接进入年老代</span></strong>。对于年老代比较多的应用，可以提高效率。<strong style="font-weight: bold; "><span style="color: #0000ff; ">如果将此值设置为一个较大值，则年轻代对象会在Survivor区进行多次复制，这样可以增加对象再年轻代的存活时间</span></strong>，增加在年轻代即被回收的概论。</span></li>
    </ul>
    </li>
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><strong style="font-weight: bold; ">回收器选择<br />
    </strong>JVM给了三种选择：<strong style="font-weight: bold; ">串行收集器、并行收集器、并发收集器</strong>，但是串行收集器只适用于小数据量的情况，所以这里的选择主要针对并行收集器和并发收集器。默认情况下，JDK5.0以前都是使用串行收集器，如果想使用其他收集器需要在启动时加入相应参数。JDK5.0以后，JVM会根据当前<a href="http://java.sun.com/j2se/1.5.0/docs/guide/vm/server-class.html" style="color: #108ac6; text-decoration: underline; "><span style="color: #108ac6; ">系统配置</span></a>进行判断。
    <ol style="font-size: 1em; line-height: 1.4em; margin-top: 0px; margin-right: 0px; margin-bottom: 1.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
        <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><strong style="font-weight: bold; ">吞吐量优先</strong>的并行收集器<br />
        如上文所述，并行收集器主要以到达一定的吞吐量为目标，适用于科学技术和后台处理等。<br />
        <strong style="font-weight: bold; ">典型配置</strong>：
        <ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
            <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 1em; "><span style="font-family: 'Courier New'; ">java -Xmx3800m -Xms3800m -Xmn2g -Xss128k&nbsp;<strong style="font-weight: bold; ">-XX:+UseParallelGC -XX:ParallelGCThreads=20</strong><br />
            <strong style="font-weight: bold; ">-XX:+UseParallelGC</strong></span><span style="font-family: 'Courier New'; ">：选择垃圾收集器为并行收集器。</span><strong style="font-weight: bold; "><span style="color: #0000ff; font-family: 'Courier New'; ">此配置仅对年轻代有效。即上述配置下，年轻代使用并发收集，而年老代仍旧使用串行收集。<br />
            </span></strong><strong style="font-weight: bold; "><span style="font-family: 'Courier New'; ">-XX:ParallelGCThreads=20</span></strong><span style="font-family: 'Courier New'; ">：配置并行收集器的线程数，即：同时多少个线程一起进行垃圾回收。此值最好配置与处理器数目相等。<br />
            </span></li>
            <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 1em; "><span style="font-family: 'Courier New'; ">java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:ParallelGCThreads=20&nbsp;</span><strong style="font-weight: bold; "><span style="font-family: 'Courier New'; ">-XX:+UseParallelOldGC<br />
            </span></strong><strong style="font-weight: bold; "><span style="font-family: 'Courier New'; ">-XX:+UseParallelOldGC</span></strong><span style="font-family: 'Courier New'; ">：配置年老代垃圾收集方式为并行收集。JDK6.0支持对年老代并行收集。<br />
            </span></li>
            <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 1em; "><span style="font-family: 'Courier New'; ">java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseParallelGC&nbsp;&nbsp;</span><strong style="font-weight: bold; "><span style="font-family: 'Courier New'; ">-XX:MaxGCPauseMillis=100<br />
            </span></strong><strong style="font-weight: bold; "><span style="font-family: 'Courier New'; ">-XX:MaxGCPauseMillis=100</span></strong><span style="font-family: 'Courier New'; "><strong style="font-weight: bold; ">:</strong>设置每次年轻代垃圾回收的最长时间，如果无法满足此时间，JVM会自动调整年轻代大小，以满足此值。<br />
            </span></li>
            <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 1em; "><span style="font-family: 'Courier New'; ">java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseParallelGC&nbsp; -XX:MaxGCPauseMillis=100&nbsp;</span><strong style="font-weight: bold; ">-XX:+UseAdaptiveSizePolicy<br />
            -XX:+UseAdaptiveSizePolicy</strong>：设置此选项后，并行收集器会自动选择年轻代区大小和相应的Survivor区比例，以达到目标系统规定的最低相应时间或者收集频率等，此值建议使用并行收集器时，一直打开。</li>
        </ul>
        </li>
        <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><strong style="font-weight: bold; ">响应时间优先</strong>的并发收集器<br />
        如上文所述，并发收集器主要是保证系统的响应时间，减少垃圾收集时的停顿时间。适用于应用服务器、电信领域等。<br />
        <strong style="font-weight: bold; ">典型配置</strong>：
        <ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
            <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 1em; "><span style="font-family: 'Courier New'; ">java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:ParallelGCThreads=20&nbsp;</span><strong style="font-weight: bold; "><span style="font-family: 'Courier New'; ">-XX:+UseConcMarkSweepGC -XX:+UseParNewGC<br />
            </span></strong><span style="font-family: 'Courier New'; "><strong style="font-weight: bold; ">-XX:+UseConcMarkSweepGC</strong>：设置年老代为并发收集。测试中配置这个以后，-XX:NewRatio=4的配置失效了，原因不明。所以，此时年轻代大小最好用-Xmn设置。<br />
            <strong style="font-weight: bold; ">-XX:+UseParNewGC</strong>:设置年轻代为并行收集。可与CMS收集同时使用。JDK5.0以上，JVM会根据系统配置自行设置，所以无需再设置此值。</span></li>
            <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 1em; "><span style="font-family: 'Courier New'; ">java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseConcMarkSweepGC&nbsp;</span><strong style="font-weight: bold; "><span style="font-family: 'Courier New'; ">-XX:CMSFullGCsBeforeCompaction=5&nbsp;</span>-XX:+UseCMSCompactAtFullCollection</strong><br />
            <span style="font-family: 'Courier New'; "><strong style="font-weight: bold; ">-XX:CMSFullGCsBeforeCompaction</strong>：由于并发收集器不对内存空间进行压缩、整理，所以运行一段时间以后会产生&#8220;碎片&#8221;，使得运行效率降低。此值设置运行多少次GC以后对内存空间进行压缩、整理。<br />
            </span><strong style="font-weight: bold; ">-XX:+UseCMSCompactAtFullCollection</strong>：打开对年老代的压缩。可能会影响性能，但是可以消除碎片</li>
        </ul>
        </li>
    </ol>
    </li>
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><strong style="font-weight: bold; ">辅助信息<br />
    </strong>JVM提供了大量命令行参数，打印信息，供调试使用。主要有以下一些：
    <ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
        <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 1em; "><strong style="font-weight: bold; ">-XX:+PrintGC<br />
        </strong>输出形式<strong style="font-weight: bold; ">：[GC 118250K-&gt;113543K(130112K), 0.0094143 secs]</strong>
        <p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><strong style="font-weight: bold; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [Full GC 121376K-&gt;10414K(130112K), 0.0650971 secs]</strong></p>
        </li>
        <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 1em; "><strong style="font-weight: bold; ">-XX:+PrintGCDetails<br />
        </strong>输出形式<strong style="font-weight: bold; ">：[GC [DefNew: 8614K-&gt;781K(9088K), 0.0123035 secs] 118250K-&gt;113543K(130112K), 0.0124633 secs]</strong>
        <p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><strong style="font-weight: bold; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [GC [DefNew: 8614K-&gt;8614K(9088K), 0.0000665 secs][Tenured: 112761K-&gt;10414K(121024K), 0.0433488 secs] 121376K-&gt;10414K(130112K), 0.0436268 secs]</strong></p>
        </li>
        <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 1em; "><strong style="font-weight: bold; ">-XX:+PrintGCTimeStamps</strong>&nbsp;-XX:+PrintGC：PrintGCTimeStamps可与上面两个混合使用<br />
        输出形式：<strong style="font-weight: bold; ">11.851: [GC 98328K-&gt;93620K(130112K), 0.0082960 secs]<br />
        </strong></li>
        <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 1em; "><strong style="font-weight: bold; ">-XX:+PrintGCApplicationConcurrentTime:</strong>打印每次垃圾回收前，程序未中断的执行时间。可与上面混合使用<br />
        输出形式：<strong style="font-weight: bold; ">Application time: 0.5291524 seconds<br />
        </strong></li>
        <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 1em; "><strong style="font-weight: bold; ">-XX:+PrintGCApplicationStoppedTime</strong>：打印垃圾回收期间程序暂停的时间。可与上面混合使用<br />
        输出形式：<strong style="font-weight: bold; ">Total time for which application threads were stopped: 0.0468229 seconds<br />
        </strong></li>
        <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 1em; "><strong style="font-weight: bold; ">-XX:PrintHeapAtGC</strong>:打印GC前后的详细堆栈信息<br />
        输出形式：<br />
        34.702: [GC {Heap before gc invocations=7:<br />
        &nbsp;def new generation&nbsp;&nbsp; total 55296K, used 52568K [0x1ebd0000, 0x227d0000, 0x227d0000)<br />
        <strong style="font-weight: bold; ">eden space 49152K,&nbsp; 99% used</strong>&nbsp;[0x1ebd0000, 0x21bce430, 0x21bd0000)<br />
        <strong style="font-weight: bold; ">from space 6144K,&nbsp; 55% used</strong>&nbsp;[0x221d0000, 0x22527e10, 0x227d0000)<br />
        &nbsp; to&nbsp;&nbsp; space 6144K,&nbsp;&nbsp; 0% used [0x21bd0000, 0x21bd0000, 0x221d0000)<br />
        &nbsp;tenured generation&nbsp;&nbsp; total 69632K, used 2696K [0x227d0000, 0x26bd0000, 0x26bd0000)<br />
        <strong style="font-weight: bold; ">the space 69632K,&nbsp;&nbsp; 3% used</strong>&nbsp;[0x227d0000, 0x22a720f8, 0x22a72200, 0x26bd0000)<br />
        &nbsp;compacting perm gen&nbsp; total 8192K, used 2898K [0x26bd0000, 0x273d0000, 0x2abd0000)<br />
        &nbsp;&nbsp; the space 8192K,&nbsp; 35% used [0x26bd0000, 0x26ea4ba8, 0x26ea4c00, 0x273d0000)<br />
        &nbsp;&nbsp;&nbsp; ro space 8192K,&nbsp; 66% used [0x2abd0000, 0x2b12bcc0, 0x2b12be00, 0x2b3d0000)<br />
        &nbsp;&nbsp;&nbsp; rw space 12288K,&nbsp; 46% used [0x2b3d0000, 0x2b972060, 0x2b972200, 0x2bfd0000)<br />
        34.735: [DefNew: 52568K-&gt;3433K(55296K), 0.0072126 secs] 55264K-&gt;6615K(124928K)<strong style="font-weight: bold; ">Heap after gc invocations=8:<br />
        </strong>&nbsp;def new generation&nbsp;&nbsp; total 55296K, used 3433K [0x1ebd0000, 0x227d0000, 0x227d0000)<br />
        <strong style="font-weight: bold; ">eden space 49152K,&nbsp;&nbsp; 0% used</strong>&nbsp;[0x1ebd0000, 0x1ebd0000, 0x21bd0000)<br />
        &nbsp; from space 6144K,&nbsp; 55% used [0x21bd0000, 0x21f2a5e8, 0x221d0000)<br />
        &nbsp; to&nbsp;&nbsp; space 6144K,&nbsp;&nbsp; 0% used [0x221d0000, 0x221d0000, 0x227d0000)<br />
        &nbsp;tenured generation&nbsp;&nbsp; total 69632K, used 3182K [0x227d0000, 0x26bd0000, 0x26bd0000)<br />
        <strong style="font-weight: bold; ">the space 69632K,&nbsp;&nbsp; 4% used&nbsp;</strong>[0x227d0000, 0x22aeb958, 0x22aeba00, 0x26bd0000)<br />
        &nbsp;compacting perm gen&nbsp; total 8192K, used 2898K [0x26bd0000, 0x273d0000, 0x2abd0000)<br />
        &nbsp;&nbsp; the space 8192K,&nbsp; 35% used [0x26bd0000, 0x26ea4ba8, 0x26ea4c00, 0x273d0000)<br />
        &nbsp;&nbsp;&nbsp; ro space 8192K,&nbsp; 66% used [0x2abd0000, 0x2b12bcc0, 0x2b12be00, 0x2b3d0000)<br />
        &nbsp;&nbsp;&nbsp; rw space 12288K,&nbsp; 46% used [0x2b3d0000, 0x2b972060, 0x2b972200, 0x2bfd0000)<br />
        }<br />
        , 0.0757599 secs]</li>
        <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 1em; "><strong style="font-weight: bold; ">-Xloggc:filename</strong>:与上面几个配合使用，把相关日志信息记录到文件以便分析。</li>
    </ul>
    </li>
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><strong style="font-weight: bold; ">常见配置汇总</strong>
    <ol style="font-size: 1em; line-height: 1.4em; margin-top: 0px; margin-right: 0px; margin-bottom: 1.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
        <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">堆设置
        <ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
            <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 1em; "><strong style="font-weight: bold; ">-Xms</strong>:初始堆大小</li>
            <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 1em; "><strong style="font-weight: bold; ">-Xmx</strong>:最大堆大小</li>
            <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 1em; "><strong style="font-weight: bold; ">-XX:NewSize=n</strong>:设置年轻代大小</li>
            <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 1em; "><strong style="font-weight: bold; ">-XX:NewRatio=n:</strong>设置年轻代和年老代的比值。如:为3，表示年轻代与年老代比值为1：3，年轻代占整个年轻代年老代和的1/4</li>
            <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 1em; "><strong style="font-weight: bold; ">-XX:SurvivorRatio=n</strong>:年轻代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如：3，表示Eden：Survivor=3：2，一个Survivor区占整个年轻代的1/5</li>
            <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 1em; "><strong style="font-weight: bold; ">-XX:MaxPermSize=n</strong>:设置持久代大小</li>
        </ul>
        </li>
        <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">收集器设置
        <ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
            <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 1em; "><strong style="font-weight: bold; ">-XX:+UseSerialGC</strong>:设置串行收集器</li>
            <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 1em; "><strong style="font-weight: bold; ">-XX:+UseParallelGC</strong>:设置并行收集器</li>
            <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 1em; "><strong style="font-weight: bold; ">-XX:+UseParalledlOldGC</strong>:设置并行年老代收集器</li>
            <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 1em; "><strong style="font-weight: bold; ">-XX:+UseConcMarkSweepGC</strong>:设置并发收集器</li>
        </ul>
        </li>
        <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">垃圾回收统计信息
        <ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
            <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 1em; "><strong style="font-weight: bold; ">-XX:+PrintGC</strong></li>
            <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 1em; "><strong style="font-weight: bold; ">-XX:+PrintGCDetails</strong></li>
            <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 1em; "><strong style="font-weight: bold; ">-XX:+PrintGCTimeStamps</strong></li>
            <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 1em; "><strong style="font-weight: bold; ">-Xloggc:filename</strong></li>
        </ul>
        </li>
        <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">并行收集器设置
        <ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
            <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 1em; "><strong style="font-weight: bold; ">-XX:ParallelGCThreads=n</strong>:设置并行收集器收集时使用的CPU数。并行收集线程数。</li>
            <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 1em; "><strong style="font-weight: bold; ">-XX:MaxGCPauseMillis=n</strong>:设置并行收集最大暂停时间</li>
            <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 1em; "><strong style="font-weight: bold; ">-XX:GCTimeRatio=n</strong>:设置垃圾回收时间占程序运行时间的百分比。公式为1/(1+n)</li>
        </ul>
        </li>
        <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">并发收集器设置
        <ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
            <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 1em; "><strong style="font-weight: bold; ">-XX:+CMSIncrementalMode</strong>:设置为增量模式。适用于单CPU情况。</li>
            <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 1em; "><strong style="font-weight: bold; ">-XX:ParallelGCThreads=n</strong>:设置并发收集器年轻代收集方式为并行收集时，使用的CPU数。并行收集线程数。</li>
        </ul>
        </li>
    </ol>
    </li>
</ol>
</div>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><br />
<strong style="font-weight: bold; "><span style="font-size: x-small; "><span style="font-size: xx-small; ">四、调优总结</span></span></strong></p>
<ol style="font-size: 1em; line-height: 1.4em; margin-top: 0px; margin-right: 0px; margin-bottom: 1.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><strong style="font-weight: bold; ">年轻代大小选择</strong>
    <ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
        <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 1em; "><strong style="font-weight: bold; ">响应时间优先的应用</strong>：<strong style="font-weight: bold; "><span style="color: #0000ff; ">尽可能设大，直到接近系统的最低响应时间限制</span></strong>（根据实际情况选择）。在此种情况下，年轻代收集发生的频率也是最小的。同时，减少到达年老代的对象。</li>
        <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 1em; "><strong style="font-weight: bold; ">吞吐量优先的应用</strong>：尽可能的设置大，可能到达Gbit的程度。因为对响应时间没有要求，垃圾收集可以并行进行，一般适合8CPU以上的应用。</li>
    </ul>
    </li>
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><strong style="font-weight: bold; ">年老代大小选择</strong>
    <ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
        <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 1em; "><strong style="font-weight: bold; ">响应时间优先的应用</strong>：年老代使用并发收集器，所以其大小需要小心设置，一般要考虑<strong style="font-weight: bold; ">并发会话率</strong>和<strong style="font-weight: bold; ">会话持续时间</strong>等一些参数。如果堆设置小了，可以会造成内存碎片、高回收频率以及应用暂停而使用传统的标记清除方式；如果堆大了，则需要较长的收集时间。最优化的方案，一般需要参考以下数据获得：
        <ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
            <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 1em; ">并发垃圾收集信息</li>
            <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 1em; ">持久代并发收集次数</li>
            <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 1em; ">传统GC信息</li>
            <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 1em; ">花在年轻代和年老代回收上的时间比例</li>
        </ul>
        减少年轻代和年老代花费的时间，一般会提高应用的效率</li>
        <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 1em; "><strong style="font-weight: bold; ">吞吐量优先的应用</strong>：一般吞吐量优先的应用都有一个很大的年轻代和一个较小的年老代。原因是，这样可以尽可能回收掉大部分短期对象，减少中期的对象，而年老代尽存放长期存活对象。</li>
    </ul>
    </li>
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><strong style="font-weight: bold; ">较小堆引起的碎片问题<br />
    </strong>因为年老代的并发收集器使用标记、清除算法，所以不会对堆进行压缩。当收集器回收时，他会把相邻的空间进行合并，这样可以分配给较大的对象。但是，当堆空间较小时，运行一段时间以后，就会出现&#8220;碎片&#8221;，如果并发收集器找不到足够的空间，那么并发收集器将会停止，然后使用传统的标记、清除方式进行回收。如果出现&#8220;碎片&#8221;，可能需要进行如下配置：
    <ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
        <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 1em; "><strong style="font-weight: bold; ">-XX:+UseCMSCompactAtFullCollection</strong>：使用并发收集器时，开启对年老代的压缩。</li>
        <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 1em; "><strong style="font-weight: bold; ">-XX:CMSFullGCsBeforeCompaction=0</strong>：上面配置开启的情况下，这里设置多少次Full GC后，对年老代进行压缩</li>
    </ul>
    </li>
</ol>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">此外，对ibm的jdk1.4版本，不支持<strong style="font-weight: bold; "><span style="font-family: 'Courier New'; ">PermSize。</span></strong></p>
</div>
</span>
<img src ="http://www.blogjava.net/ann/aggbug/286871.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ann/" target="_blank">冰是没有未来的，因为它的永恒</a> 2009-07-15 14:26 <a href="http://www.blogjava.net/ann/archive/2009/07/15/286871.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux java main函数启动的例子</title><link>http://www.blogjava.net/ann/archive/2009/06/15/282414.html</link><dc:creator>冰是没有未来的，因为它的永恒</dc:creator><author>冰是没有未来的，因为它的永恒</author><pubDate>Mon, 15 Jun 2009 10:02:00 GMT</pubDate><guid>http://www.blogjava.net/ann/archive/2009/06/15/282414.html</guid><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: java -cp "./WEB-INF/lib/*:./WEB-INF/classes" bran.RestaurantCenterJettyStarter<br>nohup java -cp "./WEB-INF/lib/*:./WEB-INF/classes" bran.RestaurantCenterJettyStarter >log.log &  退出时候，不中断&nbsp;&nbsp;<a href='http://www.blogjava.net/ann/archive/2009/06/15/282414.html'>阅读全文</a><img src ="http://www.blogjava.net/ann/aggbug/282414.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ann/" target="_blank">冰是没有未来的，因为它的永恒</a> 2009-06-15 18:02 <a href="http://www.blogjava.net/ann/archive/2009/06/15/282414.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>solr int  Querying Ranges Problem</title><link>http://www.blogjava.net/ann/archive/2009/06/13/282059.html</link><dc:creator>冰是没有未来的，因为它的永恒</dc:creator><author>冰是没有未来的，因为它的永恒</author><pubDate>Sat, 13 Jun 2009 09:45:00 GMT</pubDate><guid>http://www.blogjava.net/ann/archive/2009/06/13/282059.html</guid><description><![CDATA[<span  style="font-family: Arial; font-size: 12px; line-height: 15px; ">
<pre class="document-body" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 100%; vertical-align: baseline; background-image: initial; background-repeat: initial; background-attachment: initial; background-color: transparent; white-space: pre-wrap; font-family: inherit; background-position: initial initial; ">Ensure that the fieldType maps back to solr.SortableIntField rather
than solr.IntField</pre>
</span>
<img src ="http://www.blogjava.net/ann/aggbug/282059.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ann/" target="_blank">冰是没有未来的，因为它的永恒</a> 2009-06-13 17:45 <a href="http://www.blogjava.net/ann/archive/2009/06/13/282059.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>unconpilable exception code in netbeans</title><link>http://www.blogjava.net/ann/archive/2009/06/13/282030.html</link><dc:creator>冰是没有未来的，因为它的永恒</dc:creator><author>冰是没有未来的，因为它的永恒</author><pubDate>Sat, 13 Jun 2009 06:38:00 GMT</pubDate><guid>http://www.blogjava.net/ann/archive/2009/06/13/282030.html</guid><description><![CDATA[<span  style="font-family: Arial; font-size: 12px; ">
<table xmlns="http://www.w3.org/1999/xhtml" id="sites-content-table0" class="sites-layout-hbox" cellspacing="0" style="width: 100%; table-layout: fixed; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">
    <tbody>
        <tr>
            <td id="col00" width="100%;" style="vertical-align: top; ">
            <div id="sites-content00" class="goog-ws-content-wrapper sites-clear" style="background-color: transparent; ">
            <div dir="ltr" style="background-color: transparent; ">have a little testcase:
            <div style="background-color: transparent; "><br />
            </div>
            <div style="background-color: transparent; ">
            <div style="background-color: transparent; ">&#160;&#160; &#160; &#160; &#160;Class enumClass = TestEnum.class;</div>
            <div style="background-color: transparent; ">&#160;&#160; &#160; &#160; &#160;System.out.println(TestEnum.我);</div>
            <div style="background-color: transparent; ">&#160;&#160; &#160; &#160; &#160;Method method = null;</div>
            <div style="background-color: transparent; ">&#160;&#160; &#160; &#160; &#160;method = enumClass.getDeclaredMethod("values", new Class[0]);</div>
            <div style="background-color: transparent; ">&#160;&#160; &#160; &#160; &#160;Object[] values = (Object[]) method.invoke(null, new Object[0]);</div>
            <div style="background-color: transparent; ">&#160;&#160; &#160; &#160; &#160;Assert.assertTrue(values.length > 0);</div>
            <div style="background-color: transparent; ">&#160;&#160; &#160; &#160; &#160;System.out.println(values[0]);</div>
            <div style="background-color: transparent; "><br />
            </div>
            <div style="background-color: transparent; ">The method invocation blows out and complains &#160;uncompilable code</div>
            <div style="background-color: transparent; "><br />
            </div>
            <div style="background-color: transparent; ">The reason seems to be related to&#160;</div>
            <div style="background-color: transparent; ">-&#160;auto compile on save&#160;</div>
            <div style="background-color: transparent; ">- anto deploy on save&#160;</div>
            <div style="background-color: transparent; "><br />
            </div>
            <div style="background-color: transparent; ">feature: when they're turned off the problem went away! So&#160;weird!</div>
            </div>
            </div>
            </div>
            </td>
        </tr>
    </tbody>
</table>
</span>
<img src ="http://www.blogjava.net/ann/aggbug/282030.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ann/" target="_blank">冰是没有未来的，因为它的永恒</a> 2009-06-13 14:38 <a href="http://www.blogjava.net/ann/archive/2009/06/13/282030.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jetty starter 不检查 端口是否被占用</title><link>http://www.blogjava.net/ann/archive/2009/06/12/281846.html</link><dc:creator>冰是没有未来的，因为它的永恒</dc:creator><author>冰是没有未来的，因为它的永恒</author><pubDate>Fri, 12 Jun 2009 07:15:00 GMT</pubDate><guid>http://www.blogjava.net/ann/archive/2009/06/12/281846.html</guid><description><![CDATA[<font  face="Arial" size="3"><span  style="border-collapse: collapse; font-size: 12px;">
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&#160;RestaurantCenterJettyStarter&#160;{<br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&#160;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&#160;main(String[]&#160;args)&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&#160;start&#160;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&#160;System.currentTimeMillis();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000FF; ">try</span><span style="color: #000000; ">&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&#160;set&#160;up&#160;files&#160;and&#160;urls<br />
</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;URL[]&#160;urls;<br />
</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;urls&#160;=&#160;RefreshingURLClassLoader.getReloadableUrls();<br />
</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&#160;deal&#160;with&#160;classloader<br />
</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ClassLoader&#160;parent&#160;=&#160;Thread.currentThread().getContextClassLoader();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">//</span><span style="color: #008000; "><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&#160;eclipse&#160;will&#160;recompile&#160;the&#160;class.&#160;so&#160;I&#160;disable&#160;this<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">//</span><span style="color: #008000; "><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&#160;for&#160;(int&#160;i&#160;=&#160;0;&#160;i&#160;&lt;&#160;files.length;&#160;i++)&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&#160;File&#160;file&#160;=&#160;files[i];<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&#160;CompilingClassLoader&#160;ccl&#160;=&#160;new&#160;CompilingClassLoader(parent,<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&#160;file);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&#160;ccl.start();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&#160;parent&#160;=&#160;ccl;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&#160;}<br />
</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;URLClassLoader&#160;urlCloader&#160;=&#160;new&#160;RefreshingURLClassLoader(urls,&#160;parent);<br />
</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Thread.currentThread().setContextClassLoader(urlCloader);<br />
<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&#160;finally,&#160;start&#160;the&#160;server!</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Server&#160;server&#160;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&#160;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&#160;Server();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;SelectChannelConnector&#160;connector&#160;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&#160;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&#160;SelectChannelConnector();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;connector.setPort(</span><span style="color: #000000; ">8080</span><span style="color: #000000; ">);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;connector.setReuseAddress(</span><span style="color: #0000FF; ">false</span><span style="color: #000000; ">); //<span  style="font-size: 12px; ">这样就不能重复启动同一个 jetty 了.&#160;</span><span  style="border-collapse: separate; color: #003366; font-size: 17px; font-weight: bold; ">jetty starter 不检查 端口是否被占用</span><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;server.setConnectors(</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&#160;Connector[]&#160;{&#160;connector&#160;});<br />
<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&#160;WebAppContext&#160;wac4&#160;=&#160;new&#160;WebAppContext("./chatty",&#160;"/chatty");<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&#160;WebAppContext&#160;wac&#160;=&#160;new&#160;WebAppContext("/s100-webdata/photo",<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&#160;"/photo");<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&#160;WebAppContext&#160;wac2&#160;=&#160;new&#160;WebAppContext("/s100-webdata/photo",<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&#160;"/video");</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;WebAppContext&#160;wac3&#160;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&#160;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&#160;WebAppContext(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">./web</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&#160;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">/RestaurantCenter</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&#160;wac.setClassLoader(urlCloader);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&#160;wac2.setClassLoader(urlCloader);<br />
</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;wac3.setClassLoader(urlCloader);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&#160;wac4.setClassLoader(urlCloader);</span><span style="color: #008000; "><br />
</span><span style="color: #000000; "><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ContextHandlerCollection&#160;contexts&#160;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&#160;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&#160;ContextHandlerCollection();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;contexts.setHandlers(</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&#160;Handler[]&#160;{&#160;wac3,&#160;</span><span style="color: #008000; ">/*</span><span style="color: #008000; ">&#160;wac,&#160;wac2,wac4&#160;</span><span style="color: #008000; ">*/</span><span style="color: #000000; ">});&#160;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&#160;the<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&#160;order<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&#160;doesn't<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&#160;matter</span><span style="color: #008000; "><br />
</span><span style="color: #000000; "><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;HandlerCollection&#160;handlers&#160;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&#160;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&#160;HandlerCollection();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;handlers.setHandlers(</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&#160;Handler[]&#160;{&#160;contexts,&#160;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&#160;DefaultHandler()&#160;});<br />
<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;server.setHandler(handlers);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;server.start();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&#160;duration&#160;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&#160;System.currentTimeMillis()&#160;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&#160;start;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">启动&#160;Jetty&#160;服务器&#160;in&#160;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&#160;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&#160;duration&#160;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&#160;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">ms</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Web&#160;Service&#160;is&#160;@&#160;http://localhost:8080/RestaurantCenter/RestaurantWebService?wsdl</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&#160;);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}&#160;</span><span style="color: #0000FF; ">catch</span><span style="color: #000000; ">&#160;(Exception&#160;e)&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;e.printStackTrace();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
<br />
&#160;&#160;&#160;&#160;}<br />
}<br />
<br />
</span></div>
</span></font>
<img src ="http://www.blogjava.net/ann/aggbug/281846.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ann/" target="_blank">冰是没有未来的，因为它的永恒</a> 2009-06-12 15:15 <a href="http://www.blogjava.net/ann/archive/2009/06/12/281846.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>solrj的相关网址</title><link>http://www.blogjava.net/ann/archive/2009/06/03/279774.html</link><dc:creator>冰是没有未来的，因为它的永恒</dc:creator><author>冰是没有未来的，因为它的永恒</author><pubDate>Wed, 03 Jun 2009 03:55:00 GMT</pubDate><guid>http://www.blogjava.net/ann/archive/2009/06/03/279774.html</guid><description><![CDATA[<a href="http://mxsfengg.javaeye.com/?show_full=true">http://mxsfengg.javaeye.com/?show_full=true</a>
<div><a href="http://clayz.javaeye.com/?page=2&amp;show_full=true">http://clayz.javaeye.com/?page=2&amp;show_full=true</a></div>
<div><a href="http://mxsfengg.javaeye.com/blog/277913">http://mxsfengg.javaeye.com/blog/277913</a></div>
<div><a href="http://blog.chenlb.com/2009/04/solr-chinese-segment-mmseg4j-use-demo.html">http://blog.chenlb.com/2009/04/solr-chinese-segment-mmseg4j-use-demo.html</a></div>
<div><a href="http://blog.dic123.com/default.asp?CateID=7&amp;page=2">http://blog.dic123.com/default.asp?CateID=7&amp;page=2</a></div>
<div><a href="http://e-mats.org/2008/04/using-solrj-a-short-guide-to-getting-started-with-solrj/">http://e-mats.org/2008/04/using-solrj-a-short-guide-to-getting-started-with-solrj/</a></div>
<div><br />
</div>
<div><br />
</div>
<img src ="http://www.blogjava.net/ann/aggbug/279774.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ann/" target="_blank">冰是没有未来的，因为它的永恒</a> 2009-06-03 11:55 <a href="http://www.blogjava.net/ann/archive/2009/06/03/279774.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Google geo API</title><link>http://www.blogjava.net/ann/archive/2009/06/03/279748.html</link><dc:creator>冰是没有未来的，因为它的永恒</dc:creator><author>冰是没有未来的，因为它的永恒</author><pubDate>Wed, 03 Jun 2009 01:57:00 GMT</pubDate><guid>http://www.blogjava.net/ann/archive/2009/06/03/279748.html</guid><description><![CDATA[<span  style="font-family: Arial; font-size: 12px; ">http://ditu.google.com/maps/geo?output=json&amp;oe=utf-8&amp;q=要查的地址<br />
<br />
/**<br />
&#160;* a positive response:<br />
&#160;*&#160;<br />
&#160;*&#160;<br />
&#160;{<br />
&#160;&#160;&#160; "name": "上海金桥开发区",<br />
&#160;&#160;&#160; "Status": {<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; "code": 200,<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; "request": "geocode"<br />
&#160;&#160;&#160; },<br />
&#160;&#160;&#160; "Placemark": [<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; {<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; "id": "p1",<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; "address": "中国上海市浦东新区金桥开发\r\r\n区",<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; "AddressDetails": {<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; "Country": {<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; "CountryNameCode": "CN",<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; "CountryName": "中国",<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; "Locality": {<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; "LocalityName": "上海\r\r\n市",<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; "DependentLocality": {<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; "DependentLocalityName": "浦东新区",<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; "AddressLine": [<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; "金桥开发区"<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ]<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; },<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; "Accuracy": 9<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; },<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; "Point": {<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; "coordinates": [<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 121.588633,<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 31.240829,<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 0<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ]<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; },<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; {<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; "id": "p2",<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; "address": "中国上海市浦东新区浦东金桥开发\r\r\n区",<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; "AddressDetails": {<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; "Country": {<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; "CountryNameCode": "CN",<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; "CountryName": "中国",<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; "Locality": {<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; "LocalityName": "上海\r\r\n市",<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; "DependentLocality": {<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; "DependentLocalityName": "浦东新区",<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; "AddressLine": [<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; "浦东金桥开发区"<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ]<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; },<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; "Accuracy": 9<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; },<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; "Point": {<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; "coordinates": [<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 121.588633,<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 31.240829,<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 0<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ]<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; }<br />
&#160;&#160;&#160; ]<br />
}<br />
<br />
a negetive response:<br />
<br />
{<br />
&#160;&#160;&#160; "name": "东西打点",<br />
&#160;&#160;&#160; "Status": {<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; "code": 602,<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; "request": "geocode"<br />
&#160;&#160;&#160; }<br />
}<br />
</span>
<img src ="http://www.blogjava.net/ann/aggbug/279748.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ann/" target="_blank">冰是没有未来的，因为它的永恒</a> 2009-06-03 09:57 <a href="http://www.blogjava.net/ann/archive/2009/06/03/279748.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>成批转换java 文件的编码</title><link>http://www.blogjava.net/ann/archive/2009/06/03/279745.html</link><dc:creator>冰是没有未来的，因为它的永恒</dc:creator><author>冰是没有未来的，因为它的永恒</author><pubDate>Wed, 03 Jun 2009 01:52:00 GMT</pubDate><guid>http://www.blogjava.net/ann/archive/2009/06/03/279745.html</guid><description><![CDATA[<span  style="font-family: Arial; font-size: 12px; ">
<table xmlns="http://www.w3.org/1999/xhtml" id="sites-content-table5" class="sites-layout-hbox" cellspacing="0" style="width: 100%; table-layout: fixed; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">
    <tbody>
        <tr>
            <td id="col05" width="100%;" style="vertical-align: top; ">
            <div id="sites-content05" class="goog-ws-content-wrapper sites-clear" style="background-color: transparent; ">
            <div dir="ltr" style="background-color: transparent; ">netbeans项目中缺省使用 utf-8. 这要求所有的源文件使用 utf8 编码有些源文件是从别的文件系统中拷贝出来, 可能使用别的编码方式, 例如 iso-8859-1. 如果其中有 Ascii 扩展字符, 则 编译的时候会抱怨有 并不认识的 unicode 编码.&#160; (ummapped unicode characters)<br />
            <br />
            解决方法: 使用 GNU iconv 工具进行批处理转换.&#160;<br />
            <br />
            - iconv 在 cygwin 中有发布, 需要 iconv2 包. 也有单独的 windows 版本.&#160;<br />
            <br />
            - 在 一个临时文件目录两种建立和源目录相同的目录结构: 拷贝过去以后, find . -name "*.*" | xargs rm,&#160; find . -name ".svn" | xargs rm -R<br />
            - 在源文件目录中:<span style="font-family: 'courier new', monospace; ">&#160;$ for a in `find . -name "*.java"`; do iconv -f iso-8859-1 -t utf-8 &lt;"$a" > /tmp/"$a" ; done</span><br />
            <br />
            源文件如果是 GBK 编码, 则 -f gbk<br />
            <br />
            - 然后拷贝过来替换原有的文件.&#160;</div>
            </div>
            </td>
        </tr>
    </tbody>
</table>
</span>
<img src ="http://www.blogjava.net/ann/aggbug/279745.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ann/" target="_blank">冰是没有未来的，因为它的永恒</a> 2009-06-03 09:52 <a href="http://www.blogjava.net/ann/archive/2009/06/03/279745.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>标记javabean 属性不要映射到 xml</title><link>http://www.blogjava.net/ann/archive/2009/06/03/279742.html</link><dc:creator>冰是没有未来的，因为它的永恒</dc:creator><author>冰是没有未来的，因为它的永恒</author><pubDate>Wed, 03 Jun 2009 01:44:00 GMT</pubDate><guid>http://www.blogjava.net/ann/archive/2009/06/03/279742.html</guid><description><![CDATA[<span  style="font-family: Arial; font-size: 12px; ">
<table xmlns="http://www.w3.org/1999/xhtml" id="sites-content-table" class="sites-layout-hbox" cellspacing="0" style="width: 100%; table-layout: fixed; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">
    <tbody>
        <tr>
            <td id="col0" width="100%;" style="vertical-align: top; ">
            <div id="sites-content0" class="sites-canvas-main-content goog-ws-pagetype-blurb sites-clear" style="padding-top: 0px; padding-right: 10px; padding-bottom: 0px; padding-left: 10px; ">
            <div dir="ltr">JTS Geometry 对象不能被 JAXB 映射成xml.&#160;<br />
            <br />
            可使用一下的方法避免指定的 java bean property 不被 xml 话<br />
            <br />
            在 bean 的class级别:&#160;<br />
            <br />
            <strong>@XmlAccessorType(XmlAccessType.FIELD)</strong>&#160;// for jaxb to ananlyze the object<br />
            <br />
            然后在 field 上面<br />
            <br />
            <strong>@XmlTransient</strong><br />
            <br />
            <br />
            如果没有&#160;<strong>XmlAccessorType</strong>, 则需要把 @XmlTransient 放在getter 上面<strong>.</strong></div>
            </div>
            </td>
        </tr>
    </tbody>
</table>
</span>
<img src ="http://www.blogjava.net/ann/aggbug/279742.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ann/" target="_blank">冰是没有未来的，因为它的永恒</a> 2009-06-03 09:44 <a href="http://www.blogjava.net/ann/archive/2009/06/03/279742.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>visualparadigm  实体和数据库的映射</title><link>http://www.blogjava.net/ann/archive/2009/05/22/277243.html</link><dc:creator>冰是没有未来的，因为它的永恒</dc:creator><author>冰是没有未来的，因为它的永恒</author><pubDate>Fri, 22 May 2009 02:24:00 GMT</pubDate><guid>http://www.blogjava.net/ann/archive/2009/05/22/277243.html</guid><description><![CDATA[<font  color="#002C99">
<div>数据库映射为实体：<span  style="color: #000000; "><a href="http://resources.visual-paradigm.com/index.php/dbm-tut/42-tut/129-db-reverse-sc.html" style="color: #002c99; text-decoration: none; ">http://resources.visual-paradigm.com/index.php/dbm-tut/42-tut/129-db-reverse-sc.htm</a>l</span></div>
<div><font  color="#000000">实体映射为数据库：<a href="http://resources.visual-paradigm.com/index.php/dbm-tut/42-tut/129-db-reverse-sc.html" style="color: #002c99; text-decoration: none; ">http://resources.visual-paradigm.com/index.php/dbm-tut/42-tut/129-db-reverse-sc.htm</a>l</font></div>
</font>
<div><font  color="#002C99"><br />
</font></div>
<img src ="http://www.blogjava.net/ann/aggbug/277243.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ann/" target="_blank">冰是没有未来的，因为它的永恒</a> 2009-05-22 10:24 <a href="http://www.blogjava.net/ann/archive/2009/05/22/277243.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>log4j 发送到消息到 jms server （ openMQ）</title><link>http://www.blogjava.net/ann/archive/2009/05/14/270611.html</link><dc:creator>冰是没有未来的，因为它的永恒</dc:creator><author>冰是没有未来的，因为它的永恒</author><pubDate>Thu, 14 May 2009 06:45:00 GMT</pubDate><guid>http://www.blogjava.net/ann/archive/2009/05/14/270611.html</guid><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1. log4j的配置<br>  <br>### direct log messages to stdout ###<br>log4j.appender.stdout=org.apache.log4j.ConsoleAppender<br>log4j.appender.stdout.Target=System.out<br>log4j.appender.stdout.layout=org.apache.log4j.PatternLayout<br>log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n<br><br>### direct messages to file hibernate.log ###<br>#log4j.appender.file=org.apache.log4j.FileAppender<br>#log4j.appender.file.File=hibernate.log<br>#log4j.appender.file.layout=or&nbsp;&nbsp;<a href='http://www.blogjava.net/ann/archive/2009/05/14/270611.html'>阅读全文</a><img src ="http://www.blogjava.net/ann/aggbug/270611.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ann/" target="_blank">冰是没有未来的，因为它的永恒</a> 2009-05-14 14:45 <a href="http://www.blogjava.net/ann/archive/2009/05/14/270611.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>通过集成身份验证进行连接 sqlserver</title><link>http://www.blogjava.net/ann/archive/2009/05/11/270047.html</link><dc:creator>冰是没有未来的，因为它的永恒</dc:creator><author>冰是没有未来的，因为它的永恒</author><pubDate>Mon, 11 May 2009 06:44:00 GMT</pubDate><guid>http://www.blogjava.net/ann/archive/2009/05/11/270047.html</guid><description><![CDATA[&nbsp;<br />
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JDBC 驱动程序支持通过 integratedSecurity 连接字符串属性在 Windows 操作系统上使用&#8220;类型
2&#8221;集成身份验证。</p>
<p>&nbsp; 注意:如果您运行 32 位的 Java 虚拟机 (JVM)，则使用 x86 文件夹中的 sqljdbc_auth.dll 文件，即使操作系统是
x64 版本也不例外。如果您在 x64 处理器上运行 64 位 JVM，则使用 x64 文件夹中的 sqljdbc_auth.dll
文件。如果您在 Itanium 处理器上运行 64 位 JVM，则使用 IA64 文件夹中的 sqljdbc_auth.dll 文件。</p>
<p><br />
</p>
&nbsp;例子：<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1. java代码：<br />
&nbsp;&nbsp;&nbsp; <br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;DBConnect&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">try</span><span style="color: #000000;">&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class.forName(</span><span style="color: #000000;">"</span><span style="color: #000000;">com.microsoft.sqlserver.jdbc.SQLServerDriver</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">&nbsp;(Exception&nbsp;e)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&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;testCon()&nbsp;</span><span style="color: #0000ff;">throws</span><span style="color: #000000;">&nbsp;SQLException{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Connection&nbsp;conn&nbsp;&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">try</span><span style="color: #000000;">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn&nbsp;&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;DriverManager.getConnection(</span><span style="color: #000000;">"</span><span style="color: #000000;">jdbc:sqlserver://localhost:1433;integratedSecurity=true;DatabaseName=test</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;conn&nbsp;is&nbsp;ok&nbsp;!</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">&nbsp;(Exception&nbsp;e)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="color: #0000ff;">finally</span><span style="color: #000000;">{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(conn&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">)conn.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&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;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DBConnect&nbsp;dbConnect&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;&nbsp;DBConnect();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">try</span><span style="color: #000000;">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dbConnect.testCon();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">&nbsp;(SQLException&nbsp;ex)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ex.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
}</span></div>
<br />
2. 设置sqljdbc_auth.dll <br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 请将 sqljdbc_auth.dll 文件复制计算机中 Windows 系统路径下的 JDBC
驱动程序安装目录中。sqljdbc_auth.dll 文件的安装位置如下：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;<em>安装目录</em>&gt;\sqljdbc_&lt;<em>版本</em>&gt;\&lt;<em>语言</em>&gt;\auth\</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 也可以通过设置 java.libary.path 系统属性来指定 sqljdbc_auth.dll 的目录，例如，如果 JDBC 驱动程序安装在默认目录中，您可以在 Java 应用程序启动时使用以下虚拟机 (VM) 参数来指定 DLL 的位置：</p>
<p><tt><font face="新宋体">-Djava.library.path=C:\Microsoft SQL Server 2005 JDBC Driver\sqljdbc_&lt;version&gt;\enu\auth\x86</font></tt></p>
<p><br />
</p>
<p><tt><font face="新宋体">如果把你的java程序设置为wins 服务可以参照http://www.blogjava.net/ann/articles/270043.html<br />
</font></tt></p>
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
<p>&nbsp;</p>
<img src ="http://www.blogjava.net/ann/aggbug/270047.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ann/" target="_blank">冰是没有未来的，因为它的永恒</a> 2009-05-11 14:44 <a href="http://www.blogjava.net/ann/archive/2009/05/11/270047.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>glassfish 的jvm设置</title><link>http://www.blogjava.net/ann/archive/2009/05/06/269170.html</link><dc:creator>冰是没有未来的，因为它的永恒</dc:creator><author>冰是没有未来的，因为它的永恒</author><pubDate>Wed, 06 May 2009 02:09:00 GMT</pubDate><guid>http://www.blogjava.net/ann/archive/2009/05/06/269170.html</guid><description><![CDATA[JVM Options:&nbsp; -server -XX:+AggressiveHeap <br />
&nbsp;&nbsp;&nbsp; -Xmx512m -Xms512m -Xmn256m
-Xss128k <br />
&nbsp;&nbsp;&nbsp; -XX:PermSize=256m <br />
&nbsp;&nbsp;&nbsp; -XX:+DisableExplicitGC <br />
&nbsp;&nbsp;&nbsp;
-XX:ParallelGCThreads=24 <br />
&nbsp;&nbsp;&nbsp; -XX:LargePageSizeInBytes=256m <br />
&nbsp;&nbsp;&nbsp;
-XX:+UseParallelOldGC <br />
&nbsp;&nbsp;&nbsp; -XX:+AggressiveOpts <br />
&nbsp;&nbsp;&nbsp;
-DAllowManagedFieldsInDefaultFetchGroup=true <br />
&nbsp;&nbsp;&nbsp;
-DAllowMediatedWriteInDefaultFetchGroup=true <br />
&nbsp;&nbsp;&nbsp; -XX:-UseBiasedLocking
<br />
&nbsp;&nbsp;&nbsp; -Dcom.sun.ejb.containers.readonly.relative.refresh.mode=true <br />
&nbsp;&nbsp;&nbsp;
-Dcom.sun.jts.dblogging.insertquery=insert into <br />
txn_log_table_0 values ( ? ,
? , ? ) <br />
&nbsp;&nbsp;&nbsp; -Dcom.sun.jts.dblogging.deletequery=delete from
<br />
txn_log_table_0 where localtid = ? and servername = ? <br />
&nbsp;&nbsp;&nbsp;
-Dcom.sun.jdo.spi.persistence.support.sqlstore. <br />
MULTILEVEL_PREFETCH=true
<br />
<br />
<br />
上述段落中&#8220;-XX&#8221;的参数是SUN JVM的扩展选项，其中以下的这些都是和垃圾回收（GC）有关： <br />
<br />
&nbsp; -XX:PermSize=256m
<br />
&nbsp; -XX:+DisableExplicitGC <br />
&nbsp; -XX:ParallelGCThreads=24 <br />
&nbsp;
-XX:+UseParallelOldGC <br />
-XX:+AggressiveHeap <br />
<br />
下面这个选项是选择大的内存页面:
-XX:LargePageSizeInBytes=256m
<br />
<br />
"-XX:+AggressiveOpts"是一些试验性优化参数，&#8220;-XX:-UseBiasedLocking&#8221;是非竞争性的同步选项。
<br />
<br />
而选项&#8220;&nbsp;&nbsp;&nbsp; -Xmx512m -Xms512m -Xmn256m
-Xss128k &#8221;则是初始堆栈的内存值，注意-Xmx和-Xms的值是一样的，这样系统性能会较平稳些。 <br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/ann/aggbug/269170.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ann/" target="_blank">冰是没有未来的，因为它的永恒</a> 2009-05-06 10:09 <a href="http://www.blogjava.net/ann/archive/2009/05/06/269170.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>galssfish做成wins 服务</title><link>http://www.blogjava.net/ann/archive/2009/04/14/265454.html</link><dc:creator>冰是没有未来的，因为它的永恒</dc:creator><author>冰是没有未来的，因为它的永恒</author><pubDate>Tue, 14 Apr 2009 03:39:00 GMT</pubDate><guid>http://www.blogjava.net/ann/archive/2009/04/14/265454.html</guid><description><![CDATA[1. Ryan de Laplante 提供了一个简单的命令行工具，通过它可以轻而易举地创建 Windows 服务。下载
GlassfishSvc.jar（<a href="/Files/ann/GlassfishSvc.rar">http://www.blogjava.net/Files/ann/GlassfishSvc.rar</a>），并将其复制到 Glassfish 安装路径（例如 e:\Program
Files\Sun\glassfish，然后从命令行运行以下命令： java -jar GlassfishSvc.jar -i
<br />
2.  防止 Windows 用户注销
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;打开 &lt;GF_HOME&gt;\domains\domain1\config\domain.xml
文件，并查找含有大量 &lt;jvm-options&gt;某个 JVM 选项&lt;/jvm-options&gt;
行的部分。在该部分中添加以下行： <br />
&nbsp;&nbsp;&nbsp;&lt;jvm-options&gt;-Xrs&lt;/jvm-options&gt;
<br />
&nbsp;注意: 在某些 Windows 2003 Server 安装中将 -Xrs jvm-option 添加到 domain.xml
无法解决此问题。所报告的解决方案是将 jvm 选项添加到 &lt;GF_HOME&gt;\lib\processLauncher.xml：
<br />
&nbsp;&nbsp;&nbsp;&lt;process name="as9-server"&gt;
<br />
&nbsp;&nbsp;&nbsp;...
<br />
&nbsp;&nbsp;&nbsp;&lt;sysproperty key="-Xrs"/&gt;
<br />
&nbsp;&nbsp;&nbsp;...<br />
<br />
<img src ="http://www.blogjava.net/ann/aggbug/265454.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ann/" target="_blank">冰是没有未来的，因为它的永恒</a> 2009-04-14 11:39 <a href="http://www.blogjava.net/ann/archive/2009/04/14/265454.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring quartz（定时任务例子）</title><link>http://www.blogjava.net/ann/archive/2009/03/23/261466.html</link><dc:creator>冰是没有未来的，因为它的永恒</dc:creator><author>冰是没有未来的，因为它的永恒</author><pubDate>Mon, 23 Mar 2009 02:56:00 GMT</pubDate><guid>http://www.blogjava.net/ann/archive/2009/03/23/261466.html</guid><description><![CDATA[一.Quartz介绍 <br />
&nbsp;&nbsp;&nbsp;&nbsp; Quartz是一个作业调度系统（a job scheduling system），负责在约定的时间到达时执行（或通知）其他软件控制。是一个Java的定时任务框架，使用它可以方便的实现计划任务，即在某个时间或每隔一定时间运行一个任务。Quartz的核心是Job/JobDetail,Trigger和Scheduler。<br />
<br />
&nbsp;&nbsp;&nbsp; 1.Job/JobDetail<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Job/JobDetail=既要执行的任务，可以通过实现Job（interface）中的excute方法来指定任务的具体操作。 他描述了一个任务具体的信息，比如名称，组名等等。JobDetail对象是在Quartz的客户端（我们的程序）在Job被关联加入到Scheduler时创建的，JobDetail包含了Job的各种属性值和&nbsp;&nbsp; JobDataMap，JobDataMap中存放了与之相关的Job类实例的状态信息。<br />
<br />
&nbsp;&nbsp;&nbsp; 2.Trigger<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用于控制一组Job的触发，包裹SimmperTrigger和CronTrigger，后者支持一种描述触发事件和间隔的表达式语言。Quartz有个很好的想法就是分离了任务和任务执行的条件。Trigger就是控制任务执行条件的类，当Trigger认为执行条件满足的时刻，Trigger会通知相关的Job去执行。分离的好处是：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1).你可以为某个Job关联多个Trigger，其中任何一个条件满足都可以触发job执行，这样可以完成一些组合的高级触发条件<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2).当Trigger失效后（比如：一个永远都不能满足的条件），你不必去声明一个新的job，代替的是你可以为job关联一个新的Trigger让job可以继续执行。<br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; 3.Scheduler是控制和管理触发器的启动和终止。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 使用Scheduler前必须实例化Scheduler，需要由SchedulerFactory类来创建Scheduler,Factory的实例可以通过在JNDI存储中的Factory的序列化的方式获取，实例化Factory后直接使用该实例很容易。如下：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public class WangyouQuartzListener extends QuartzInitializerListener {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public&nbsp; static&nbsp; SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public WangyouQuartzListener() {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; super();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; public void contextInitialized(ServletContextEvent event) {<br />
&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; super.contextInitialized(event);<br />
&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; String factoryKey = event.getServletContext().getInitParameter("servlet-context-factory-key");<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (factoryKey == null) {<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; factoryKey = QUARTZ_FACTORY_KEY;<br />
&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; StdSchedulerFactory factory = (StdSchedulerFactory) event.getServletContext().getAttribute(factoryKey);<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; try {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; QuartzScheduleHolder.getInstance().setScheduler(factory.getScheduler());<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; //per 2 hours add friends<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; Trigger trigger =&nbsp; TriggerUtils.makeHourlyTrigger(24);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; //Trigger trigger =&nbsp; TriggerUtils.makeSecondlyTrigger(60);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; trigger.setName(AddNewUserFriendJobDetail.JOB_NAME);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; trigger.setStartTime(this.getBeforeAfterDate(1,-13));<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; QuartzScheduleHolder.getInstance().getScheduler().scheduleJob(new AddNewUserFriendJobDetail(),trigger);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //把job和Trigger关联，这样当Trigger认为应该触发的时候就会调用（实际上是Scheduler调用）job.execute方法了。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; //per 3 day send mail and leave message<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; Trigger trigger2 =&nbsp; TriggerUtils.makeHourlyTrigger(24*3);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; trigger2.setStartTime(this.getBeforeAfterDate(1,-12));<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; trigger2.setName(LeaveMessageNewUserJobDetail.JOB_NAME);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; QuartzScheduleHolder.getInstance().getScheduler().scheduleJob(new LeaveMessageNewUserJobDetail(),trigger2);<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; // per 6&nbsp; recommend video<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; Trigger trigger3 =&nbsp; TriggerUtils.makeHourlyTrigger(24*7);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; trigger3.setName(RecommendVideoNewUserJobDetail.JOB_NAME);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; trigger3.setStartTime(this.getBeforeAfterDate(2,-11));<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; QuartzScheduleHolder.getInstance().getScheduler().scheduleJob(new RecommendVideoNewUserJobDetail(),trigger3);<br />
<br />
&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; QuartzScheduleHolder.getInstance().getScheduler().start();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; } catch (Exception e) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void contextDestroyed(ServletContextEvent event) {<br />
&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; super.contextDestroyed(event);<br />
&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; QuartzScheduleHolder.getInstance().setScheduler(null);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; private Date getBeforeAfterDate( int day,int hour){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Calendar&nbsp;&nbsp; cal&nbsp;&nbsp; =&nbsp;&nbsp; Calendar.getInstance();<br />
&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cal.add(Calendar.DATE,day);<br />
&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp; cal.add(Calendar.HOUR,hour);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return cal.getTime(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
二。Spring Quartz<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Spring的scheduling。quartz包中对Quartz的框架进行封装，使得开发时不用写任何Quartz和Spring的代码就可以实现定时任务。Spring通过JobDetailBean，MethodInvokingJobDetailFactoryBean实现Job的定义，后者更加使用，只需指定要运行的类，和该类中运行的方法即可，Spring将自动生成符合Quartz要求的JobDetail。例如：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.jobDetail <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public class SayHelloJob {<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private static&nbsp; DateFormat dateFormat =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private String message;<br />
<br />
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; public String getMessage() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return message;<br />
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void setMessage(String message) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; this.message = message;<br />
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void sayHello(){<br />
&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; Date date = new Date();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; System.out.println(dateFormat.format(date)+" :"+this.getMessage() );<br />
&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; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.spring的配置文件：quartzbean.xml<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;beans xmlns="http://www.springframework.org/schema/beans"<br />
&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"<br />
&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;bean name="sayHelloJob" class="com.fg114.takeout.job.SayHelloJob"&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;property name="message" value="start .............." /&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &lt;/bean&gt;<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &lt;bean name="sayHelloDetailBean" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"&gt;<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; &lt;property name="targetObject" ref="sayHelloJob" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;property name="targetMethod" value="sayHello"/&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/bean&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;bean name="simpleTriggerBean" class="org.springframework.scheduling.quartz.SimpleTriggerBean"&gt;<br />
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &lt;!--这里定义定时任务的对象的位置--&gt;<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; &lt;property name="jobDetail" ref="sayHelloDetailBean"/&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &lt;!--这里定义每六秒钟程序执行一次--&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &lt;property name=""&gt;&lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;property name="repeatInterval" value="6000"/&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &lt;!--这里定义程序启动两秒钟后开始执行--&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &lt;property name="startDelay" value="2000"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/bean&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;! --&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 启动任务&nbsp;&nbsp;&nbsp; --&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;bean name="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;property name="triggers"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;list&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &lt;ref bean="simpleTriggerBean"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &lt;/list&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/bean&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/beans&gt;<br />
3.web.xml ：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 加入<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;listener&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;listener-class&gt;org.springframework.web.context.ContextLoaderListener&lt;/listener-class&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &lt;/listener&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 注意：common-collections.jar 版本布不能是2.1版本的<br />
<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
<img src ="http://www.blogjava.net/ann/aggbug/261466.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ann/" target="_blank">冰是没有未来的，因为它的永恒</a> 2009-03-23 10:56 <a href="http://www.blogjava.net/ann/archive/2009/03/23/261466.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring 事务管理（Transaction） 例子</title><link>http://www.blogjava.net/ann/archive/2009/03/19/260827.html</link><dc:creator>冰是没有未来的，因为它的永恒</dc:creator><author>冰是没有未来的，因为它的永恒</author><pubDate>Thu, 19 Mar 2009 08:57:00 GMT</pubDate><guid>http://www.blogjava.net/ann/archive/2009/03/19/260827.html</guid><description><![CDATA[&nbsp; &nbsp; <br />
&nbsp; &nbsp; 传统上， J2EE开发者有两种事务管理选择，全局和本地事务。Spring框架对事务管理的支持极大地改变传统上认为J2EE应用需要应用服务器。这种改变不单是仅仅为了通过EJB来使用生命式事务而使用应用服务器。事实上，即使你的应用服务器有强大的JTA功能，Spring框架的声明式事务提供了比EJB CMT（声明式事务）更强大，更高效的编程模型。一般来说，只有支持多个事务资源，才会需要应用服务器的JTA功能，而大多数应用不需要能够处理跨多种资源。最重要的一点，使用Spring，你可以选择何时把你的应用迁移到全功能的应用服务器。使用Spring不需要像以前一样用编码实现本地事务代替EJB CMT或JTA，现在只需要改配置问价，而不必改代码。<br />
<br />
一. Spring事务管理<br />
<br />
&nbsp; 1. Spring 编程式事务管理（programmatic transaction management）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
<pre class="code-java">   DefaultTransactionDefinition def = <span class="code-keyword">new</span> DefaultTransactionDefinition(); <br />
TransactionStatus status = transactionManager.getTransaction(def); <br />
<span class="code-keyword">   try</span> { <br />
<span class="Apple-tab-span" style="white-space:pre">	</span>JdbcTemplate jdbcTemplate = <span class="code-keyword">new</span> JdbcTemplate(dataSource); <br />
<span class="Apple-tab-span" style="white-space:pre">	</span>jdbcTemplate.update(<span class="code-quote">"INSERT INTO USER VALUES('Spring008', 'caterpillar', 'M', 29)"</span>); <br />
<span class="Apple-tab-span" style="white-space:pre">	</span>jdbcTemplate.update(<span class="code-quote">"INSERT INTO USER VALUES('Spring009', 'momor', 'F', 26)"</span>); <br />
<span class="Apple-tab-span" style="white-space:pre">	</span>jdbcTemplate.update(<span class="code-quote">"INSERT INTO USER VALUES('Spring010, 'beckyday', 'F', 35)"</span>); <br />
} <span class="code-keyword">catch</span> (DataAccessException ex) { <br />
<span class="Apple-tab-span" style="white-space:pre">	</span>transactionManager.rollback(status); <span class="code-comment">// 也可以執行status.setRollbackOnly(); <br />
</span><span class="code-keyword"><span class="Apple-tab-span" style="white-space:pre">	</span>throw</span> ex;&nbsp;</pre>
<pre class="code-java">    }
transactionManager.commit(status);</pre>
<pre class="code-java">
见：http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=2398<br />
<font  face="'Times New Roman'"><span  style="white-space: normal;"><font  face="monospace"><span  style="white-space: pre;"><br />
</span></font></span></font></pre>
&nbsp; 2. Spring宣告式事务管理（declarative transaction management）主要是在spring的配置文件中设置<br />
<pre class="code-java">    &lt;bean id=<span class="code-quote">"userDAOProxy"</span> class=<span class="code-quote">"org.springframework.transaction.interceptor.TransactionProxyFactoryBean"</span>&gt; <br />
<span class="Apple-tab-span" style="white-space:pre">	</span>&lt;property name=<span class="code-quote">"transactionManager"</span>&gt;
<span class="Apple-tab-span" style="white-space:pre">		</span>&lt;ref bean=<span class="code-quote">"transactionManager"</span>/&gt;
<span class="Apple-tab-span" style="white-space:pre">	</span>&lt;/property&gt;
<span class="Apple-tab-span" style="white-space:pre">	</span>&lt;property name=<span class="code-quote">"target"</span>&gt; <br />
<span class="Apple-tab-span" style="white-space:pre">		</span>&lt;ref bean=<span class="code-quote">"userDAO"</span>/&gt; <br />
<span class="Apple-tab-span" style="white-space:pre">	</span>&lt;/property&gt; <br />
<span class="Apple-tab-span" style="white-space:pre">	</span>&lt;property name=<span class="code-quote">"transactionAttributes"</span>&gt; <br />
<span class="Apple-tab-span" style="white-space:pre">		</span>&lt;props&gt; <br />
<span class="Apple-tab-span" style="white-space:pre">			</span>&lt;prop key=<span class="code-quote">"insert*"</span>&gt;PROPAGATION_REQUIRED&lt;/prop&gt; <br />
<span class="Apple-tab-span" style="white-space:pre">		</span>&lt;/props&gt; <br />
<span class="Apple-tab-span" style="white-space:pre">	</span>&lt;/property&gt;        <br />
&lt;/bean&gt; <br />
见：http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=2402<br />
二. Spring的@Transcation的例子<br />
1. class 中<br />
<span class="Apple-tab-span" style="white-space:pre">	</span>@Component //注释就可以将该类定义了 Spring 容器中的 Bean<br />
<span class="Apple-tab-span" style="white-space:pre">	</span>public Class UserDaoImpl implements IUserDao {<br />
<span class="Apple-tab-span" style="white-space:pre">		</span>@Override<br />
<span class="Apple-tab-span" style="white-space:pre">		</span>//标志updateUsers（）为Transactional     <br />
<span class="Apple-tab-span" style="white-space:pre">		</span>@Transactional(<br />
<span class="Apple-tab-span" style="white-space:pre">			</span>propagation = Propagation.REQUIRED,<br />
<span class="Apple-tab-span" style="white-space:pre">			</span>isolation = Isolation.DEFAULT,<br />
<span class="Apple-tab-span" style="white-space:pre">			</span>rollbackFor = Exception.class<br />
<span class="Apple-tab-span" style="white-space:pre">		</span>)
<span class="Apple-tab-span" style="white-space:pre">		</span>public void updateUsers(List&lt;User&gt; users){<br />
<span class="Apple-tab-span" style="white-space:pre">			</span>for（User user ：users）{<br />
<span class="Apple-tab-span" style="white-space:pre">				</span>//逻辑<br />
<span class="Apple-tab-span" style="white-space:pre">			</span>}<br />
<span class="Apple-tab-span" style="white-space:pre">		</span>}<br />
<span class="Apple-tab-span" style="white-space:pre">	</span>}<br />
注意： 事务的属性和基本概念<br />
Required : 如果在一个事务中调用，就将该方法加到此事务中，如果没有启动事务，就创建新事务<br />
RequiredNew ： 不管当前有没有事务，都启动新事务，如果有，会被挂起，直到此方法结束<br />
NotSupported ： 不能在事务中执行此方法，如果有事务，会被挂起，直到此方法结束  <br />
Supports ： 如果有当前事务，此方法回加到当前事务，如果没有，容器不会启动新事务<br />
Mandatory ： 必须在事务中执行此方法，否则会抛出异常 ： TransactionRequiredException <br />
Never ： 必须不在事务中调用此方法，否则抛出RemoteException(远程调用)或EJBException(本地调用)</pre>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.spring配置文件加入：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .....................<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;tx:annotation-driven/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .....................<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 注意： webSerivces 是不支持事务的，如果使用事务，必须在下层的Object中实现，例如在Service层或者是Dao层实现。<br />
<pre class="code-java">另外： <br />
http://www.ibm.com/developerworks/cn/java/j-ts1.html<br />
http://www.javaworld.com.tw/confluence/display/opensrc/Spring<br />
http://www.redsaga.com/spring_ref/2.0/html/transaction.html#transaction-declarative <br />
</pre>
<img src ="http://www.blogjava.net/ann/aggbug/260827.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ann/" target="_blank">冰是没有未来的，因为它的永恒</a> 2009-03-19 16:57 <a href="http://www.blogjava.net/ann/archive/2009/03/19/260827.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WebsService学习之一</title><link>http://www.blogjava.net/ann/archive/2009/03/17/260295.html</link><dc:creator>冰是没有未来的，因为它的永恒</dc:creator><author>冰是没有未来的，因为它的永恒</author><pubDate>Tue, 17 Mar 2009 09:24:00 GMT</pubDate><guid>http://www.blogjava.net/ann/archive/2009/03/17/260295.html</guid><description><![CDATA[&nbsp;&nbsp; <br />
一 . WebService 概念<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WebSerivce
是通过一系列标准和协议来保证程序之间动态连接，即分布式服务组件。本质上就是要以标准话的形式实现企业内外部各个不同服务系统之间的互调或集成。其中最
基本的协议包裹：SOAP（WebService之间的基本通信协&nbsp;&nbsp; 议），WSDL（WebService描述语言，它定义了WebSerivce
是做什么的，怎么做和查询的信息），UDDI（用于集中存放和查找WSDL描述文件，起着目录服务器的作用）。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1. SOAP. Simple Object Access Protocol<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SOAP是消息传递的协议，它规定了Web Serivces之间是怎样传递消息的。简单的说，SOAP规定了：<br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1）. 传递的消息格式是XML。使Web Services 可以在任何平台,任何语言实现。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2）. 远程对象方法调用的格式。 规定了怎样表示被调用对象及调用的方法名和参数类型。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3）. 参数类型和XML格式之间的映射，被调用的方法有时候需要传递一个复杂的参数，例如，一个Customer对象，怎样用XML来表示一个对象参数，也是SOAP所定义的范围<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 例如：&lt;soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:web="................../"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:web="..................."&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;soapenv:Header/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;soapenv:Body&gt;<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; &lt;web:addNewCustomer&gt;<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; &lt;!--Optional:--&gt;<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; &lt;arg0&gt;<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; &lt;id&gt;?&lt;/id&gt;<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; &lt;!--Optional:--&gt;<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; &lt;lastUpdatedDate&gt;?&lt;/lastUpdatedDate&gt;<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; &lt;!--Optional:--&gt;<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; &lt;name&gt;?&lt;/name&gt;<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; &lt;/arg0&gt;<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; &lt;/web:addNewCustomer&gt;<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; &lt;/soapenv:Body&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/soapenv:Envelope&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4）. 异常处理以及其他的相关信息<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2. WSDL.Web Services Description Language<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 是Web
Services的定义语言
。是基于XML格式的关于WEB服务的描述语言，主要的目的在于为别人提供你实现某种服务的有关内容，也即为了让别的程序调用，你必须告诉大家你的服务接
口，例如服务名称，服务所在的机器名称，监听端口，传递参数的类型，个数，顺序等等，这样别人才能调用
你的服务。使用者使用者通过这个wsdl文档，创建想用的SOAP请求信息，通过HTTP传递web Service 提供者，Web
服务器在完成服务请求之后，将SOAP返回消息传回请求者，服务请求者在根据wsdl文档将SOAP消息解析成自己能够理解的内容。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 例如： CustomerService.wsdl ,CustomerService_schema1.xsd(省落)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;?xml version="1.0" encoding="UTF-8" standalone="yes"?&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- Generated by JAX-WS RI at
http://jax-ws.dev.java.net. RI's version is JAX-WS RI
2.1.3.1-hudson-749-SNAPSHOT. --&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;definitions targetNamespace=".............."
name="CustomerService" xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:tns="..........." xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &lt;types&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;xsd:schema&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;xsd:import namespace="...................." schemaLocation="CustomerService_schema1.xsd"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/xsd:schema&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/types&gt;<br />
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;message name="addNewCustomerResponse"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &lt;part name="parameters" element="tns:addNewCustomerResponse"/&gt;<br />
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/message&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;portType name="CustomerService"&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;operation name="addNewCustomer"&gt;<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; &lt;input message="tns:addNewCustomer"/&gt;<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; &lt;output message="tns:addNewCustomerResponse"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &lt;/operation&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/portType&gt;<br />
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;binding name="CustomerServicePortBinding" type="tns:CustomerService"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/&gt;<br />
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &lt;operation name="addNewCustomer"&gt;<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; &lt;soap:operation soapAction=""/&gt;<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; &lt;input&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &lt;soap:body use="literal"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/input&gt;<br />
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;output&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &lt;soap:body use="literal"/&gt;<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; &lt;/output&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/operation&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/binding&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;service name="CustomerServiceService"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;port name="CustomerServicePort" binding="tns:CustomerServicePortBinding"&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;soap:address location="REPLACE_WITH_ACTUAL_URL"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/port&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/service&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/definitions&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 注意： Types ：数据类型的定义容器，它使用某种类型系统（一般使用XML Schema中的类型系统。例如这里面就是）<font size="1"></font><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Message ：通信消息的数据结构的抽象类型化定义。使用Types所定义的类型来定义整个消息的数据结构（例如：CustomerService_schema1.xsd）。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PortType:对于每个访问入口类型所支持的操作的抽象几个，这些操作可以由一个或多个访问服务点来支持。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Operation： 对服务中所支持的操作的抽象描述，一般单个Operation描述了一个访问入口的请求/响应消息对。例如： <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &lt;operation name="addNewCustomer"&gt;<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; &lt;input message="tns:addNewCustomer"/&gt;<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; &lt;output message="tns:addNewCustomerResponse"/&gt;<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; &lt;/operation&gt;<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; 中有input/outPut消息对。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Binding： 特定端口类型的具体协议和数据格式规范的绑定<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Port ： 定义为协议/数据格式绑定与具体的Web访问地址组合的单个服务访问点<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Service：相关服务访问点的集合。<br />
&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; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3. UDDI .Universal Description, Discovery, and Integration<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 简单说，UDDI用于集中存放和查找WSDL描述文件，起着目录服务器的作用。<br />
<br />
<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">二 . Web service 生命期</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 见图：http://gceclub.sun.com.cn/staticcontent/html/java/webservices_for/webservice_for_html_m126e0ad.gif<br />
&nbsp;&nbsp;&nbsp; <font size="3"><span style="font-family: 宋体;"><br />
&nbsp;&nbsp;&nbsp; 下面描述了</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">XML Web service 调用时发生事件的序列：<o:p></o:p></span></font>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 63pt; text-indent: -21pt; text-align: left;" align="left"><span lang="EN-US"><span><font size="3">1.</font><span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><font size="3"><span style="font-family: 宋体;">客户端建立了新的</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">XML Web service 服务代理类实例，此实例对象驻留在客户端的计算机中。</span></font><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 63pt; text-indent: -21pt; text-align: left;" align="left"><span lang="EN-US"><span><font size="3">2.</font><span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: 宋体;"><font size="3">客户端调用一个代理类的方法。</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 63pt; text-indent: -21pt; text-align: left;" align="left"><span lang="EN-US"><span><font size="3">3.</font><span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><font size="3"><span style="font-family: 宋体;">客户计算机的底层结构序列化</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">XML Web service 方法的参数为SOAP消息，并通过网络将其发送到XML Web service 服务端。</span></font><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 63pt; text-indent: -21pt; text-align: left;" align="left"><span lang="EN-US"><span><font size="3">4.</font><span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><font size="3"><span style="font-family: 宋体;">在服务端的底层结构及收到</span><span lang="EN-US">SOAP</span><span style="font-family: 宋体;">消息，并房序列化为</span><span lang="EN-US">XML</span><span style="font-family: 宋体;">。建立一个类的实例来完成</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">XML Web service，调用XML Web service 方法并传递XML参数。</span></font><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 63pt; text-indent: -21pt; text-align: left;" align="left"><span lang="EN-US"><span><font size="3">5.</font><span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">XML Web service 方法执行，最终设置返回值和输出参数。</span><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 63pt; text-indent: -21pt; text-align: left;" align="left"><span lang="EN-US"><span><font size="3">6.</font><span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">XML Web service 服务方的底层结构将返回值和数除参数序列化为SOAP消息。并通过网络发回客户端。</span><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 63pt; text-indent: -21pt; text-align: left;" align="left"><span lang="EN-US"><span><font size="3">7.</font><span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><font size="3"><span style="font-family: 宋体;">客户端的底层结构接收到上面的</span><span lang="EN-US">SOAP</span><span style="font-family: 宋体;">消息，反序列化</span><span lang="EN-US">XML</span><span style="font-family: 宋体;">为返回值和输出参数。并将其传递给代理类实例。</span></font></p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<span lang="EN-US"><span><font size="3">8.</font><span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: 宋体;"><font size="3">客户端接受到返回式和输出参数</font></span><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; webService 实现的例子。<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.实现一个WebService，使其能够接受和响应SOAP消息<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.撰写一个WSDL文件用于描述此Web Services。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.将此WSDL发布到UDDI上<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4. 其他的应用程序（客户端）从UDDI上搜索倒你的WSDL<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5.根据你的WSDL，客户端编写程序调用Web Service.<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
<br />
<br />
<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
<br />
<img src ="http://www.blogjava.net/ann/aggbug/260295.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ann/" target="_blank">冰是没有未来的，因为它的永恒</a> 2009-03-17 17:24 <a href="http://www.blogjava.net/ann/archive/2009/03/17/260295.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java URLEncoder 中特殊处理</title><link>http://www.blogjava.net/ann/archive/2008/10/07/232875.html</link><dc:creator>冰是没有未来的，因为它的永恒</dc:creator><author>冰是没有未来的，因为它的永恒</author><pubDate>Tue, 07 Oct 2008 03:40:00 GMT</pubDate><guid>http://www.blogjava.net/ann/archive/2008/10/07/232875.html</guid><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: java URLEncoder 中特殊处理&nbsp;&nbsp;<a href='http://www.blogjava.net/ann/archive/2008/10/07/232875.html'>阅读全文</a><img src ="http://www.blogjava.net/ann/aggbug/232875.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ann/" target="_blank">冰是没有未来的，因为它的永恒</a> 2008-10-07 11:40 <a href="http://www.blogjava.net/ann/archive/2008/10/07/232875.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>