﻿<?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-重装上阵-随笔分类-Java 随手贴 </title><link>http://www.blogjava.net/cctvx1/category/17405.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 03:41:24 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 03:41:24 GMT</pubDate><ttl>60</ttl><item><title>ActiveMQ 实践之路(一) 启动你的ActiveMQ</title><link>http://www.blogjava.net/cctvx1/archive/2007/02/08/98835.html</link><dc:creator>Dr.Water</dc:creator><author>Dr.Water</author><pubDate>Thu, 08 Feb 2007 09:54:00 GMT</pubDate><guid>http://www.blogjava.net/cctvx1/archive/2007/02/08/98835.html</guid><wfw:comment>http://www.blogjava.net/cctvx1/comments/98835.html</wfw:comment><comments>http://www.blogjava.net/cctvx1/archive/2007/02/08/98835.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cctvx1/comments/commentRss/98835.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cctvx1/services/trackbacks/98835.html</trackback:ping><description><![CDATA[
		<p>作者 cctvx1<br /> 关键字:ActiveMQ,实践 <br /><br />    一.安装ActiveMQ</p>
		<p>       首先去<a href="http://activemq.apache.org/download.html">http://activemq.apache.org/download.html</a> 下载最新版本4.1.0release (<a href="http://activemq.apache.org/activemq-410-release.html">http://activemq.apache.org/activemq-410-release.html</a>),<br />    解压apache-activemq-4.1-incubator.zip(或者apache-activemq-4.1-incubator.tar.gz)目录如下:<br />       <br />       +bin       (windows下面的bat和unix/linux下面的sh)<br />       +conf      (activeMQ配置目录,包含最基本的activeMQ配置文件)<br />       +data      (默认是空的)<br />       +docs      (index,replease版本里面没有文档,-.-b不知道为啥不带)<br />       +example   (几个例子<br />       +lib       (activemMQ使用到的lib)<br />       -apache-activemq-4.1-incubator.jar  (ActiveMQ的binary)<br />       -LICENSE.txt       <br />       -NOTICE.txt        <br />       -README.txt<br />       -user-guide.html</p>
		<p>
				<br />       你可以使用bin\activemq.bat(activemq) 启动,如果一切顺利,你就会看见类似下面的信息<br />      (细节可能不一样,比如路径,或者jmx,jdbc信息)</p>
		<p>  ACTIVEMQ_HOME: D:\java\framework_and_lib\activemq\apache-activemq-4.1-incubator\<br />bin\..<br />Loading message broker from: xbean:activemq.xml<br />INFO  BrokerService                  - ActiveMQ null JMS Message Broker (localho<br />st) is starting<br />INFO  BrokerService                  - For help or more information please see:<br /><a href="http://incubator.apache.org/activemq/">http://incubator.apache.org/activemq/</a><br />INFO  ManagementContext              - JMX consoles can connect to service:jmx:r<br />mi:///jndi/rmi://localhost:1099/jmxrmi<br />INFO  JDBCPersistenceAdapter         - Database driver recognized: [apache_derby<br />_embedded_jdbc_driver]<br />INFO  DefaultDatabaseLocker          - Attempting to acquire the exclusive lock<br />to become the Master broker<br />INFO  DefaultDatabaseLocker          - Becoming the master on dataSource: org.ap<br /><a href="mailto:ache.derby.jdbc.EmbeddedDataSource@1d840cd">ache.derby.jdbc.EmbeddedDataSource@1d840cd</a><br />INFO  JournalPersistenceAdapter      - Journal Recovery Started from: Active Jou<br />rnal: using 5 x 20.0 Megs at: D:\java\framework_and_lib\activemq\apache-activemq<br />-4.1-incubator\activemq-data\journal<br />INFO  JournalPersistenceAdapter      - Journal Recovered: 0 message(s) in transa<br />ctions recovered.<br />INFO  TransportServerThreadSupport   - Listening for connections at: tcp://P-SUW<br />EI:61616<br />WARN  MulticastDiscoveryAgent        - brokerName not set<br />INFO  TransportConnector             - Connector default Started<br />INFO  TransportServerThreadSupport   - Listening for connections at: stomp://P-S<br />UWEI:61613<br />INFO  TransportConnector             - Connector stomp Started<br />INFO  NetworkConnector               - Network Connector default Started<br />INFO  BrokerService                  - ActiveMQ JMS Message Broker (localhost, I<br />D:P-SUWEI-1207-1170916242296-1:0) started      </p>
		<p>         *。几个小提示<br />  1. 这个仅仅是最基础的ActiveMQ的配置,很多地方都没有配置因此不要直接使用这个配置用于生产系统<br />  2. 有的时候由于端口被占用,导致ActiveMQ错误,ActiveMQ可能需要以下端口1099(JMX),61616(默认的TransportConnector)<br />  3. 如果没有物理网卡,或者MS的LoopBackAdpater Multicast会报一个错误</p>
		<p>     二. 测试你的ActiveMQ<br />        <br />          由于ActiveMQ是一个独立的jms provider,所以我们不需要其他任何第三方服务器就可以马上做我们的测试了.编译<br />     example目录下面的程序<br />          <br />   ProducerTool/ConsumerTool 是JMS参考里面提到的典型应用,Producer产生消息,Consumer消费消息<br />   而且这个例子还可以加入参数帮助你测试刚才启动的本地ActiveMQ或者是远程的ActiveMQ</p>
		<p>   ProducerTool [url] broker的地址,默认的是tcp://localhost:61616 <br />                [true|flase] 是否使用topic,默认是false<br />         [subject] subject的名字,默认是TOOL.DEFAULT<br />         [durabl] 是否持久化消息,默认是false<br />         [messagecount] 发送消息数量,默认是10<br />         [messagesize] 消息长度,默认是255<br />         [clientID] durable为true的时候,需要配置clientID<br />         [timeToLive] 消息存活时间 <br />         [sleepTime] 发送消息中间的休眠时间<br />         [transacte]  是否采用事务</p>
		<p>          <br />          ConsumerTool [url] broker的地址,默认的是tcp://localhost:61616 <br />                [true|flase] 是否使用topic,默认是false<br />         [subject] subject的名字,默认是TOOL.DEFAULT<br />         [durabl] 是否持久化消息,默认是false<br />         [maxiumMessages] 接受最大消息数量,0表示不限制<br />        <br />         [clientID] durable为true的时候,需要配置clientID<br />         <br />         [transacte]  是否采用事务<br />         [sleepTime]  接受消息中间的休眠时间,默认是0,onMeesage方法不休眠<br />         [receiveTimeOut] 接受超时</p>
		<p>          我们这样可以使用:<br />   java -classpath .\apache-activemq-4.1-incubator.jar;example\bin ProducerTool  tcp://192.168.3.142:61616 test.mysubject<br />   java -classpath .\apache-activemq-4.1-incubator.jar;example\bin ConsumerTool  tcp://192.168.3.142:61616 test.mysubject</p>
		<p>   当然你可以使用上面的参数进行更复杂的测试,持久,事务</p>
		<p>   如果出现下面的信息,恭喜你,你的ActiveMQ已经能够工作了<br />         <br />  Connecting to URL: tcp://192.168.3.142:61616<br />  Publishing a Message with size 255 to queue: TOOL.DEFAULT<br />  Using non-durable publishing<br />  Sleeping between publish 0 ms<br />  Sending message: Message: 0 sent at: Thu Feb 08 15:05:34 CST 2007  ...<br />  Sending message: Message: 1 sent at: Thu Feb 08 15:05:34 CST 2007  ...<br />         。。。。。。。。</p>
		<p>
				<br />  Connecting to URL: tcp://192.168.3.142:61616<br />  Consuming queue: test.mysubject<br />         Using non-durable subscription<br />         Received: Message: 0 sent at: Thu Feb 08 14:51:34 CST 2007  ...<br />         Received: Message: 1 sent at: Thu Feb 08 14:51:34 CST 2007  ...<br />  。。。。</p>
		<p>
				<br />         三.小结<br />      <br />      我们已经下载,启动,并且用程序测试了我们的ActiveMQ,而后面将在这个能跑得ActiveMQ进一步的走下去,一步一步展示ActiveMQ的高级特性。</p>
