<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Java堂 &#187; JavaPlateform</title>
	<atom:link href="http://www.javatang.com/archives/category/javaplateform/feed" rel="self" type="application/rss+xml" />
	<link>http://www.javatang.com</link>
	<description>Java Tang</description>
	<lastBuildDate>Thu, 08 Dec 2011 08:29:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>JRebel运行缓慢或提示内存不足的解决方法</title>
		<link>http://www.javatang.com/archives/2010/11/29/3337530.html</link>
		<comments>http://www.javatang.com/archives/2010/11/29/3337530.html#comments</comments>
		<pubDate>Mon, 29 Nov 2010 09:33:37 +0000</pubDate>
		<dc:creator>Jet</dc:creator>
				<category><![CDATA[JavaPlateform]]></category>
		<category><![CDATA[jrebel]]></category>

		<guid isPermaLink="false">http://www.javatang.com/?p=530</guid>
		<description><![CDATA[JRebel是一个Java类热启动的工具，使Java开发（特别是Web开发）可以实现像PHP开发那样即时刷新的效果，这样再也不用修改java文件之后频繁的去重启Web Server了，用起来非常的顺手。 最近JRebel好像更新也非常频繁，8月份刚发布3.0版本，11月份就发布了3.5版本，而且这个新版本用下来非常给力，针对了spring增加了许多扩展（默认是打开的），比如可以实时更新所有Spring的配置文件等等，手痒痒的同学可以下载下来试试。BTW，我用的是正式版，:) 安装的方法也非常简单，就在vm后面增加一个-noverify 参数： -noverify -javaagent:E:\UsualTools\JRebel\jrebel.jar 当然还是记得将上面的路径修改成你自己本机JRebl的存放路径。 上面的都不是本文的重点，这里需要说一下的就是，或许3.5版本增加的功能特性太多的缘故（特别是针对Spring），刚开始启动的时候速度非常的慢，开始的时候我怀疑是spring插件的问题，于是使用 -Djrebel.spring_plugin=false将spring插件关闭了，之后启动的速度可以接受了，但是运行程序的时候速度非常非常的慢，点一个按钮要等半天。如果不使用JRebel的话程序运行正常，所以排除了程序本身的问题。 刚开始一直在怀疑是不是新版本的问题，因为用2.x和3.0的时候都很正常，所以在这方面查了很多资料，都没有发现好的解决办法。后来，无意中发现程序出现了“java.lang.OutOfMemoryError: PermGen space”的错误，突然才想到是否是给JRebel分配的内存太小了，于是使用下面的参数增加了内存： -noverify -javaagent:E:\UsualTools\JRebel\jrebel.jar -Xmx512M -Xms512M -XX:MaxPermSize=1024m 然后在运行的时候发现速度是非一般的快啊，使用JRebel的spring插件之后启动速度也非常的块了，看来就是这个问题，后来在JRebel官方上的Q&#038;A上面也得到了印证。 需要说明一点的是，如果上面的参数无法启动，需要将内存数设置小一些；还有，增加Eclipse的内存对JRebl是没有任何效果的，虽然现在想起来和可笑，但是当时在这个方面也浪费了不少时间。BTW，Eclipse3.3+内置了一个内存查看的工具，可以在“Windows”-”Preferences”中，选择左边的”General”，然后选择右边的”Show heap status”。 参考资料： I’m getting Java.lang.OutOfMemoryError: PermGen space!?? Javarebel启动程序java.lang.OutOfMemoryError: PermGen space问题的解决 Related Posts:Java 中“Error occurred during initialization of VM”错误的解决方法由MyEclipse内存不足谈谈JVM内存Ubuntu下面安装Macbuntu及安装之后需要修改的几个问题修改Spark的默认字体大小JPA和Hibernate注解的继承问题]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.javatang.com/wp-content/i_jrebel_logo.png" alt="" title="i_jrebel_logo" width="229" height="96" class="aligncenter size-full wp-image-533" /><br />
<a href="http://www.zeroturnaround.com/jrebel/" target="_blank">JRebel</a>是一个Java类热启动的工具，使Java开发（特别是Web开发）可以实现像PHP开发那样即时刷新的效果，这样再也不用修改java文件之后频繁的去重启Web Server了，用起来非常的顺手。</p>
<p>最近JRebel好像更新也非常频繁，8月份刚发布3.0版本，11月份就发布了3.5版本，而且这个新版本用下来非常给力，针对了spring增加了许多扩展（默认是打开的），比如可以实时更新所有Spring的配置文件等等，手痒痒的同学可以下载下来试试。BTW，我用的是正式版，:)</p>
<p>安装的方法也非常简单，就在vm后面增加一个-noverify 参数：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline">-noverify -javaagent:E:\UsualTools\JRebel\jrebel.jar</li></ol></div>
<p>当然还是记得将上面的路径修改成你自己本机JRebl的存放路径。</p>
<p>上面的都不是本文的重点，这里需要说一下的就是，或许3.5版本增加的功能特性太多的缘故（特别是针对Spring），刚开始启动的时候速度非常的慢，开始的时候我怀疑是spring插件的问题，于是使用 -Djrebel.spring_plugin=false将spring插件关闭了，之后启动的速度可以接受了，但是运行程序的时候速度非常非常的慢，点一个按钮要等半天。如果不使用JRebel的话程序运行正常，所以排除了程序本身的问题。</p>
<p>刚开始一直在怀疑是不是新版本的问题，因为用2.x和3.0的时候都很正常，所以在这方面查了很多资料，都没有发现好的解决办法。后来，无意中发现程序出现了“java.lang.OutOfMemoryError: PermGen space”的错误，突然才想到是否是给JRebel分配的内存太小了，于是使用下面的参数增加了内存：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline">-noverify -javaagent:E:\UsualTools\JRebel\jrebel.jar -Xmx512M -Xms512M -XX:MaxPermSize=1024m</li></ol></div>
<p>然后在运行的时候发现速度是非一般的快啊，使用JRebel的spring插件之后启动速度也非常的块了，看来就是这个问题，后来在JRebel官方上的Q&#038;A上面也得到了印证。</p>
<p>需要说明一点的是，如果上面的参数无法启动，需要将内存数设置小一些；还有，增加Eclipse的内存对JRebl是没有任何效果的，虽然现在想起来和可笑，但是当时在这个方面也浪费了不少时间。BTW，Eclipse3.3+内置了一个内存查看的工具，可以在“Windows”-”Preferences”中，选择左边的”General”，然后选择右边的”Show heap status”。</p>
<p>参考资料：<br />
<a href="http://www.zeroturnaround.com/jrebel/faq/#Im_getting_Java.lang.OutOfMemoryError:" target="_blank">I’m getting Java.lang.OutOfMemoryError: PermGen space!??</a><br />
<a href="http://lonelythinker.javaeye.com/blog/480131" target="_blank">Javarebel启动程序java.lang.OutOfMemoryError: PermGen space问题的解决</a></p>
<div id="crp_related"><h2>Related Posts:</h2><ul><li><a href="http://www.javatang.com/archives/2006/08/11/170654.html" rel="bookmark" class="crp_title">Java 中“Error occurred during initialization of VM”错误的解决方法</a></li><li><a href="http://www.javatang.com/archives/2007/12/03/1653250.html" rel="bookmark" class="crp_title">由MyEclipse内存不足谈谈JVM内存</a></li><li><a href="http://www.javatang.com/archives/2010/11/27/1657519.html" rel="bookmark" class="crp_title">Ubuntu下面安装Macbuntu及安装之后需要修改的几个问题</a></li><li><a href="http://www.javatang.com/archives/2008/07/13/5634273.html" rel="bookmark" class="crp_title">修改Spark的默认字体大小</a></li><li><a href="http://www.javatang.com/archives/2008/06/19/0308269.html" rel="bookmark" class="crp_title">JPA和Hibernate注解的继承问题</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://www.javatang.com/archives/2010/11/29/3337530.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Spring MVC中修改校验的异常信息</title>
		<link>http://www.javatang.com/archives/2010/11/23/5817513.html</link>
		<comments>http://www.javatang.com/archives/2010/11/23/5817513.html#comments</comments>
		<pubDate>Tue, 23 Nov 2010 08:58:17 +0000</pubDate>
		<dc:creator>Jet</dc:creator>
				<category><![CDATA[JavaPlateform]]></category>
		<category><![CDATA[spring]]></category>

		<guid isPermaLink="false">http://www.javatang.com/?p=513</guid>
		<description><![CDATA[使用一个例子来说明一下，Spring使用的是3.0.x： public class Account { &#160; &#160; @Pattern(regexp = &#34;[a-z0-9]{3,50}&#34;) &#160; &#160; private&#160;String name; &#160; &#160; &#160; @NotNull &#160; &#160; @NumberFormat(style=Style.CURRENCY) &#160; &#160; private&#160;BigDecimal balance = new BigDecimal(&#34;1000&#34;); &#160; &#160; &#160; @DateTimeFormat(style=&#34;S-&#34;) &#160; &#160; @Future &#160; &#160; private&#160;Date renewalDate = new Date(new Date().getTime() + 31536000000L); &#160; &#160; &#160; // 省略 getter &#38; setter... } 接下来使用注解创建一个Controller： [...]]]></description>
			<content:encoded><![CDATA[<p>使用一个例子来说明一下，Spring使用的是3.0.x：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">public</span><span style="color: Gray;"> </span><span style="color: Green;">class</span><span style="color: Gray;"> </span><span style="color: Blue;">Account</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; @</span><span style="color: Blue;">Pattern</span><span style="color: Olive;">(</span><span style="color: Blue;">regexp</span><span style="color: Gray;"> = </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">[a-z0-9]{3,50}</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">private</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">String</span><span style="color: Gray;"> </span><span style="color: Blue;">name</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; @</span><span style="color: Blue;">NotNull</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; @</span><span style="color: Blue;">NumberFormat</span><span style="color: Olive;">(</span><span style="color: Blue;">style</span><span style="color: Gray;">=</span><span style="color: Blue;">Style</span><span style="color: Gray;">.</span><span style="color: Blue;">CURRENCY</span><span style="color: Olive;">)</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">private</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">BigDecimal</span><span style="color: Gray;"> </span><span style="color: Blue;">balance</span><span style="color: Gray;"> = </span><span style="color: Green;">new</span><span style="color: Gray;"> </span><span style="color: Blue;">BigDecimal</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">1000</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; @</span><span style="color: Blue;">DateTimeFormat</span><span style="color: Olive;">(</span><span style="color: Blue;">style</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">S-</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; @</span><span style="color: Blue;">Future</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">private</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">Date</span><span style="color: Gray;"> </span><span style="color: Blue;">renewalDate</span><span style="color: Gray;"> = </span><span style="color: Green;">new</span><span style="color: Gray;"> </span><span style="color: Blue;">Date</span><span style="color: Olive;">(</span><span style="color: Green;">new</span><span style="color: Gray;"> </span><span style="color: Blue;">Date</span><span style="color: Olive;">()</span><span style="color: Gray;">.</span><span style="color: Blue;">getTime</span><span style="color: Olive;">()</span><span style="color: Gray;"> + </span><span style="color: Maroon;">31536000000</span><span style="color: Blue;">L</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: #ffa500;">// 省略 getter &amp; setter...</span></li>
<li><span style="color: Olive;">}</span></li></ol></div>
<p>接下来使用注解创建一个Controller：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Gray;">@</span><span style="color: Blue;">Controller</span></li>
<li><span style="color: Gray;">@</span><span style="color: Blue;">RequestMapping</span><span style="color: Olive;">(</span><span style="color: Blue;">value</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">/account</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span></li>
<li><span style="color: Green;">public</span><span style="color: Gray;">&nbsp;</span><span style="color: Green;">class</span><span style="color: Gray;"> </span><span style="color: Blue;">AccountController</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: #ffa500;">/**</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp;&nbsp; * 如果view采用JSP的话&lt;code&gt;@ModelAttribute&lt;/code&gt;注解可以省略，但是如果是使用Velocity或FreeMarker</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp;&nbsp; * 的话必须要加上，而且&lt;code&gt;@Valid&lt;/code&gt;注解和后面的BindingResult类型的参数之间不能有其他参数。</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp;&nbsp; */</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; @</span><span style="color: Blue;">RequestMapping</span><span style="color: Olive;">(</span><span style="color: Blue;">method</span><span style="color: Gray;">=</span><span style="color: Blue;">RequestMethod</span><span style="color: Gray;">.</span><span style="color: Blue;">POST</span><span style="color: Olive;">)</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">public</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">String</span><span style="color: Gray;"> </span><span style="color: Blue;">create</span><span style="color: Olive;">(</span><span style="color: Gray;">@</span><span style="color: Blue;">Valid</span><span style="color: Gray;"> @</span><span style="color: Blue;">ModelAttribute</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">account</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Blue;">Account</span><span style="color: Gray;"> </span><span style="color: Blue;">account</span><span style="color: Gray;">, </span><span style="color: Blue;">BindingResult</span><span style="color: Gray;"> </span><span style="color: Blue;">result</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">if</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">(</span><span style="color: Blue;">result</span><span style="color: Gray;">.</span><span style="color: Blue;">hasErrors</span><span style="color: Olive;">())</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">account/createForm</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">// ...</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">redirect:/account/</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> + </span><span style="color: Blue;">account</span><span style="color: Gray;">.</span><span style="color: Blue;">getId</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Olive;">}</span></li></ol></div>
<p>另外还有一个view文件、配置文件等等，具体的可以查看<a href="https://src.springframework.org/svn/spring-samples/mvc-basic/trunk/" target="_blank">Spring MVC Basic Sample</a>。</p>
<p>OK，接下来说重点。我参考上面的Spring MVC Basic Sample中的做法也做了一个类似的表单，在表单中的balance中输入非数字的时候旁边的错误信息会出现下面的异常信息：</p>
<blockquote><p>
Failed to convert property value of type java.lang.String to required type java.math.BigDecimal for property balance; nested exception is org.springframework.core.convert.ConversionFailedException: Unable to convert value “eff” from type java.lang.String to type java.math.BigDecimal; nested exception is java.lang.IllegalArgumentException: Unable to parse eff
</p></blockquote>
<p>这个就很郁闷了，明显是格式转换出错，但是列出来一堆的异常信息，对用户来说非常不友好。于是开始在Google中搜索也没有找到比较好的说法，后来运行了Spring MVC Basic Sample，不显示上面的异常信息，而只是显示一句话：”could not be parsed“，这个效果正是我们所期待的。于是我将例子中的所有spring配置文件、Bean信息、Controller都做了对比，甚至JSP模板都一样，但是一到我自己的项目中就会出现那个异常，当时非常郁闷。</p>
<p>后来无意中在Google中查到到了参考资料中的一篇帖子，里面提到只要在messages.properties文件中设置typeMismatch属性就可以了，于是我猛然想到Spring MVC Basic Sample中也有个messages.properties文件，打开之后赫然看到果然有一条typeMismatch属性：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline">typeMismatch=could not be parsed</li></ol></div>
<p>原来是在这里设置的，真的很郁闷。还好，参考资料中的帖子中还提到可以设置具体的类型，比如可以这样设置：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline">## 全局的配置信息</li>
<li>typeMismatch=输入的数据格式不正确</li>
<li>## 针对BigDecimal类型的错误信息</li>
<li>typeMismatch.java.math.BigDecimal=请输入数字</li>
<li>## 针对Date类型的错误信息</li>
<li>typeMismatch.java.util.Date=请在{0}中输入正确的日期</li></ol></div>
<p>参考资料：<br />
<a href="http://www.velocityreviews.com/forums/t302365-spring-mvc-data-binding-and-user-friendly-error-messages.html" target="_blank">Spring MVC Data Binding and user-friendly error messages</a></p>
<div id="crp_related"><h2>Related Posts:</h2><ul><li><a href="http://www.javatang.com/archives/2007/03/13/5026128.html" rel="bookmark" class="crp_title">按照指定的类型排序</a></li><li><a href="http://www.javatang.com/archives/2010/08/09/3212438.html" rel="bookmark" class="crp_title">SimpleJdbcInsert使用executeAndReturnKeyHolder方法返回主键时需要注意的一个地方</a></li><li><a href="http://www.javatang.com/archives/2008/07/07/5648271.html" rel="bookmark" class="crp_title">如何使用DWR2.0的注解功能</a></li><li><a href="http://www.javatang.com/archives/2008/06/19/0308269.html" rel="bookmark" class="crp_title">JPA和Hibernate注解的继承问题</a></li><li><a href="http://www.javatang.com/archives/2007/03/05/5722110.html" rel="bookmark" class="crp_title">Java中文排序</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://www.javatang.com/archives/2010/11/23/5817513.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Resin中对日志输出的配置</title>
		<link>http://www.javatang.com/archives/2010/11/14/1752494.html</link>
		<comments>http://www.javatang.com/archives/2010/11/14/1752494.html#comments</comments>
		<pubDate>Sun, 14 Nov 2010 06:17:52 +0000</pubDate>
		<dc:creator>Jet</dc:creator>
				<category><![CDATA[JavaPlateform]]></category>
		<category><![CDATA[Web&Server]]></category>
		<category><![CDATA[resin]]></category>

		<guid isPermaLink="false">http://www.javatang.com/?p=494</guid>
		<description><![CDATA[Resin中对日志的设置主要有如下参数：log、logger、access-log、stdout-log和stderr-log。前两个放在&#60;resin&#62;标签，也就是主标签下面，其中log主要用于配置JDK logging API，logger用于指定需要log的包及level，跟log4j中的用法相似，只不过resin中level有个特殊的选项就是off，用于关闭日志输出；而后面三个*-log放在&#60;host&#62;或&#60;host-default&#62;下面，access用于HTTP输出，stdout用于标准输出(System.out)，stderr用于错误输出(System.err，对应log4j中的log.error)。 三个*-log中间的属性是相同的，所以我们集中来说明一下： path: 用于设定日志文件的路径，非常有意思的是它支持所谓的El Variables and Functions，也就是resin中的变量，比如${host.name}就是虚拟站点的id名称，所以如果将它放在&#60;host-default&#62;下面的话，将path设置为 logs/${host.name}/access.log的话可以将不同站点的日志存放在不同的目录下面。 archive-format: 这个参数可以设置日志归档的格式，如设置为access-%Y%m%d.log可以在归档的时候自动按日期进行归档命名。另外还有一个特性需要说明的是，resin竟然支持自动压缩log文件，而且设置的方法非常简单，只要后缀名是gz就可以了，如access-%Y%m%d.log.gz，这样归档的时候会自动压缩，而且支持windows和linux系统。 format: 用于设置每条日志输出的格式，这个非常简单，而且通常使用系统内置的格式就可以了。 rollover-size: 用来设置归档日志文件的最小尺寸，单位可以设置成kb、mb等等，默认为1mb。 rollover-period: 用来设置归档日志文件的周期，单位可以是1D（一天）、1W(一周)、1M（一个月）等。 最后给出一个范例供大家参考： &#60;!-- &#160;&#160; - Resin 3.1 configuration file. &#160; --&#62; &#60;resin&#160;xmlns=&#34;http://caucho.com/ns/resin&#34; &#160; &#160; &#160;&#160; xmlns:resin=&#34;http://caucho.com/ns/resin/core&#34;&#62; &#160; &#60;!-- &#160; &#160;&#160; - Logging configuration for the JDK logging API. &#160; &#160; --&#62; &#160; &#60;log&#160;name=&#34;&#34; level=&#34;off&#34; path=&#34;stdout:&#34; &#160; &#160; &#160;&#160; [...]]]></description>
			<content:encoded><![CDATA[<p>Resin中对日志的设置主要有如下参数：log、logger、access-log、stdout-log和stderr-log。前两个放在&lt;resin&gt;标签，也就是主标签下面，其中log主要用于配置JDK logging API，logger用于指定需要log的包及level，跟log4j中的用法相似，只不过resin中level有个特殊的选项就是off，用于关闭日志输出；而后面三个*-log放在&lt;host&gt;或&lt;host-default&gt;下面，access用于HTTP输出，stdout用于标准输出(System.out)，stderr用于错误输出(System.err，对应log4j中的log.error)。</p>
<p>三个*-log中间的属性是相同的，所以我们集中来说明一下：</p>
<blockquote>
<li><b>path:</b> 用于设定日志文件的路径，非常有意思的是它支持所谓的<a href="http://caucho.com/resin-3.1/doc/el-var.xtp" target="_blank">El Variables and Functions</a>，也就是resin中的变量，比如${host.name}就是虚拟站点的id名称，所以如果将它放在&lt;host-default&gt;下面的话，将path设置为 logs/${host.name}/access.log的话可以将不同站点的日志存放在不同的目录下面。</li>
<li><b>archive-format:</b> 这个参数可以设置日志归档的格式，如设置为access-%Y%m%d.log可以在归档的时候自动按日期进行归档命名。另外还有一个特性需要说明的是，resin竟然支持自动压缩log文件，而且设置的方法非常简单，只要后缀名是gz就可以了，如access-%Y%m%d.log.gz，这样归档的时候会自动压缩，而且支持windows和linux系统。</li>
<li><b>format:</b> 用于设置每条日志输出的格式，这个非常简单，而且通常使用系统内置的格式就可以了。</li>
<li><b>rollover-size:</b> 用来设置归档日志文件的最小尺寸，单位可以设置成kb、mb等等，默认为1mb。</li>
<li><b>rollover-period:</b> 用来设置归档日志文件的周期，单位可以是1D（一天）、1W(一周)、1M（一个月）等。</li>
</blockquote>
<p>最后给出一个范例供大家参考：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">&lt;!--</span></li>
<li><span style="color: #ffa500;">&nbsp;&nbsp; - Resin 3.1 configuration file.</span></li>
<li><span style="color: #ffa500;">&nbsp; --&gt;</span></li>
<li><span style="color: Olive;">&lt;</span><span style="color: Green;">resin</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">xmlns</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">http://caucho.com/ns/resin</span><span style="color: #8b0000;">&quot;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp;&nbsp; </span><span style="color: #00008b;">xmlns:resin</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">http://caucho.com/ns/resin/core</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; </span><span style="color: #ffa500;">&lt;!--</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp;&nbsp; - Logging configuration for the JDK logging API.</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; --&gt;</span></li>
<li><span style="color: Gray;">&nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">log</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">name</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">level</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">off</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">path</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">stdout:</span><span style="color: #8b0000;">&quot;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp;&nbsp; </span><span style="color: #00008b;">timestamp</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">[%H:%M:%S.%s] {%{thread}} </span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">/&gt;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; </span><span style="color: #ffa500;">&lt;!--</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp;&nbsp; - 'info' for production</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp;&nbsp; - 'fine' or 'finer' for development and troubleshooting</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; --&gt;</span></li>
<li><span style="color: Gray;">&nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">logger</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">name</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">com.caucho</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">level</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">info</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">/&gt;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">logger</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">name</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">com.caucho.java</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">level</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">config</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">/&gt;</span></li>
<li><span style="color: Gray;">&nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">logger</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">name</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">com.caucho.loader</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">level</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">config</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">/&gt;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">host-default</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">&lt;!--</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; - With another web server, like Apache, this can be commented out</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; - because the web server will log this information.</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp; --&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">access-log</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">path</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">logs/${host.name}/access.log</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #00008b;">archive-format</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">access-%Y%m%d.log.gz</span><span style="color: #8b0000;">&quot;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #00008b;">format</span><span style="color: Gray;">='%</span><span style="color: #00008b;">h</span><span style="color: Gray;"> %</span><span style="color: #00008b;">l</span><span style="color: Gray;"> %</span><span style="color: #00008b;">u</span><span style="color: Gray;"> %</span><span style="color: #00008b;">t</span><span style="color: Gray;">&nbsp;</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">%r</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> %</span><span style="color: #00008b;">s</span><span style="color: Gray;"> %</span><span style="color: #00008b;">b</span><span style="color: Gray;"> </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">%{Referer}i</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">%{User-Agent}i</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">'</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #00008b;">rollover-size</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">10mb</span><span style="color: #8b0000;">&quot;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #00008b;">rollover-period</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">1D</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">/&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">&lt;!--</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; - stdout log and stderr log</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp; --&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">stdout-log</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">path</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">logs/${host.name}/stdout.log</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #00008b;">archive-format</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">stdout-%Y%m%d.log.gz</span><span style="color: #8b0000;">&quot;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #00008b;">timestamp</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">[%Y.%m.%d %H:%M:%S.%s]</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #00008b;">rollover-size</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">10mb</span><span style="color: #8b0000;">&quot;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #00008b;">rollover-period</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">1D</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">/&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">stderr-log</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">path</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">logs/${host.name}/stderr.log</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #00008b;">archive-format</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">stderr-%Y%m%d.log.gz</span><span style="color: #8b0000;">&quot;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #00008b;">timestamp</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">[%Y.%m.%d %H:%M:%S.%s]</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #00008b;">rollover-size</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">10mb</span><span style="color: #8b0000;">&quot;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #00008b;">rollover-period</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">1D</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">/&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">host-default</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Olive;">&lt;/</span><span style="color: Green;">resin</span><span style="color: Olive;">&gt;</span></li></ol></div>
<p>最后还有一个事情需要说明一下，如果在windows系统下<a href="http://www.javatang.com/archives/2007/06/20/1513177.html">将resin注册成服务程序</a>之后就会在log目录下产生jvm-defautl.log文件，而且这个文件会一直累加，所以会变的文件非常大而影响resin的性能。原来在<a href="http://www.javatang.com/archives/2007/06/20/1513177.html">Apache和Resin产生大容量日志的解决办法</a>这篇文件中提到的使用httpd -jvm-log NUL的方法在3.1中无法使用，而且查找了大量的文档也没有找到合适的方法，后来索性将log目录中的写入权限去掉了，重启resin也没有任何影响，算是解决了这个问题。</p>
<p>参考资料：</p>
<p>http://caucho.com/resin-3.1/doc/config-log.xtp</p>
<p>http://caucho.com/resin-3.1/doc/el-var.xtp#host</p>
<div id="crp_related"><h2>Related Posts:</h2><ul><li><a href="http://www.javatang.com/archives/2008/03/18/2532264.html" rel="bookmark" class="crp_title">Apache+Resin泛域名的设置</a></li><li><a href="http://www.javatang.com/archives/2007/06/20/1513177.html" rel="bookmark" class="crp_title">Apache和Resin产生大容量日志的解决办法</a></li><li><a href="http://www.javatang.com/archives/2010/08/27/3629451.html" rel="bookmark" class="crp_title">Apache和Resin组合时UrlRewriteFilter失效的解决方法</a></li><li><a href="http://www.javatang.com/archives/2010/11/13/1228487.html" rel="bookmark" class="crp_title">Apache和Resin组合时间歇性出现503错误的解决方法</a></li><li><a href="http://www.javatang.com/archives/2008/10/18/1942276.html" rel="bookmark" class="crp_title">Apache+Resin下如何写伪静态和301跳转</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://www.javatang.com/archives/2010/11/14/1752494.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apache和Resin组合时间歇性出现503错误的解决方法</title>
		<link>http://www.javatang.com/archives/2010/11/13/1228487.html</link>
		<comments>http://www.javatang.com/archives/2010/11/13/1228487.html#comments</comments>
		<pubDate>Sat, 13 Nov 2010 09:12:28 +0000</pubDate>
		<dc:creator>Jet</dc:creator>
				<category><![CDATA[JavaPlateform]]></category>
		<category><![CDATA[Web&Server]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[resin]]></category>

		<guid isPermaLink="false">http://www.javatang.com/?p=487</guid>
		<description><![CDATA[使用Apache和Resin进行组合时，如果Resin关闭或中断的时会出现如下的HTTP 503错误： Service Temporarily Unavailable The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later. 造成这个错误的原因是因为Resin无法启动，可以单独访问resin（如8080端口）查看具体的错误。 我这里要说的是，在Resin和Apache都非常非常正常的情况下，间歇性的出现上述错误，也就是说不是一直有，而是偶尔出现这个错误，刷新下页面就好了。这个问题非常郁闷，后来在resin的bug报告中（见参考资料）竟然发现了解决的办法： The important configuration are load-balance-socket-timeout, socket-timeout, load-balance-idle-time and keepalive-timeout. The two load-balance-* configure mod_caucho. socket-timeout and keepalive-timeout configure the Resin side. load-balance-socket-timeout needs to be large enough to [...]]]></description>
			<content:encoded><![CDATA[<p>使用Apache和Resin进行组合时，如果Resin关闭或中断的时会出现如下的HTTP 503错误：</p>
<blockquote><p>
Service Temporarily Unavailable<br />
The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.
</p></blockquote>
<p>造成这个错误的原因是因为Resin无法启动，可以单独访问resin（如8080端口）查看具体的错误。</p>
<p>我这里要说的是，在Resin和Apache都非常非常正常的情况下，<strong>间歇性</strong>的出现上述错误，也就是说不是一直有，而是偶尔出现这个错误，刷新下页面就好了。这个问题非常郁闷，后来在resin的bug报告中（见参考资料）竟然发现了解决的办法：</p>
<blockquote><p>
The important configuration are load-balance-socket-timeout, socket-timeout, load-balance-idle-time and keepalive-timeout. The two load-balance-* configure mod_caucho. socket-timeout and keepalive-timeout configure the Resin side.</p>
<p>load-balance-socket-timeout needs to be large enough to handle any server-side processing delays before the first data.</p>
<p>socket-timeout and keepalive-timeout need to be larger than load-balance-idle-time because they need to keep the connection open for a keepalive request. </p>
<p>For a diagram, see</p>
<p>http://caucho.com/resin/admin/load-balancing.xtp</p>
</blockquote>
<p>也就是说，Resin在同Apache进行组合通讯的时候主要依靠四个参数：load-balance-socket-timeout, socket-timeout, load-balance-idle-time 和 keepalive-timeout，其中两个load-balance-*参数用来设置mod_caucho（就是与Apache组合的so文件），socket-timeout和keepalive-timeout用来设置Resin。至于参数数值的大小顺序依此是：load-balance-socket-timeout &gt; socket-timeout 和 keepalive-timeout &gt; load-balance-idle-time。上述四个参数的官方说明地址为：<a href="http://caucho.com/resin-3.1/doc/server-tags.xtp" target="_blank">http://caucho.com/resin-3.1/doc/server-tags.xtp</a></p>
<p>那为什么会间歇性出现503错误呢？这个是因为resin默认的socket-timeout为65s，时间太短了，有些比较大的请求在这个时间之内还没有进行完。综合上面所说，参考的配置如下：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Olive;">&lt;</span><span style="color: Green;">resin</span><span style="color: Gray;"> ...</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">cluster</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">id</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">app-tier</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">server-default</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">socket-timeout</span><span style="color: Olive;">&gt;</span><span style="color: Gray;">180s</span><span style="color: Olive;">&lt;/</span><span style="color: Green;">socket-timeout</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">keepalive-max</span><span style="color: Olive;">&gt;</span><span style="color: Gray;">3000</span><span style="color: Olive;">&lt;/</span><span style="color: Green;">keepalive-max</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">keepalive-timeout</span><span style="color: Olive;">&gt;</span><span style="color: Gray;">180s</span><span style="color: Olive;">&lt;/</span><span style="color: Green;">keepalive-timeout</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">load-balance-idle-time</span><span style="color: Olive;">&gt;</span><span style="color: Gray;">120s</span><span style="color: Olive;">&lt;/</span><span style="color: Green;">load-balance-idle-time</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">server-default</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">cluster</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Olive;">&lt;/</span><span style="color: Green;">resin</span><span style="color: Olive;">&gt;</span></li></ol></div>
<p>从此，这个世界清净了。</p>
<p>参考资料：<br />
<a href="http://bugs.caucho.com/view.php?id=2715" target="_blank">Apache 2.2.x + Resin 3.1.x: frequent 503 status error messages (Service Temporarily Unavailable)</a><br />
<a href="http://bugs.caucho.com/view.php?id=2862" target="_blank">0002862: Apache + Resin and 503 HTTP Error</a><br />
<a href="http://aiter.javaeye.com/blog/391456" target="_blank">resin apache问题</a></p>
<div id="crp_related"><h2>Related Posts:</h2><ul><li><a href="http://www.javatang.com/archives/2011/10/18/1847563.html" rel="bookmark" class="crp_title">Ext中设置Ajax超时时间</a></li><li><a href="http://www.javatang.com/archives/2007/07/04/1548182.html" rel="bookmark" class="crp_title">PHP中出现“Unable to load dynamic library”问题的解决方法</a></li><li><a href="http://www.javatang.com/archives/2010/11/14/1752494.html" rel="bookmark" class="crp_title">Resin中对日志输出的配置</a></li><li><a href="http://www.javatang.com/archives/2008/10/18/1942276.html" rel="bookmark" class="crp_title">Apache+Resin下如何写伪静态和301跳转</a></li><li><a href="http://www.javatang.com/archives/2007/11/02/0146237.html" rel="bookmark" class="crp_title">“终端服务超出最大允许连接数”问题产生原因及解决方法</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://www.javatang.com/archives/2010/11/13/1228487.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在Maven中引用jcaptcha出现Missing artifact错误的解决办法</title>
		<link>http://www.javatang.com/archives/2010/09/07/2623462.html</link>
		<comments>http://www.javatang.com/archives/2010/09/07/2623462.html#comments</comments>
		<pubDate>Tue, 07 Sep 2010 03:26:23 +0000</pubDate>
		<dc:creator>Jet</dc:creator>
				<category><![CDATA[JavaPlateform]]></category>
		<category><![CDATA[jcaptcha]]></category>
		<category><![CDATA[maven]]></category>

		<guid isPermaLink="false">http://www.javatang.com/?p=462</guid>
		<description><![CDATA[今天在Maven中引用jcaptcha，dependency内容如下： &#60;dependency&#62; &#160; &#160; &#160; &#160; &#160; &#160; &#60;groupId&#62;com.octo.captcha&#60;/groupId&#62; &#160; &#160; &#160; &#160; &#160; &#160; &#60;artifactId&#62;jcaptcha&#60;/artifactId&#62; &#160; &#160; &#160; &#160; &#160; &#160; &#60;version&#62;1.0&#60;/version&#62; &#160; &#160; &#160; &#160; &#60;/dependency&#62; 添加完之后在重新生成Maven工程的时候出现下面的错误： Missing artifact com.jhlabs:imaging:jar:01012005:compile 显然是jcaptcha所倚赖的一个jar包不在常用的仓库里面，后来在其官方网站上终于找到一个包含此包的仓库地址：atlassian-m2-repository http://repository.atlassian.com/maven2 添加到pom.xml文件中即可。 参考资料： Dependency Repository Locations Related Posts:Discuz!一次误删会员用户组的恢复查找接口实现类的Eclipse插件Maven2部署构件到Nexus时出现的Failed to transfer file错误Windows下安装zip包版本的MySQL一款非常不错的正则表达式测试工具JRegexpTester]]></description>
			<content:encoded><![CDATA[<p>今天在Maven中引用jcaptcha，dependency内容如下：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Olive;">&lt;</span><span style="color: Green;">dependency</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">groupId</span><span style="color: Olive;">&gt;</span><span style="color: Gray;">com.octo.captcha</span><span style="color: Olive;">&lt;/</span><span style="color: Green;">groupId</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">artifactId</span><span style="color: Olive;">&gt;</span><span style="color: Gray;">jcaptcha</span><span style="color: Olive;">&lt;/</span><span style="color: Green;">artifactId</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">version</span><span style="color: Olive;">&gt;</span><span style="color: Gray;">1.0</span><span style="color: Olive;">&lt;/</span><span style="color: Green;">version</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">dependency</span><span style="color: Olive;">&gt;</span></li></ol></div>
<p>添加完之后在重新生成Maven工程的时候出现下面的错误：</p>
<blockquote><p>
Missing artifact com.jhlabs:imaging:jar:01012005:compile
</p></blockquote>
<p>显然是jcaptcha所倚赖的一个jar包不在常用的仓库里面，后来在其<a href="http://jcaptcha.sourceforge.net/jcaptcha/dependencies.html" target="_blank">官方网站</a>上终于找到一个包含此包的仓库地址：atlassian-m2-repository	http://repository.atlassian.com/maven2 添加到pom.xml文件中即可。</p>
<p>参考资料：<br />
<a href="http://jcaptcha.sourceforge.net/jcaptcha/dependencies.html" target="_blank">Dependency Repository Locations</a></p>
<div id="crp_related"><h2>Related Posts:</h2><ul><li><a href="http://www.javatang.com/archives/2008/03/13/5500263.html" rel="bookmark" class="crp_title">Discuz!一次误删会员用户组的恢复</a></li><li><a href="http://www.javatang.com/archives/2007/07/04/4045184.html" rel="bookmark" class="crp_title">查找接口实现类的Eclipse插件</a></li><li><a href="http://www.javatang.com/archives/2010/01/23/4518375.html" rel="bookmark" class="crp_title">Maven2部署构件到Nexus时出现的Failed to transfer file错误</a></li><li><a href="http://www.javatang.com/archives/2007/03/30/1025157.html" rel="bookmark" class="crp_title">Windows下安装zip包版本的MySQL</a></li><li><a href="http://www.javatang.com/archives/2006/03/15/55497.html" rel="bookmark" class="crp_title">一款非常不错的正则表达式测试工具JRegexpTester</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://www.javatang.com/archives/2010/09/07/2623462.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>给Spring Security中的j_spring_security_check等改名</title>
		<link>http://www.javatang.com/archives/2010/09/02/4325457.html</link>
		<comments>http://www.javatang.com/archives/2010/09/02/4325457.html#comments</comments>
		<pubDate>Thu, 02 Sep 2010 03:43:25 +0000</pubDate>
		<dc:creator>Jet</dc:creator>
				<category><![CDATA[JavaPlateform]]></category>
		<category><![CDATA[spring]]></category>
		<category><![CDATA[spring security]]></category>

		<guid isPermaLink="false">http://www.javatang.com/?p=457</guid>
		<description><![CDATA[默认情况下，Spring Security（SS）的登录验证提交的Servlet默认名称为j_spring_security_check，但是很多情况下想将这个名称修改掉，后来终于在Spring的官方论坛上找到了一个哥们儿提出的类似的问题（见参考资料），原来只要修改&#60;form-login&#62;节点login-processing-url属性就可以了，其他的一些设置可以参考官方的文档：B.1.5 The &#60;form-login&#62; Element。 对于SS的使用及配置文件的含义可以参考这篇文章：spring-security3 配置和使用，总结的非常到位了。 参考资料： Rename j_spring_security_check to j_security_check Related Posts:SimpleJdbcInsert使用executeAndReturnKeyHolder方法返回主键时需要注意的一个地方PHP常见问题及解答ExtJS中TextField或TextArea支持按键事件的条件ExtJS中调用focus方法无效的解决方法Spring MVC中修改校验的异常信息]]></description>
			<content:encoded><![CDATA[<p>默认情况下，Spring Security（SS）的登录验证提交的Servlet默认名称为j_spring_security_check，但是很多情况下想将这个名称修改掉，后来终于在Spring的官方论坛上找到了一个哥们儿提出的类似的问题（见参考资料），原来只要修改&lt;form-login&gt;节点login-processing-url属性就可以了，其他的一些设置可以参考官方的文档：<a href="http://static.springsource.org/spring-security/site/docs/3.0.x/reference/appendix-namespace.html#nsa-form-login" target="_blank">B.1.5 The &lt;form-login&gt; Element</a>。</p>
<p>对于SS的使用及配置文件的含义可以参考这篇文章：<a href="http://www.javaeye.com/topic/696645" target="_blank">spring-security3 配置和使用</a>，总结的非常到位了。</p>
<p>参考资料：<br />
<a href="http://forum.springsource.org/showthread.php?t=89286" target="_blank">Rename j_spring_security_check to j_security_check</a></p>
<div id="crp_related"><h2>Related Posts:</h2><ul><li><a href="http://www.javatang.com/archives/2010/08/09/3212438.html" rel="bookmark" class="crp_title">SimpleJdbcInsert使用executeAndReturnKeyHolder方法返回主键时需要注意的一个地方</a></li><li><a href="http://www.javatang.com/archives/2007/06/08/5540166.html" rel="bookmark" class="crp_title">PHP常见问题及解答</a></li><li><a href="http://www.javatang.com/archives/2010/07/07/5638409.html" rel="bookmark" class="crp_title">ExtJS中TextField或TextArea支持按键事件的条件</a></li><li><a href="http://www.javatang.com/archives/2010/07/08/4916413.html" rel="bookmark" class="crp_title">ExtJS中调用focus方法无效的解决方法</a></li><li><a href="http://www.javatang.com/archives/2010/11/23/5817513.html" rel="bookmark" class="crp_title">Spring MVC中修改校验的异常信息</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://www.javatang.com/archives/2010/09/02/4325457.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SimpleJdbcInsert使用executeAndReturnKeyHolder方法返回主键时需要注意的一个地方</title>
		<link>http://www.javatang.com/archives/2010/08/09/3212438.html</link>
		<comments>http://www.javatang.com/archives/2010/08/09/3212438.html#comments</comments>
		<pubDate>Mon, 09 Aug 2010 05:32:12 +0000</pubDate>
		<dc:creator>Jet</dc:creator>
				<category><![CDATA[JavaPlateform]]></category>
		<category><![CDATA[spring]]></category>

		<guid isPermaLink="false">http://www.javatang.com/?p=438</guid>
		<description><![CDATA[Spring的SimpleJdbcInsert发挥了Simple风格，与SimpleJdbcTemplate同属于Simple体系。该类为向数据库中插入数据提供了一个非常快捷的方式，另外它还提供了一套用于返回插入数据的主键的方法：executeAndReturnKeyHolder、executeAndReturnKey。 查看API的时候可以看到executeAndReturnKey这个方法的返回类型是Number类型，当时我就再想如果主键的类型是String类型呢，比如UUID。后来看到还有一个executeAndReturnKeyHolder方法，返回的是一个KeyHolder对象，可以通过keyHolder#getKeys()获取主键的值，另外还有一个getKeyList()方法用于复合主键的情况，这里先撇开不说。 看完API之后那就可以动手了，代码如下： // jdbcInsert是SimpleJdbcInsert对象 Map&#60;String, Object&#62; data = Maps.newHashMap(); data.put(&#34;id&#34;, &#34;t0001&#34;); data.put(&#34;name&#34;, &#34;Tom&#34;); data.put(&#34;age&#34;, 24); KeyHolder&#160;keyHolder = jdbcInsert.withTableName(&#34;t_tablename&#34;) &#160; &#160; &#160; &#160; .usingColumns(&#34;id&#34;, &#34;name&#34;, &#34;age&#34;) &#160; &#160; &#160; &#160; .usingGeneratedKeyColumns(&#34;id&#34;) &#160; &#160; &#160; &#160; .executeAndReturnKeyHolder(data); // 下面主要是对keyHoder进行分析 if(keyHolder == null)&#160;{ &#160; &#160; return&#160;null; } Map&#60;String, Object&#62; keys = keyHolder.getKeys(); if(keys == null &#124;&#124; keys.size() [...]]]></description>
			<content:encoded><![CDATA[<p>Spring的<a href="http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/jdbc/core/simple/SimpleJdbcInsert.html" target="_blank">SimpleJdbcInsert</a>发挥了Simple风格，与<a href="http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/jdbc/core/simple/SimpleJdbcTemplate.html" target="_blank">SimpleJdbcTemplate</a>同属于Simple体系。该类为向数据库中插入数据提供了一个非常快捷的方式，另外它还提供了一套用于返回插入数据的主键的方法：executeAndReturnKeyHolder、executeAndReturnKey。</p>
<p>查看API的时候可以看到<a href="http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/jdbc/core/simple/SimpleJdbcInsert.html#executeAndReturnKey(java.util.Map)" target="_blank">executeAndReturnKey</a>这个方法的返回类型是Number类型，当时我就再想如果主键的类型是String类型呢，比如UUID。后来看到还有一个executeAndReturnKeyHolder方法，返回的是一个<a href="http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/jdbc/support/KeyHolder.html" target="_blank">KeyHolder</a>对象，可以通过keyHolder#getKeys()获取主键的值，另外还有一个getKeyList()方法用于复合主键的情况，这里先撇开不说。</p>
<p>看完API之后那就可以动手了，代码如下：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">// jdbcInsert是SimpleJdbcInsert对象</span></li>
<li><span style="color: Blue;">Map</span><span style="color: Gray;">&lt;</span><span style="color: Blue;">String</span><span style="color: Gray;">, </span><span style="color: Blue;">Object</span><span style="color: Gray;">&gt; </span><span style="color: Blue;">data</span><span style="color: Gray;"> = </span><span style="color: Blue;">Maps</span><span style="color: Gray;">.</span><span style="color: Blue;">newHashMap</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Blue;">data</span><span style="color: Gray;">.</span><span style="color: Blue;">put</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">id</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">, </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">t0001</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Blue;">data</span><span style="color: Gray;">.</span><span style="color: Blue;">put</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">name</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">, </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">Tom</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Blue;">data</span><span style="color: Gray;">.</span><span style="color: Blue;">put</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">age</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">, </span><span style="color: Maroon;">24</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Blue;">KeyHolder</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">keyHolder</span><span style="color: Gray;"> = </span><span style="color: Blue;">jdbcInsert</span><span style="color: Gray;">.</span><span style="color: Blue;">withTableName</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">t_tablename</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; .</span><span style="color: Blue;">usingColumns</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">id</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">, </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">name</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">, </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">age</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; .</span><span style="color: Blue;">usingGeneratedKeyColumns</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">id</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; .</span><span style="color: Blue;">executeAndReturnKeyHolder</span><span style="color: Olive;">(</span><span style="color: Blue;">data</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: #ffa500;">// 下面主要是对keyHoder进行分析</span></li>
<li><span style="color: Green;">if</span><span style="color: Olive;">(</span><span style="color: Blue;">keyHolder</span><span style="color: Gray;"> == </span><span style="color: Green;">null</span><span style="color: Olive;">)</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: Green;">null</span><span style="color: Gray;">;</span></li>
<li><span style="color: Olive;">}</span></li>
<li><span style="color: Blue;">Map</span><span style="color: Gray;">&lt;</span><span style="color: Blue;">String</span><span style="color: Gray;">, </span><span style="color: Blue;">Object</span><span style="color: Gray;">&gt; </span><span style="color: Blue;">keys</span><span style="color: Gray;"> = </span><span style="color: Blue;">keyHolder</span><span style="color: Gray;">.</span><span style="color: Blue;">getKeys</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Green;">if</span><span style="color: Olive;">(</span><span style="color: Blue;">keys</span><span style="color: Gray;"> == </span><span style="color: Green;">null</span><span style="color: Gray;"> || </span><span style="color: Blue;">keys</span><span style="color: Gray;">.</span><span style="color: Blue;">size</span><span style="color: Olive;">()</span><span style="color: Gray;"> == </span><span style="color: Maroon;">0</span><span style="color: Gray;"> || </span><span style="color: Blue;">keys</span><span style="color: Gray;">.</span><span style="color: Blue;">values</span><span style="color: Olive;">()</span><span style="color: Gray;">.</span><span style="color: Blue;">size</span><span style="color: Olive;">()</span><span style="color: Gray;"> == </span><span style="color: Maroon;">0</span><span style="color: Olive;">)</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: Green;">null</span><span style="color: Gray;">;</span></li>
<li><span style="color: Olive;">}</span></li>
<li><span style="color: Blue;">Object</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">key</span><span style="color: Gray;"> = </span><span style="color: Blue;">keys</span><span style="color: Gray;">.</span><span style="color: Blue;">values</span><span style="color: Olive;">()</span><span style="color: Gray;">.</span><span style="color: Blue;">toArray</span><span style="color: Olive;">()[</span><span style="color: Maroon;">0</span><span style="color: Olive;">]</span><span style="color: Gray;">;</span></li>
<li><span style="color: Green;">if</span><span style="color: Olive;">(</span><span style="color: Blue;">key</span><span style="color: Gray;"> == </span><span style="color: Green;">null</span><span style="color: Gray;"> || !</span><span style="color: Olive;">(</span><span style="color: Blue;">key</span><span style="color: Gray;">&nbsp;</span><span style="color: Green;">instanceof</span><span style="color: Gray;"> </span><span style="color: Blue;">Serializable</span><span style="color: Olive;">))</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: Green;">null</span><span style="color: Gray;">;</span></li>
<li><span style="color: Olive;">}</span></li>
<li><span style="color: Green;">if</span><span style="color: Olive;">(</span><span style="color: Blue;">key</span><span style="color: Gray;">&nbsp;</span><span style="color: Green;">instanceof</span><span style="color: Gray;"> </span><span style="color: Blue;">Number</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">Long</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">k</span><span style="color: Gray;"> = </span><span style="color: Olive;">(</span><span style="color: Blue;">Long</span><span style="color: Olive;">)</span><span style="color: Blue;">key</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">(</span><span style="color: Blue;">idType</span><span style="color: Gray;"> == </span><span class="hl-types">int</span><span style="color: Gray;">.</span><span style="color: Green;">class</span><span style="color: Gray;"> || </span><span style="color: Blue;">idType</span><span style="color: Gray;"> == </span><span style="color: Blue;">Integer</span><span style="color: Gray;">.</span><span style="color: Green;">class</span><span style="color: Olive;">)</span><span style="color: Gray;"> ? </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">k</span><span style="color: Gray;">.</span><span style="color: Blue;">intValue</span><span style="color: Olive;">()</span><span style="color: Gray;"> : </span><span style="color: Blue;">k</span><span style="color: Gray;">;</span></li>
<li><span style="color: Olive;">}</span><span style="color: Gray;">&nbsp;</span><span style="color: Green;">else</span><span style="color: Gray;"> </span><span style="color: Green;">if</span><span style="color: Olive;">(</span><span style="color: Blue;">key</span><span style="color: Gray;"> </span><span style="color: Green;">instanceof</span><span style="color: Gray;"> </span><span style="color: Blue;">String</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">(</span><span style="color: Blue;">String</span><span style="color: Olive;">)</span><span style="color: Blue;">key</span><span style="color: Gray;">;</span></li>
<li><span style="color: Olive;">}</span><span style="color: Gray;">&nbsp;</span><span style="color: Green;">else</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">(</span><span style="color: Blue;">Serializable</span><span style="color: Olive;">)</span><span style="color: Blue;">key</span><span style="color: Gray;">;</span></li>
<li><span style="color: Olive;">}</span><span style="color: Gray;">&nbsp;</span><span style="color: #ffa500;">// end of if(key instanceof Number)</span></li></ol></div>
<p>如果主键id的类型是int或long上面的代码没有任何问题，但是如果是自定义的UUID等String类型则问题出现了，提示下面的错误：</p>
<blockquote><p>
org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback; uncategorized SQLException for SQL []; SQL state [HY000]; error code [1364]; Field &#8216;id&#8217; doesn&#8217;t have a default value; nested exception is java.sql.SQLException: Field &#8216;id&#8217; doesn&#8217;t have a default value
</p></blockquote>
<p>有些奇怪了吧？明明id的值已经传入了，但是错误的提示应该是没有传入id的值。进入到Spring的源代码中，发现代码里面有一些debug信息，于是在log4j中将debug打开：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline">log4j.logger.org.springframework.jdbc.core=debug</li></ol></div>
<p>从打印出来的信息中看，Spring自动生成的Insert语句中竟然没有id字段！！！继续最终源代码，先在org.springframework.jdbc.core.simple.AbstractJdbcInsert类中找到protected void compileInternal()方法，在代码前加上一个debug信息：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">protected</span><span style="color: Gray;"> </span><span class="hl-types">void</span><span style="color: Gray;"> </span><span style="color: Blue;">compileInternal</span><span style="color: Olive;">()</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">logger</span><span style="color: Gray;">.</span><span style="color: Blue;">debug</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">getGeneratedKeyNames: </span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> + </span><span style="color: Blue;">getColumnNames</span><span style="color: Olive;">())</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">tableMetaDataContext</span><span style="color: Gray;">.</span><span style="color: Blue;">processMetaData</span><span style="color: Olive;">(</span><span style="color: Blue;">getJdbcTemplate</span><span style="color: Olive;">()</span><span style="color: Gray;">.</span><span style="color: Blue;">getDataSource</span><span style="color: Olive;">()</span><span style="color: Gray;">, </span><span style="color: Blue;">getColumnNames</span><span style="color: Olive;">()</span><span style="color: Gray;">, </span><span style="color: Blue;">getGeneratedKeyNames</span><span style="color: Olive;">())</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; ...</span></li>
<li><span style="color: Olive;">}</span></li></ol></div>
<p>这个时候打印的列表中有id字段，继续最终，最后终于在<a href="http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/jdbc/core/metadata/TableMetaDataContext.html#createInsertString(java.lang.String[])" target="_blank">TableMetaDataContext#createInsertString(java.lang.String[])</a>方法里面找到，关键的代码片段如下：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">for</span><span style="color: Gray;"> </span><span style="color: Olive;">(</span><span style="color: Blue;">String</span><span style="color: Gray;"> </span><span style="color: Blue;">columnName</span><span style="color: Gray;"> : </span><span style="color: Green;">this</span><span style="color: Gray;">.</span><span style="color: Blue;">getTableColumns</span><span style="color: Olive;">())</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">// 这里将SimpleJdbcInsert#usingGeneratedKeyColumns方法中所设置的字段去除了</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">if</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">(</span><span style="color: Gray;">!</span><span style="color: Blue;">keys</span><span style="color: Gray;">.</span><span style="color: Blue;">contains</span><span style="color: Olive;">(</span><span style="color: Blue;">columnName</span><span style="color: Gray;">.</span><span style="color: Blue;">toUpperCase</span><span style="color: Olive;">()))</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">columnCount</span><span style="color: Gray;">++;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">if</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">(</span><span style="color: Blue;">columnCount</span><span style="color: Gray;"> &gt; </span><span style="color: Maroon;">1</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">insertStatement</span><span style="color: Gray;">.</span><span style="color: Blue;">append</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">, </span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">insertStatement</span><span style="color: Gray;">.</span><span style="color: Blue;">append</span><span style="color: Olive;">(</span><span style="color: Blue;">columnName</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li></ol></div>
<p>看到这里，我也猛然恍然大悟了。既然在INSERT INTO语句中设置了UUID的值，那这里就不需要再使用KeyHolder进行返回了，直接获取就是了。这也是为什么KeyHolder中的getKey()方法的返回类型是Number的原因了，因为通常来说需要Spring返回的就是插入数据库中的自增类型的主键值。</p>
<div id="crp_related"><h2>Related Posts:</h2><ul><li><a href="http://www.javatang.com/archives/2006/06/13/242443.html" rel="bookmark" class="crp_title">Oracle中的”值和null以及java中的null区别</a></li><li><a href="http://www.javatang.com/archives/2010/11/23/5817513.html" rel="bookmark" class="crp_title">Spring MVC中修改校验的异常信息</a></li><li><a href="http://www.javatang.com/archives/2006/08/30/285461.html" rel="bookmark" class="crp_title">使用java.util.zip对字符串进行压缩和解压缩</a></li><li><a href="http://www.javatang.com/archives/2007/03/13/5026128.html" rel="bookmark" class="crp_title">按照指定的类型排序</a></li><li><a href="http://www.javatang.com/archives/2006/06/27/512049.html" rel="bookmark" class="crp_title">一个理解“单例模式”最好的例子</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://www.javatang.com/archives/2010/08/09/3212438.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>common-configuration中CompositeConfiguration类的一个需要注意的地方</title>
		<link>http://www.javatang.com/archives/2010/07/29/0513435.html</link>
		<comments>http://www.javatang.com/archives/2010/07/29/0513435.html#comments</comments>
		<pubDate>Thu, 29 Jul 2010 08:05:13 +0000</pubDate>
		<dc:creator>Jet</dc:creator>
				<category><![CDATA[JavaPlateform]]></category>
		<category><![CDATA[Configuration]]></category>

		<guid isPermaLink="false">http://www.javatang.com/?p=435</guid>
		<description><![CDATA[在Common-Configuration中，CompositeConfiguration类用来对多个配置文件进行组合处理，该类有一个getNumberOfConfigurations()方法，用来读取Configuration对象的个数，但是如果执行下面的代码： CompositeConfiguration config = new CompositeConfiguration(); int number = config.getNumberOfConfigurations(); System.out.println(number); 这个时候会发现number的值是1而不是0，虽然没有向其中添加任何Configuration对象。CompositeConfiguration构造方法的代码如下： public CompositeConfiguration() &#160; &#160; { &#160; &#160; &#160; &#160; clear(); &#160; &#160; } &#160; &#160; &#160; public&#160;void clear() &#160; &#160; { &#160; &#160; &#160; &#160; configList.clear(); &#160; &#160; &#160; &#160; // recreate the in memory configuration &#160; &#160; &#160; &#160; inMemoryConfiguration = new&#160;BaseConfiguration(); [...]]]></description>
			<content:encoded><![CDATA[<p>在<a href="http://commons.apache.org/configuration/" target="_blank">Common-Configuration</a>中，CompositeConfiguration类用来对多个配置文件进行组合处理，该类有一个getNumberOfConfigurations()方法，用来读取Configuration对象的个数，但是如果执行下面的代码：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Blue;">CompositeConfiguration</span><span style="color: Gray;"> </span><span style="color: Blue;">config</span><span style="color: Gray;"> = </span><span style="color: Green;">new</span><span style="color: Gray;"> </span><span style="color: Blue;">CompositeConfiguration</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span class="hl-types">int</span><span style="color: Gray;"> </span><span style="color: Blue;">number</span><span style="color: Gray;"> = </span><span style="color: Blue;">config</span><span style="color: Gray;">.</span><span style="color: Blue;">getNumberOfConfigurations</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Blue;">System</span><span style="color: Gray;">.</span><span style="color: Blue;">out</span><span style="color: Gray;">.</span><span style="color: Blue;">println</span><span style="color: Olive;">(</span><span style="color: Blue;">number</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li></ol></div>
<p>这个时候会发现number的值是1而不是0，虽然没有向其中添加任何Configuration对象。CompositeConfiguration构造方法的代码如下：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">public</span><span style="color: Gray;"> </span><span style="color: Blue;">CompositeConfiguration</span><span style="color: Olive;">()</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">clear</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">public</span><span style="color: Gray;">&nbsp;</span><span class="hl-types">void</span><span style="color: Gray;"> </span><span style="color: Blue;">clear</span><span style="color: Olive;">()</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">configList</span><span style="color: Gray;">.</span><span style="color: Blue;">clear</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">// recreate the in memory configuration</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">inMemoryConfiguration</span><span style="color: Gray;"> = </span><span style="color: Green;">new</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">BaseConfiguration</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">((</span><span style="color: Blue;">BaseConfiguration</span><span style="color: Olive;">)</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">inMemoryConfiguration</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">setThrowExceptionOnMissing</span><span style="color: Olive;">(</span><span style="color: Blue;">isThrowExceptionOnMissing</span><span style="color: Olive;">())</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">((</span><span style="color: Blue;">BaseConfiguration</span><span style="color: Olive;">)</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">inMemoryConfiguration</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">setListDelimiter</span><span style="color: Olive;">(</span><span style="color: Blue;">getListDelimiter</span><span style="color: Olive;">())</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">((</span><span style="color: Blue;">BaseConfiguration</span><span style="color: Olive;">)</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">inMemoryConfiguration</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">setDelimiterParsingDisabled</span><span style="color: Olive;">(</span><span style="color: Blue;">isDelimiterParsingDisabled</span><span style="color: Olive;">())</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">configList</span><span style="color: Gray;">.</span><span style="color: Blue;">add</span><span style="color: Olive;">(</span><span style="color: Blue;">inMemoryConfiguration</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span></li></ol></div>
<p>可以看到默认构造方法中调用了clear()方法，而clear方法中自动添加了一个BaseConfiguration对象，该对象用于存放自身的一些配置信息。所以这个时候的数量是1而不是0，这一点容易让人迷惑。</p>
<p>参考资料：<br />
<a href="http://permalink.gmane.org/gmane.comp.jakarta.commons.user/10923" target="_blank">Re: [Configuration] CompositeConfiguration.getNumberOfConfigurations( ) question</a></p>
<div id="crp_related"><h2>Related Posts:</h2><ul><li><a href="http://www.javatang.com/archives/2007/03/05/5722110.html" rel="bookmark" class="crp_title">Java中文排序</a></li><li><a href="http://www.javatang.com/archives/2006/06/27/512049.html" rel="bookmark" class="crp_title">一个理解“单例模式”最好的例子</a></li><li><a href="http://www.javatang.com/archives/2008/06/19/0308269.html" rel="bookmark" class="crp_title">JPA和Hibernate注解的继承问题</a></li><li><a href="http://www.javatang.com/archives/2006/03/09/37292.html" rel="bookmark" class="crp_title">Code Test</a></li><li><a href="http://www.javatang.com/archives/2007/03/13/5026128.html" rel="bookmark" class="crp_title">按照指定的类型排序</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://www.javatang.com/archives/2010/07/29/0513435.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>客户真正的需求原来是这样的</title>
		<link>http://www.javatang.com/archives/2010/07/07/2157401.html</link>
		<comments>http://www.javatang.com/archives/2010/07/07/2157401.html#comments</comments>
		<pubDate>Wed, 07 Jul 2010 01:21:57 +0000</pubDate>
		<dc:creator>Jet</dc:creator>
				<category><![CDATA[JavaPlateform]]></category>

		<guid isPermaLink="false">http://www.javatang.com/?p=401</guid>
		<description><![CDATA[Related Posts:Ubuntu下面安装Macbuntu及安装之后需要修改的几个问题在VC++ 2005中编写SAPI程序在Eclipse WTP中加入Resin server adapterm2eclipse插件使用中提示jar包找不到的解决方法JRebel运行缓慢或提示内存不足的解决方法]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.javatang.com/wp-content/xq.png" target="_blank"><img src="http://www.javatang.com/wp-content/xq-300x190.png" alt="" title="客户真正的需求原来是这样的" width="300" height="190" class="aligncenter size-medium wp-image-402" /></a></p>
<div id="crp_related"><h2>Related Posts:</h2><ul><li><a href="http://www.javatang.com/archives/2010/11/27/1657519.html" rel="bookmark" class="crp_title">Ubuntu下面安装Macbuntu及安装之后需要修改的几个问题</a></li><li><a href="http://www.javatang.com/archives/2009/02/10/4240284.html" rel="bookmark" class="crp_title">在VC++ 2005中编写SAPI程序</a></li><li><a href="http://www.javatang.com/archives/2009/12/30/0134324.html" rel="bookmark" class="crp_title">在Eclipse WTP中加入Resin server adapter</a></li><li><a href="http://www.javatang.com/archives/2010/01/31/3312389.html" rel="bookmark" class="crp_title">m2eclipse插件使用中提示jar包找不到的解决方法</a></li><li><a href="http://www.javatang.com/archives/2010/11/29/3337530.html" rel="bookmark" class="crp_title">JRebel运行缓慢或提示内存不足的解决方法</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://www.javatang.com/archives/2010/07/07/2157401.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>m2eclipse插件使用中提示jar包找不到的解决方法</title>
		<link>http://www.javatang.com/archives/2010/01/31/3312389.html</link>
		<comments>http://www.javatang.com/archives/2010/01/31/3312389.html#comments</comments>
		<pubDate>Sun, 31 Jan 2010 08:33:12 +0000</pubDate>
		<dc:creator>Jet</dc:creator>
				<category><![CDATA[JavaPlateform]]></category>
		<category><![CDATA[m2eclipse]]></category>
		<category><![CDATA[maven]]></category>

		<guid isPermaLink="false">http://www.javatang.com/?p=389</guid>
		<description><![CDATA[在Eclipse中使用m2eclipse开发Maven项目的时候，如果是创建Module项目的时候经常会莫名的出现找不到子模块包的错误信息，但是pom.xml已经加入了改包的引用，并且使用mvn deploy命令等编译也没有任何错误，后来在Eclipse中的Marks View中发现一个项目的warning信息： Classpath entry org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER will not be exported or published. Runtime ClassNotFoundExceptions may result. 后来Google了一下，解决这个warning的步骤如下： 1. 首先右键项目，然后选择“Properties”，在左边选择Java Build Path，然后在右边的“Order andExport”标签中选中最下面的“Maven Dependencies”，然后确定； 2. 选择“Marks”或“Problems”视图，然后选中那个warning信息，右键选择“Quick Fix”，然后直接选择“Finish”，这样就可以了。 如果还是出现错误的信息，直接在上面的视图中右键删除提示就可以了。 参考资料： Why the “MAVEN2_CLASSPATH_CONTAINER will not be exported or published” Related Posts:在Eclipse WTP中加入Resin server adapter在VC++ 2005中编写SAPI程序Maven2部署构件到Nexus时出现的Failed to transfer file错误Ubuntu下面安装Macbuntu及安装之后需要修改的几个问题客户真正的需求原来是这样的]]></description>
			<content:encoded><![CDATA[<p>在Eclipse中使用m2eclipse开发Maven项目的时候，如果是创建Module项目的时候经常会莫名的出现找不到子模块包的错误信息，但是pom.xml已经加入了改包的引用，并且使用mvn deploy命令等编译也没有任何错误，后来在Eclipse中的Marks View中发现一个项目的warning信息：</p>
<blockquote><p>
Classpath entry org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER will not be exported or published. Runtime ClassNotFoundExceptions may result.
</p></blockquote>
<p>后来Google了一下，解决这个warning的步骤如下：<br />
1. 首先右键项目，然后选择“Properties”，在左边选择Java Build Path，然后在右边的“Order andExport”标签中选中最下面的“Maven Dependencies”，然后确定；<br />
<img src="http://www.javatang.com/wp-content/maven_warning.png" alt="" title="maven_warning" width="669" height="468" class="alignnone size-full wp-image-390" /><br />
2. 选择“Marks”或“Problems”视图，然后选中那个warning信息，右键选择“Quick Fix”，然后直接选择“Finish”，这样就可以了。</p>
<p>如果还是出现错误的信息，直接在上面的视图中右键删除提示就可以了。</p>
<p>参考资料：<br />
<a href="http://geertschuring.wordpress.com/2009/03/05/why-the-maven2_classpath_container-will-not-be-exported-or-published/" target="_blank">Why the “MAVEN2_CLASSPATH_CONTAINER will not be exported or published”</a></p>
<div id="crp_related"><h2>Related Posts:</h2><ul><li><a href="http://www.javatang.com/archives/2009/12/30/0134324.html" rel="bookmark" class="crp_title">在Eclipse WTP中加入Resin server adapter</a></li><li><a href="http://www.javatang.com/archives/2009/02/10/4240284.html" rel="bookmark" class="crp_title">在VC++ 2005中编写SAPI程序</a></li><li><a href="http://www.javatang.com/archives/2010/01/23/4518375.html" rel="bookmark" class="crp_title">Maven2部署构件到Nexus时出现的Failed to transfer file错误</a></li><li><a href="http://www.javatang.com/archives/2010/11/27/1657519.html" rel="bookmark" class="crp_title">Ubuntu下面安装Macbuntu及安装之后需要修改的几个问题</a></li><li><a href="http://www.javatang.com/archives/2010/07/07/2157401.html" rel="bookmark" class="crp_title">客户真正的需求原来是这样的</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://www.javatang.com/archives/2010/01/31/3312389.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Served from: www.javatang.com @ 2012-02-10 09:28:44 -->