<img src ="http://www.blogjava.net/cctvx1/aggbug/98835.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cctvx1/" target="_blank">Dr.Water</a> 2007-02-08 17:54 <a href="http://www.blogjava.net/cctvx1/archive/2007/02/08/98835.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ActiveMQ 实践之路(前言)</title><link>http://www.blogjava.net/cctvx1/archive/2007/02/07/98457.html</link><dc:creator>Dr.Water</dc:creator><author>Dr.Water</author><pubDate>Tue, 06 Feb 2007 16:36:00 GMT</pubDate><guid>http://www.blogjava.net/cctvx1/archive/2007/02/07/98457.html</guid><wfw:comment>http://www.blogjava.net/cctvx1/comments/98457.html</wfw:comment><comments>http://www.blogjava.net/cctvx1/archive/2007/02/07/98457.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cctvx1/comments/commentRss/98457.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cctvx1/services/trackbacks/98457.html</trackback:ping><description><![CDATA[
		<p>   作者cctvx1<br />   关键字:ActiveMQ,实践<br />    <br />   一.ActiveMQ是什么?  <br />      ActiveMQ is the most popular and powerful open source Message Bus.<br />                                                 引用ActiveMQ官方网站</p>
		<p>     ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台<br />已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。<br />    下面是它的特性列表 (详细的特性清单请参考<a href="http://activemq.apache.org/features.html">http://activemq.apache.org/features.html</a>)<br />    1.多种语言和协议编写客户端<br />     语言: Java, C, C++, C#, Ruby, Perl, Python, PHP <br />        应用协议: OpenWire,Stomp REST,WS Notification,XMPP,AMQP<br />    2.完全支持JMS1.1和J2EE 1.4规范  (持久化,XA消息,事务)<br />    3.对Spring的支持,ActiveMQ可以很容得内嵌到使用Spring的系统里面去,而且也支持Spring2.0的特性<br />       4.通过了常见J2EE服务器(如 Geronimo,JBoss 4, GlassFish,WebLogic)的测试,其中通过JCA 1.5 resource adaptors的配置,<br />      可以让ActiveMQ可以自动的部署到任何兼容J2EE 1.4 商业服务器上<br />       5.支持多种传送协议:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA<br />       6.支持通过JDBC和journal提供高速的消息持久化<br />       7.从设计上保证了高性能的集群,客户端-服务器,点对点<br />       8.支持Ajax<br />       9.支持与Axis的整合<br />       10.可以很容易得调用内嵌JMS provider,进行测试 <br />       <br />     二.ActiveMQ的竞争者    <br />        <br />        1.其他开源 JMS provider(资料来自 java-source.net) :<br />        jbossmq(jboss 4)<br />        jboss messaging (jboss 5)<br />        joram-4.3.21  2006-09-22<br />        openjms-0.7.7-alpha-3.zip December 26, 2005<br />        mantamq 官网暂时无法访问<br />        ubermq  官网暂时无法访问<br />        SomnifugiJMS  2005-7-27 <br />           开源的JMS Provider大部分都已经停止发展了,剩下的几个都是找到了东家,和某种J2EE 服务器挂钩,<br />        比如jboss mq 与jboss,joram与jonas(objectweb组织),ActiveMQ 与Geronimo(ASF APACHE基金组织),<br />        而在这3个之间，从网络底层来看,只有ActiveMQ使用了NIO,单从这个角度来看ActiveMQ在性能上会有<br />        一定的优势       </p>
		<p>        2.商业JMS provider<br />        IBM WebSphere MQ<br />        BEA WebLogic JMS<br />        Oracle AQ <br />        NonStop Server for Java Message Service(JMS)<br />        Sun Java System Message Queue<br />        Sonic jms<br />        TIBCO Enterprise For JMS<br />        iLinkMQ (国内)<br />           现在的商业J2EE 应用服务器大部分都会有JMS Provider的实现,毕竟应用服务器都已经花费不薄,也不在乎<br />        在里面送一个JMS Provider了,当然还是有独立的比如IBM WebSphere MQ,Sonic JMS ,前者肯定是商用MQ<br />       （这个概念不仅仅是JMS Provier了，只能说JMS 只是它提供的一个应用）中间的巨无霸了。<br />        <br />         从这点来看,ActiveMQ明显的竞争者并不多,因为它是作为独立的开源JMS Provider出现的,很容易被用于多种结构设计中，<br />        使用ActiveMQ作为默认JMS Provider的开源项目有ServiceMix,Geronimo.<br /> <br />                                                                                               (待续)<br />        P.S<br />            Monday, February 5, 2007 <br />      Apache ActiveMQ graduates from the incubator  <br />      Apache ActiveMQ has now graduated to become a<font color="#ff0000"> top level project (TLP)</font> at Apache! Its new site is now hosted at <a href="http://activemq.apache.org/">http://activemq.apache.org/</a>. Many thanks to all those in the Incubator and ActiveMQ communities for making this happen!<br /></p>
<img src ="http://www.blogjava.net/cctvx1/aggbug/98457.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cctvx1/" target="_blank">Dr.Water</a> 2007-02-07 00:36 <a href="http://www.blogjava.net/cctvx1/archive/2007/02/07/98457.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ConcurrentModificationException</title><link>http://www.blogjava.net/cctvx1/archive/2007/01/23/95497.html</link><dc:creator>Dr.Water</dc:creator><author>Dr.Water</author><pubDate>Tue, 23 Jan 2007 03:31:00 GMT</pubDate><guid>http://www.blogjava.net/cctvx1/archive/2007/01/23/95497.html</guid><wfw:comment>http://www.blogjava.net/cctvx1/comments/95497.html</wfw:comment><comments>http://www.blogjava.net/cctvx1/archive/2007/01/23/95497.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cctvx1/comments/commentRss/95497.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cctvx1/services/trackbacks/95497.html</trackback:ping><description><![CDATA[
		<p>ConcurrentModificationException<br />一个不该犯的低级错误,今天的代码突然抛了一个concurrentModificationException错误,<br />Iterator的一个基本概念没有掌握导致的这个错误,就是在Iterator的实现类<br />比如Hashtable里面的内部类<br /> private class Enumerator&lt;T&gt; implements Enumeration&lt;T&gt;, Iterator&lt;T&gt; </p>
		<p>会在next,或者remove的时候检查当前集合是否会在修改状态,如果是的话<br />就会抛出 ConcurrentModificationException,而他自己remove则是使用了同步的方法<br />而且同步了modCount;expectedModCount;</p>
		<p>
				<br /> public T next() {<br />     if (modCount != expectedModCount)<br />  throw new ConcurrentModificationException();<br />     return nextElement();<br /> }</p>
		<p>
				<br />public void remove() {<br />     if (!iterator)<br />  throw new UnsupportedOperationException();<br />     if (lastReturned == null)<br />  throw new IllegalStateException("Hashtable Enumerator");<br />     if (modCount != expectedModCount)<br />  throw new ConcurrentModificationException();</p>
		<p>     synchronized(Hashtable.this) {<br />  Entry[] tab = Hashtable.this.table;<br />  int index = (lastReturned.hash &amp; 0x7FFFFFFF) % tab.length;</p>
		<p>  for (Entry&lt;K,V&gt; e = tab[index], prev = null; e != null;<br />       prev = e, e = e.next) {<br />      if (e == lastReturned) {<br />   modCount++;<br />   expectedModCount++;<br />   if (prev == null)<br />       tab[index] = e.next;<br />   else<br />       prev.next = e.next;<br />   count--;<br />   lastReturned = null;<br />   return;<br />      }<br />  }<br />  throw new ConcurrentModificationException();<br />     }<br /> }<br />    }<br />而自己在next的同时,修改了这个集合,导致了这个错误的出现</p>
<img src ="http://www.blogjava.net/cctvx1/aggbug/95497.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cctvx1/" target="_blank">Dr.Water</a> 2007-01-23 11:31 <a href="http://www.blogjava.net/cctvx1/archive/2007/01/23/95497.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Resin 3.0.x和Spring 2.0 xsd 配置问题解决</title><link>http://www.blogjava.net/cctvx1/archive/2007/01/03/91599.html</link><dc:creator>Dr.Water</dc:creator><author>Dr.Water</author><pubDate>Wed, 03 Jan 2007 09:53:00 GMT</pubDate><guid>http://www.blogjava.net/cctvx1/archive/2007/01/03/91599.html</guid><wfw:comment>http://www.blogjava.net/cctvx1/comments/91599.html</wfw:comment><comments>http://www.blogjava.net/cctvx1/archive/2007/01/03/91599.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cctvx1/comments/commentRss/91599.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cctvx1/services/trackbacks/91599.html</trackback:ping><description><![CDATA[
		<p>Spring 官方已经提到这个错误了<br /><br /><a href="http://www.springframework.org/docs/reference/xsd-config.html#xsd-config-integration-resin" taget="_BANK">http://www.springframework.org/docs/reference/xsd-config.html#xsd-config-integration-resin</a><br /><br />A.3.3.1. XML parsing errors in the Resin v.3 application server</p>
		<p>
				<br />If you are using the XSD-style for Spring 2.0 XML configuration and deploying to v.3 of Caucho's Resin application server, you will need to set some configuration options prior to startup so that an XSD-aware parser is available to Spring.<br />Please do read this resource</p>
		<p>
				<br />而resin给出来的参考就是他默认不是使用xerces和xalan作为xml和xslt的默认解析器</p>
		<p>正是由于他默认不是采用以上作为xml,xstl的解析器,导致了在resin下面 使用spring 2.0 新xsd配置方式会报错误</p>
		<p>(主要就是xml中的attribute和propertie 他取不到)</p>
		<p>解决的方法就是让resin使用xerces和xalan作为xml和xslt的默认解析器</p>
		<p>配置：</p>
		<p>在resin.conf的&lt;web-app&gt;或者&lt;server&gt;节点下添加</p>
		<p>&lt;!-- xml --&gt;<br />&lt;system-property javax.xml.parsers.DocumentBuilderFactory=<br />             "org.apache.xerces.jaxp.DocumentBuilderFactoryImpl"/&gt;<br />&lt;system-property javax.xml.parsers.SAXParserFactory=<br />             "org.apache.xerces.jaxp.SAXParserFactoryImpl"/&gt;<br />   <br />    &lt;!--  xslt --&gt;<br />&lt;system-property javax.xml.transform.TransformerFactory=<br />             "org.apache.xalan.processor.TransformerFactoryImpl"/&gt;</p>
		<p>
				<br />然后把相应的jar加入%RESIN_HOME%/lib 目录,这里需要说明的是我在测试activemq的时候</p>
		<p>加入xerces和xalan后,他包其他class无法找到,感觉好像是默认的web-app目录下的jar无效了,我暂时直接加入系统classpath解决的</p>
		<p>这点不知道是不是我自己的平台问题。</p>
		<p>
				<br />经过测试 resin 3.0.22+spring 2.0+activemq xsd配置方式ok了,</p>
		<p>
				<br />ps. ^.^　以前的resin下面项目没有用2.0配置,自己也学习到了新东西</p>
<img src ="http://www.blogjava.net/cctvx1/aggbug/91599.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cctvx1/" target="_blank">Dr.Water</a> 2007-01-03 17:53 <a href="http://www.blogjava.net/cctvx1/archive/2007/01/03/91599.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts  ValidatorResources 的警告问题</title><link>http://www.blogjava.net/cctvx1/archive/2006/12/10/86617.html</link><dc:creator>Dr.Water</dc:creator><author>Dr.Water</author><pubDate>Sat, 09 Dec 2006 16:13:00 GMT</pubDate><guid>http://www.blogjava.net/cctvx1/archive/2006/12/10/86617.html</guid><wfw:comment>http://www.blogjava.net/cctvx1/comments/86617.html</wfw:comment><comments>http://www.blogjava.net/cctvx1/archive/2006/12/10/86617.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cctvx1/comments/commentRss/86617.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cctvx1/services/trackbacks/86617.html</trackback:ping><description><![CDATA[
		<p>Struts  ValidatorResources 的警告问题</p>
		<p>google到的其他人同样的问题描述<br /><a href="http://www.mail-archive.com/user@struts.apache.org/msg51847.html">http://www.mail-archive.com/user@struts.apache.org/msg51847.html</a></p>
		<p>
				<br />我自己的配置<br />struts-config-action.xml中配置<br /></p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">form-beans</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">form-bean </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="dynamicForm"</span>
				<span style="COLOR: #ff0000"> type</span>
				<span style="COLOR: #0000ff">="org.apache.struts.validator.LazyValidatorForm"</span>
				<span style="COLOR: #0000ff">/&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">form-beans</span>
				<span style="COLOR: #0000ff">&gt;</span>
		</div>
		<p>运行所有跟这个form有关的页面都会出现:<br /><font color="#ff0033">[ValidatorResources]2006-12-10 00:07:23 WARN : Form 'dynamicForm' not found for locale 'zh_CN'</font><br /><br />我即使在messageResource_zh_CN.properties添加了对应的key/name也不行.</p>
		<p>解决方法,参考其他帖子,我首先升级strut 到1.3.x,commons-validator也升级到1.3.0<br />然后<br /></p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">plug-in </span>
				<span style="COLOR: #ff0000">className</span>
				<span style="COLOR: #0000ff">="org.apache.struts.validator.ValidatorPlugIn"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">set-property </span>
				<span style="COLOR: #ff0000">property</span>
				<span style="COLOR: #0000ff">="pathnames"</span>
				<span style="COLOR: #ff0000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />       value</span>
				<span style="COLOR: #0000ff">="/WEB-INF/validator-rules.xml,/WEB-INF/validation-user.xml"</span>
				<span style="COLOR: #0000ff">/&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> </span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">plug-in</span>
				<span style="COLOR: #0000ff">&gt;</span>
		</div>
		<p>
				<br />在validation-user.xml 添加一个form就行了<br /></p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">form-validation</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">formset</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">form </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="dynamicForm"</span>
				<span style="COLOR: #0000ff">/&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> </span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">formset</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">form-validation</span>
				<span style="COLOR: #0000ff">&gt;</span>
		</div>
		<p>不再有这个<font color="#ff0033">WARN <font color="#000000">了。</font></font> </p>
<img src ="http://www.blogjava.net/cctvx1/aggbug/86617.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cctvx1/" target="_blank">Dr.Water</a> 2006-12-10 00:13 <a href="http://www.blogjava.net/cctvx1/archive/2006/12/10/86617.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>iBatis的AutoResultMap 默认配置使用时候出现的问题</title><link>http://www.blogjava.net/cctvx1/archive/2006/11/17/81845.html</link><dc:creator>Dr.Water</dc:creator><author>Dr.Water</author><pubDate>Fri, 17 Nov 2006 13:19:00 GMT</pubDate><guid>http://www.blogjava.net/cctvx1/archive/2006/11/17/81845.html</guid><wfw:comment>http://www.blogjava.net/cctvx1/comments/81845.html</wfw:comment><comments>http://www.blogjava.net/cctvx1/archive/2006/11/17/81845.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cctvx1/comments/commentRss/81845.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cctvx1/services/trackbacks/81845.html</trackback:ping><description><![CDATA[
		<p>
				<font face="Courier New" size="2">演示的sqlMap 配置文件，通过'$'和'*'的使用,达到动态映射Table到一个map的作用</font>
		</p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">&lt;?</span>
				<span style="COLOR: #ff00ff">xml version="1.0" encoding="UTF-8" </span>
				<span style="COLOR: #0000ff">?&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;!</span>
				<span style="COLOR: #ff00ff">DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-2.dtd" </span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">select </span>
				<span style="COLOR: #ff0000">id</span>
				<span style="COLOR: #0000ff">="useAutoResultMapExample"</span>
				<span style="COLOR: #ff0000"> parameterClass</span>
				<span style="COLOR: #0000ff">="map"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />USE $dbName$<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />SELECT<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />*  FROM   $tableName$<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">select</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">sqlMap</span>
				<span style="COLOR: #0000ff">&gt;</span>
		</div>
		<p>
				<font face="Courier New" size="2">也就是在IBatis里面配置一个statment,去执行多个查询,充分利用了map映射的特性.<br /></font>
				<br />去执行多个查询。</p>
		<p>
				<font face="Courier New" size="2">比如<br />select * from myexample<br />select * from mywork</font>
		</p>
		<p>
				<font face="Courier New" size="2">使用"*" 而且没有用resultClass 指定返回</font>
		</p>
		<p>
				<font face="Courier New" size="2">但是在默认配置下,在使用的时候的时候<br /><br />2次以上传入不同的$dbName$,$tabeName$ 调用这个useAutoResultMapExample,<br /></font>
				<font face="Courier New" size="2">
						<br />就要报java.sql.SQLException: Invalid column name错误</font>
		</p>
		<p>
				<font face="Courier New" size="2">因为iBatis自己有 AutoResultMap的cache,尽管你传入的$tableName$不同，但是他总是</font>
		</p>
		<p>
				<font face="Courier New" size="2">用第一个建立的AutoResultMap的cache去匹配以后的$tableName$当然有错误了</font>
		</p>
		<p>
				<font face="Courier New" size="2">解决方法: 使用多个statment或者使用 remapResults="true" (为了效率他默认的是false)<br /><br />以上由于效率问题,建议还是采用多个statement 映射到不同的model上面去,不建议生产系统也这么使用。</font>
		</p>
<img src ="http://www.blogjava.net/cctvx1/aggbug/81845.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cctvx1/" target="_blank">Dr.Water</a> 2006-11-17 21:19 <a href="http://www.blogjava.net/cctvx1/archive/2006/11/17/81845.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>