﻿<?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-paulwong-随笔分类-缓存</title><link>http://www.blogjava.net/paulwong/category/50662.html</link><description /><language>zh-cn</language><lastBuildDate>Sat, 24 Aug 2019 00:16:02 GMT</lastBuildDate><pubDate>Sat, 24 Aug 2019 00:16:02 GMT</pubDate><ttl>60</ttl><item><title>SPRING CACHE之ConcurrentMapCacheManager改造</title><link>http://www.blogjava.net/paulwong/archive/2015/02/25/423034.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Wed, 25 Feb 2015 08:34:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2015/02/25/423034.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/423034.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2015/02/25/423034.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/423034.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/423034.html</trackback:ping><description><![CDATA[ConcurrentMapCacheManager可以作为一种缓存方案，但不能设置过期，最大缓存条目等，需进行改造。<br />
<ol>
     <li>pom.xml中加入依赖包<br />
     <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span>com.google.guava<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span>guava<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">version</span><span style="color: #0000FF; ">&gt;</span>18.0<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">version</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span></div>
     <br />
     </li>
     <li>改造CacheManager，MyConcurrentMapCacheManager<br />
     <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">package</span>&nbsp;com.paul.common.cache;<br /><span style="color: #008000; ">/*</span><span style="color: #008000; "><br />&nbsp;*&nbsp;Copyright&nbsp;2002-2014&nbsp;the&nbsp;original&nbsp;author&nbsp;or&nbsp;authors.<br />&nbsp;*<br />&nbsp;*&nbsp;Licensed&nbsp;under&nbsp;the&nbsp;Apache&nbsp;License,&nbsp;Version&nbsp;2.0&nbsp;(the&nbsp;"License");<br />&nbsp;*&nbsp;you&nbsp;may&nbsp;not&nbsp;use&nbsp;this&nbsp;file&nbsp;except&nbsp;in&nbsp;compliance&nbsp;with&nbsp;the&nbsp;License.<br />&nbsp;*&nbsp;You&nbsp;may&nbsp;obtain&nbsp;a&nbsp;copy&nbsp;of&nbsp;the&nbsp;License&nbsp;at<br />&nbsp;*<br />&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; text-decoration: underline; ">http://www.apache.org/licenses/LICENSE-2.0</span><span style="color: #008000; "><br />&nbsp;*<br />&nbsp;*&nbsp;Unless&nbsp;required&nbsp;by&nbsp;applicable&nbsp;law&nbsp;or&nbsp;agreed&nbsp;to&nbsp;in&nbsp;writing,&nbsp;software<br />&nbsp;*&nbsp;distributed&nbsp;under&nbsp;the&nbsp;License&nbsp;is&nbsp;distributed&nbsp;on&nbsp;an&nbsp;"AS&nbsp;IS"&nbsp;BASIS,<br />&nbsp;*&nbsp;WITHOUT&nbsp;WARRANTIES&nbsp;OR&nbsp;CONDITIONS&nbsp;OF&nbsp;ANY&nbsp;KIND,&nbsp;either&nbsp;express&nbsp;or&nbsp;implied.<br />&nbsp;*&nbsp;See&nbsp;the&nbsp;License&nbsp;for&nbsp;the&nbsp;specific&nbsp;language&nbsp;governing&nbsp;permissions&nbsp;and<br />&nbsp;*&nbsp;limitations&nbsp;under&nbsp;the&nbsp;License.<br />&nbsp;</span><span style="color: #008000; ">*/</span><br /><br /><span style="color: #0000FF; ">import</span>&nbsp;java.util.Collection;<br /><span style="color: #0000FF; ">import</span>&nbsp;java.util.Collections;<br /><span style="color: #0000FF; ">import</span>&nbsp;java.util.Map;<br /><span style="color: #0000FF; ">import</span>&nbsp;java.util.concurrent.ConcurrentHashMap;<br /><span style="color: #0000FF; ">import</span>&nbsp;java.util.concurrent.ConcurrentMap;<br /><span style="color: #0000FF; ">import</span>&nbsp;java.util.concurrent.TimeUnit;<br /><br /><span style="color: #0000FF; ">import</span>&nbsp;org.springframework.cache.Cache;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.springframework.cache.CacheManager;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.springframework.cache.concurrent.ConcurrentMapCache;<br /><br /><span style="color: #0000FF; ">import</span>&nbsp;com.google.common.cache.CacheBuilder;<br /><br /><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />&nbsp;*&nbsp;{</span><span style="color: #808080; ">@link</span><span style="color: #008000; ">&nbsp;CacheManager}&nbsp;implementation&nbsp;that&nbsp;lazily&nbsp;builds&nbsp;{</span><span style="color: #808080; ">@link</span><span style="color: #008000; ">&nbsp;ConcurrentMapCache}<br />&nbsp;*&nbsp;instances&nbsp;for&nbsp;each&nbsp;{</span><span style="color: #808080; ">@link</span><span style="color: #008000; ">&nbsp;#getCache}&nbsp;request.&nbsp;Also&nbsp;supports&nbsp;a&nbsp;'static'&nbsp;mode&nbsp;where<br />&nbsp;*&nbsp;the&nbsp;set&nbsp;of&nbsp;cache&nbsp;names&nbsp;is&nbsp;pre-defined&nbsp;through&nbsp;{</span><span style="color: #808080; ">@link</span><span style="color: #008000; ">&nbsp;#setCacheNames},&nbsp;with&nbsp;no<br />&nbsp;*&nbsp;dynamic&nbsp;creation&nbsp;of&nbsp;further&nbsp;cache&nbsp;regions&nbsp;at&nbsp;runtime.<br />&nbsp;*<br />&nbsp;*&nbsp;&lt;p&gt;Note:&nbsp;This&nbsp;is&nbsp;by&nbsp;no&nbsp;means&nbsp;a&nbsp;sophisticated&nbsp;CacheManager;&nbsp;it&nbsp;comes&nbsp;with&nbsp;no<br />&nbsp;*&nbsp;cache&nbsp;configuration&nbsp;options.&nbsp;However,&nbsp;it&nbsp;may&nbsp;be&nbsp;useful&nbsp;for&nbsp;testing&nbsp;or&nbsp;simple<br />&nbsp;*&nbsp;caching&nbsp;scenarios.&nbsp;For&nbsp;advanced&nbsp;local&nbsp;caching&nbsp;needs,&nbsp;consider<br />&nbsp;*&nbsp;{</span><span style="color: #808080; ">@link</span><span style="color: #008000; ">&nbsp;org.springframework.cache.guava.GuavaCacheManager}&nbsp;or<br />&nbsp;*&nbsp;{</span><span style="color: #808080; ">@link</span><span style="color: #008000; ">&nbsp;org.springframework.cache.ehcache.EhCacheCacheManager}.<br />&nbsp;*<br />&nbsp;*&nbsp;</span><span style="color: #808080; ">@author</span><span style="color: #008000; ">&nbsp;Juergen&nbsp;Hoeller<br />&nbsp;*&nbsp;</span><span style="color: #808080; ">@since</span><span style="color: #008000; ">&nbsp;3.1<br />&nbsp;*&nbsp;</span><span style="color: #808080; ">@see</span><span style="color: #008000; ">&nbsp;ConcurrentMapCache<br />&nbsp;</span><span style="color: #008000; ">*/</span><br /><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;MyConcurrentMapCacheManager&nbsp;<span style="color: #0000FF; ">implements</span>&nbsp;CacheManager&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">final</span>&nbsp;ConcurrentMap&lt;String,&nbsp;Cache&gt;&nbsp;cacheMap&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;ConcurrentHashMap&lt;String,&nbsp;Cache&gt;(16);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">boolean</span>&nbsp;dynamic&nbsp;=&nbsp;<span style="color: #0000FF; ">true</span>;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">boolean</span>&nbsp;allowNullValues&nbsp;=&nbsp;<span style="color: #0000FF; ">true</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">long</span>&nbsp;expireTime&nbsp;=&nbsp;30;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">long</span>&nbsp;maximumSize&nbsp;=&nbsp;100;<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Construct&nbsp;a&nbsp;dynamic&nbsp;ConcurrentMapCacheManager,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;lazily&nbsp;creating&nbsp;cache&nbsp;instances&nbsp;as&nbsp;they&nbsp;are&nbsp;being&nbsp;requested.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;MyConcurrentMapCacheManager()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Construct&nbsp;a&nbsp;static&nbsp;ConcurrentMapCacheManager,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;managing&nbsp;caches&nbsp;for&nbsp;the&nbsp;specified&nbsp;cache&nbsp;names&nbsp;only.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;MyConcurrentMapCacheManager(<span style="color: #0000FF; ">long</span>&nbsp;expireTime,&nbsp;<span style="color: #0000FF; ">long</span>&nbsp;maximumSize)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(expireTime&nbsp;&gt;&nbsp;0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.expireTime&nbsp;=&nbsp;expireTime;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(maximumSize&nbsp;&gt;&nbsp;0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.maximumSize&nbsp;=&nbsp;maximumSize;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Specify&nbsp;the&nbsp;set&nbsp;of&nbsp;cache&nbsp;names&nbsp;for&nbsp;this&nbsp;CacheManager's&nbsp;'static'&nbsp;mode.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&lt;p&gt;The&nbsp;number&nbsp;of&nbsp;caches&nbsp;and&nbsp;their&nbsp;names&nbsp;will&nbsp;be&nbsp;fixed&nbsp;after&nbsp;a&nbsp;call&nbsp;to&nbsp;this&nbsp;method,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;with&nbsp;no&nbsp;creation&nbsp;of&nbsp;further&nbsp;cache&nbsp;regions&nbsp;at&nbsp;runtime.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&lt;p&gt;Calling&nbsp;this&nbsp;with&nbsp;a&nbsp;{</span><span style="color: #808080; ">@code</span><span style="color: #008000; ">&nbsp;null}&nbsp;collection&nbsp;argument&nbsp;resets&nbsp;the<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;mode&nbsp;to&nbsp;'dynamic',&nbsp;allowing&nbsp;for&nbsp;further&nbsp;creation&nbsp;of&nbsp;caches&nbsp;again.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;setCacheNames(Collection&lt;String&gt;&nbsp;cacheNames)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(cacheNames&nbsp;!=&nbsp;<span style="color: #0000FF; ">null</span>)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(String&nbsp;name&nbsp;:&nbsp;cacheNames)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.cacheMap.put(name,&nbsp;createConcurrentMapCache(name));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.dynamic&nbsp;=&nbsp;<span style="color: #0000FF; ">false</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.dynamic&nbsp;=&nbsp;<span style="color: #0000FF; ">true</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Specify&nbsp;whether&nbsp;to&nbsp;accept&nbsp;and&nbsp;convert&nbsp;{</span><span style="color: #808080; ">@code</span><span style="color: #008000; ">&nbsp;null}&nbsp;values&nbsp;for&nbsp;all&nbsp;caches<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;in&nbsp;this&nbsp;cache&nbsp;manager.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&lt;p&gt;Default&nbsp;is&nbsp;"true",&nbsp;despite&nbsp;ConcurrentHashMap&nbsp;itself&nbsp;not&nbsp;supporting&nbsp;{</span><span style="color: #808080; ">@code</span><span style="color: #008000; ">&nbsp;null}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;values.&nbsp;An&nbsp;internal&nbsp;holder&nbsp;object&nbsp;will&nbsp;be&nbsp;used&nbsp;to&nbsp;store&nbsp;user-level&nbsp;{</span><span style="color: #808080; ">@code</span><span style="color: #008000; ">&nbsp;null}s.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&lt;p&gt;Note:&nbsp;A&nbsp;change&nbsp;of&nbsp;the&nbsp;null-value&nbsp;setting&nbsp;will&nbsp;reset&nbsp;all&nbsp;existing&nbsp;caches,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;if&nbsp;any,&nbsp;to&nbsp;reconfigure&nbsp;them&nbsp;with&nbsp;the&nbsp;new&nbsp;null-value&nbsp;requirement.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;setAllowNullValues(<span style="color: #0000FF; ">boolean</span>&nbsp;allowNullValues)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(allowNullValues&nbsp;!=&nbsp;<span style="color: #0000FF; ">this</span>.allowNullValues)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.allowNullValues&nbsp;=&nbsp;allowNullValues;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Need&nbsp;to&nbsp;recreate&nbsp;all&nbsp;Cache&nbsp;instances&nbsp;with&nbsp;the&nbsp;new&nbsp;null-value&nbsp;configuration<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(Map.Entry&lt;String,&nbsp;Cache&gt;&nbsp;entry&nbsp;:&nbsp;<span style="color: #0000FF; ">this</span>.cacheMap.entrySet())&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;entry.setValue(createConcurrentMapCache(entry.getKey()));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Return&nbsp;whether&nbsp;this&nbsp;cache&nbsp;manager&nbsp;accepts&nbsp;and&nbsp;converts&nbsp;{</span><span style="color: #808080; ">@code</span><span style="color: #008000; ">&nbsp;null}&nbsp;values<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;for&nbsp;all&nbsp;of&nbsp;its&nbsp;caches.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">boolean</span>&nbsp;isAllowNullValues()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">this</span>.allowNullValues;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;Collection&lt;String&gt;&nbsp;getCacheNames()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;Collections.unmodifiableSet(<span style="color: #0000FF; ">this</span>.cacheMap.keySet());<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;Cache&nbsp;getCache(String&nbsp;name)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cache&nbsp;cache&nbsp;=&nbsp;<span style="color: #0000FF; ">this</span>.cacheMap.get(name);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(cache&nbsp;==&nbsp;<span style="color: #0000FF; ">null</span>&nbsp;&amp;&amp;&nbsp;<span style="color: #0000FF; ">this</span>.dynamic)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">synchronized</span>&nbsp;(<span style="color: #0000FF; ">this</span>.cacheMap)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cache&nbsp;=&nbsp;<span style="color: #0000FF; ">this</span>.cacheMap.get(name);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(cache&nbsp;==&nbsp;<span style="color: #0000FF; ">null</span>)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cache&nbsp;=&nbsp;createConcurrentMapCache(name);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.cacheMap.put(name,&nbsp;cache);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;cache;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Create&nbsp;a&nbsp;new&nbsp;ConcurrentMapCache&nbsp;instance&nbsp;for&nbsp;the&nbsp;specified&nbsp;cache&nbsp;name.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;name&nbsp;the&nbsp;name&nbsp;of&nbsp;the&nbsp;cache<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@return</span><span style="color: #008000; ">&nbsp;the&nbsp;ConcurrentMapCache&nbsp;(or&nbsp;a&nbsp;decorator&nbsp;thereof)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">protected</span>&nbsp;Cache&nbsp;createConcurrentMapCache(String&nbsp;name)&nbsp;{<br /><span style="color: #008000; ">&nbsp; &nbsp; &nbsp; &nbsp; //</span><span style="color: #008000; ">return&nbsp;new&nbsp;ConcurrentMapCache(name,&nbsp;isAllowNullValues());<br /></span><span style="color: #008000; ">&nbsp; &nbsp; &nbsp; &nbsp; //</span><span style="color: #008000; ">此处改用GOOGLE&nbsp;GUAVA的构造MANAGER方式</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;ConcurrentMapCache(name,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CacheBuilder.newBuilder()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.expireAfterWrite(<span style="color: #0000FF; ">this</span>.expireTime,&nbsp;TimeUnit.MINUTES)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.maximumSize(<span style="color: #0000FF; ">this</span>.maximumSize)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.build()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.asMap(),&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;isAllowNullValues());<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />}</div><br />
     <br />
     </li>
     <li>配置想着bean, cache-concurrentmap-applicationcontext.xml<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">&lt;?</span><span style="color: #FF00FF; ">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000FF; ">?&gt;</span><br /><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">beans&nbsp;</span><span style="color: #FF0000; ">xmlns</span><span style="color: #0000FF; ">="http://www.springframework.org/schema/beans"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;xmlns:xsi</span><span style="color: #0000FF; ">="http://www.w3.org/2001/XMLSchema-instance"</span><span style="color: #FF0000; ">&nbsp;xmlns:context</span><span style="color: #0000FF; ">="http://www.springframework.org/schema/context"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;xmlns:cache</span><span style="color: #0000FF; ">="http://www.springframework.org/schema/cache"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;xmlns:p</span><span style="color: #0000FF; ">="http://www.springframework.org/schema/p"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;xmlns:c</span><span style="color: #0000FF; ">="http://www.springframework.org/schema/c"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;xmlns:jee</span><span style="color: #0000FF; ">="http://www.springframework.org/schema/jee"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;xmlns:util</span><span style="color: #0000FF; ">="http://www.springframework.org/schema/util"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;xsi:schemaLocation</span><span style="color: #0000FF; ">="http://www.springframework.org/schema/context<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/context/spring-context-3.0.xsd<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/beans<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/beans/spring-beans-3.0.xsd<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/cache<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/cache/spring-cache.xsd<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/jee&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/jee/spring-jee.xsd<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/util<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/util/spring-util.xsd"</span><span style="color: #0000FF; ">&gt;</span><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">cache:annotation-driven&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">&nbsp;&lt;bean&nbsp;id="cacheManager"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class="org.springframework.cache.concurrent.ConcurrentMapCacheManager"&nbsp;&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name="cacheNames"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;list&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;value&gt;my-local-cache&lt;/value&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/list&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/property&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;/bean&gt;&nbsp;</span><span style="color: #008000; ">--&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">bean&nbsp;</span><span style="color: #FF0000; ">id</span><span style="color: #0000FF; ">="cacheManager"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class</span><span style="color: #0000FF; ">="com.paul.common.cache.MyConcurrentMapCacheManager"</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">constructor-arg&nbsp;</span><span style="color: #FF0000; ">index</span><span style="color: #0000FF; ">="0"</span><span style="color: #FF0000; ">&nbsp;value</span><span style="color: #0000FF; ">="1"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">constructor-arg&nbsp;</span><span style="color: #FF0000; ">index</span><span style="color: #0000FF; ">="1"</span><span style="color: #FF0000; ">&nbsp;value</span><span style="color: #0000FF; ">="5000"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">bean</span><span style="color: #0000FF; ">&gt;</span>&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">beans</span><span style="color: #0000FF; ">&gt;</span></div>
     <br />
     <br />
     </li>
     <li>通过注释进行使用<br />
     <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000; ">/*</span><span style="color: #008000; "><br />&nbsp;*&nbsp;JBoss,&nbsp;Home&nbsp;of&nbsp;Professional&nbsp;Open&nbsp;Source<br />&nbsp;*&nbsp;Copyright&nbsp;2014,&nbsp;Red&nbsp;Hat,&nbsp;Inc.&nbsp;and/or&nbsp;its&nbsp;affiliates,&nbsp;and&nbsp;individual<br />&nbsp;*&nbsp;contributors&nbsp;by&nbsp;the&nbsp;@authors&nbsp;tag.&nbsp;See&nbsp;the&nbsp;copyright.txt&nbsp;in&nbsp;the<br />&nbsp;*&nbsp;distribution&nbsp;for&nbsp;a&nbsp;full&nbsp;listing&nbsp;of&nbsp;individual&nbsp;contributors.<br />&nbsp;*<br />&nbsp;*&nbsp;Licensed&nbsp;under&nbsp;the&nbsp;Apache&nbsp;License,&nbsp;Version&nbsp;2.0&nbsp;(the&nbsp;"License");<br />&nbsp;*&nbsp;you&nbsp;may&nbsp;not&nbsp;use&nbsp;this&nbsp;file&nbsp;except&nbsp;in&nbsp;compliance&nbsp;with&nbsp;the&nbsp;License.<br />&nbsp;*&nbsp;You&nbsp;may&nbsp;obtain&nbsp;a&nbsp;copy&nbsp;of&nbsp;the&nbsp;License&nbsp;at<br />&nbsp;*&nbsp;</span><span style="color: #008000; text-decoration: underline; ">http://www.apache.org/licenses/LICENSE-2.0</span><span style="color: #008000; "><br />&nbsp;*&nbsp;Unless&nbsp;required&nbsp;by&nbsp;applicable&nbsp;law&nbsp;or&nbsp;agreed&nbsp;to&nbsp;in&nbsp;writing,&nbsp;software<br />&nbsp;*&nbsp;distributed&nbsp;under&nbsp;the&nbsp;License&nbsp;is&nbsp;distributed&nbsp;on&nbsp;an&nbsp;"AS&nbsp;IS"&nbsp;BASIS,<br />&nbsp;*&nbsp;WITHOUT&nbsp;WARRANTIES&nbsp;OR&nbsp;CONDITIONS&nbsp;OF&nbsp;ANY&nbsp;KIND,&nbsp;either&nbsp;express&nbsp;or&nbsp;implied.<br />&nbsp;*&nbsp;See&nbsp;the&nbsp;License&nbsp;for&nbsp;the&nbsp;specific&nbsp;language&nbsp;governing&nbsp;permissions&nbsp;and<br />&nbsp;*&nbsp;limitations&nbsp;under&nbsp;the&nbsp;License.<br />&nbsp;</span><span style="color: #008000; ">*/</span><br /><span style="color: #0000FF; ">package</span>&nbsp;com.paul.springmvc.data;<br /><br /><span style="color: #0000FF; ">import</span>&nbsp;java.util.List;<br /><br /><span style="color: #0000FF; ">import</span>&nbsp;javax.persistence.EntityManager;<br /><span style="color: #0000FF; ">import</span>&nbsp;javax.persistence.criteria.CriteriaBuilder;<br /><span style="color: #0000FF; ">import</span>&nbsp;javax.persistence.criteria.CriteriaQuery;<br /><span style="color: #0000FF; ">import</span>&nbsp;javax.persistence.criteria.Root;<br /><br /><span style="color: #0000FF; ">import</span>&nbsp;org.springframework.beans.factory.annotation.Autowired;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.springframework.cache.annotation.CacheEvict;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.springframework.cache.annotation.Cacheable;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.springframework.stereotype.Repository;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.springframework.transaction.annotation.Transactional;<br /><br /><span style="color: #0000FF; ">import</span>&nbsp;com.paul.springmvc.model.Member;<br /><br />@Repository<br />@Transactional<br /><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;MemberDaoImpl&nbsp;<span style="color: #0000FF; ">implements</span>&nbsp;MemberDao&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;@Autowired<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;EntityManager&nbsp;em;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;@Cacheable(value&nbsp;=&nbsp;"my-local-cache",&nbsp;key&nbsp;=&nbsp;"#id")<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;Member&nbsp;findById(Long&nbsp;id)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" />MemberDaoImpl&nbsp;NO&nbsp;CACHE<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" />");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;em.find(Member.<span style="color: #0000FF; ">class</span>,&nbsp;id);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;Member&nbsp;findByEmail(String&nbsp;email)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CriteriaBuilder&nbsp;cb&nbsp;=&nbsp;em.getCriteriaBuilder();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CriteriaQuery&lt;Member&gt;&nbsp;criteria&nbsp;=&nbsp;cb.createQuery(Member.<span style="color: #0000FF; ">class</span>);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Root&lt;Member&gt;&nbsp;member&nbsp;=&nbsp;criteria.from(Member.<span style="color: #0000FF; ">class</span>);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Swap&nbsp;criteria&nbsp;statements&nbsp;if&nbsp;you&nbsp;would&nbsp;like&nbsp;to&nbsp;try&nbsp;out&nbsp;type-safe&nbsp;criteria&nbsp;queries,&nbsp;a&nbsp;new<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;feature&nbsp;in&nbsp;JPA&nbsp;2.0&nbsp;criteria.select(member).orderBy(cb.asc(member.get(Member_.name)));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;criteria.select(member).where(cb.equal(member.get("email"),&nbsp;email));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;em.createQuery(criteria).getSingleResult();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;List&lt;Member&gt;&nbsp;findAllOrderedByName()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CriteriaBuilder&nbsp;cb&nbsp;=&nbsp;em.getCriteriaBuilder();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CriteriaQuery&lt;Member&gt;&nbsp;criteria&nbsp;=&nbsp;cb.createQuery(Member.<span style="color: #0000FF; ">class</span>);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Root&lt;Member&gt;&nbsp;member&nbsp;=&nbsp;criteria.from(Member.<span style="color: #0000FF; ">class</span>);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Swap&nbsp;criteria&nbsp;statements&nbsp;if&nbsp;you&nbsp;would&nbsp;like&nbsp;to&nbsp;try&nbsp;out&nbsp;type-safe&nbsp;criteria&nbsp;queries,&nbsp;a&nbsp;new<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;feature&nbsp;in&nbsp;JPA&nbsp;2.0&nbsp;criteria.select(member).orderBy(cb.asc(member.get(Member_.name)));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;criteria.select(member).orderBy(cb.asc(member.get("name")));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;em.createQuery(criteria).getResultList();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;@CacheEvict(value="my-local-cache",allEntries=<span style="color: #0000FF; ">true</span>,beforeInvocation=<span style="color: #0000FF; ">true</span>)<span style="color: #008000; ">//</span><span style="color: #008000; ">清空所有缓存</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;register(Member&nbsp;member)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;em.persist(member);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}</div></li>
</ol><img src ="http://www.blogjava.net/paulwong/aggbug/423034.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2015-02-25 16:34 <a href="http://www.blogjava.net/paulwong/archive/2015/02/25/423034.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SPRING CACHE资源</title><link>http://www.blogjava.net/paulwong/archive/2015/02/25/423032.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Wed, 25 Feb 2015 08:04:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2015/02/25/423032.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/423032.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2015/02/25/423032.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/423032.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/423032.html</trackback:ping><description><![CDATA[SPRING手册<a href="http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/htmlsingle/#cache" target="_blank"><br />http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/htmlsingle/#cache</a><br /><br />SPRING CONCURRENTMAP MANAGER加过期策略<br /><a href="http://stackoverflow.com/questions/8181768/can-i-set-a-ttl-for-cacheable" target="_blank">http://stackoverflow.com/questions/8181768/can-i-set-a-ttl-for-cacheable</a><br /><br />组合KEY<br /><a href="http://stackoverflow.com/questions/14072380/cacheable-key-on-multiple-method-arguments" target="_blank">http://stackoverflow.com/questions/14072380/cacheable-key-on-multiple-method-arguments</a><br /><br />Spring Cache抽象详解<br /><a href="http://www.open-open.com/lib/view/open1389575623336.html" target="_blank">http://www.open-open.com/lib/view/open1389575623336.html</a><br /><br />注释驱动的 Spring cache 缓存介绍<br /><a href="https://www.ibm.com/developerworks/cn/opensource/os-cn-spring-cache/" target="_blank">https://www.ibm.com/developerworks/cn/opensource/os-cn-spring-cache/</a><br /><br /><h3><a href="http://jinnianshilongnian.iteye.com/blog/2001040" style="color: #e9650e;" target="_blank">Spring Cache抽象详解</a></h3><img src ="http://www.blogjava.net/paulwong/aggbug/423032.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2015-02-25 16:04 <a href="http://www.blogjava.net/paulwong/archive/2015/02/25/423032.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用WILDFLY中的分布式缓存INFISHPAN</title><link>http://www.blogjava.net/paulwong/archive/2015/02/23/422998.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Mon, 23 Feb 2015 05:40:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2015/02/23/422998.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/422998.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2015/02/23/422998.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/422998.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/422998.html</trackback:ping><description><![CDATA[项目部署的应用服务器：WILDFLY
<ol>
     <li>通过http://127.0.0.1:9991/console/App.html#infinispan添加CACHE<br />
     <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
     <br />
     Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
     http://www.CodeHighlighter.com/<br />
     <br />
     --><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">cache-container&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="tickets"</span><span style="color: #FF0000; ">&nbsp;default-cache</span><span style="color: #0000FF; ">="default"</span><span style="color: #FF0000; ">&nbsp;jndi-name</span><span style="color: #0000FF; ">="java:jboss/infinispan/tickets"</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">local-cache&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="default"</span><span style="color: #FF0000; ">&nbsp;batching</span><span style="color: #0000FF; ">="true"</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">locking&nbsp;</span><span style="color: #FF0000; ">isolation</span><span style="color: #0000FF; ">="REPEATABLE_READ"</span><span style="color: #0000FF; ">/&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">local-cache</span><span style="color: #0000FF; ">&gt;</span><br />
     <span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">cache-container</span><span style="color: #0000FF; ">&gt;</span></div>
     <br />
     </li>
     <li>pom.xml添加依赖包<br />
     <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
     <br />
     Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
     http://www.CodeHighlighter.com/<br />
     <br />
     -->&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span>org.infinispan<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span>infinispan-core<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">scope</span><span style="color: #0000FF; ">&gt;</span>provided<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">scope</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span>org.infinispan<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span>infinispan-client-hotrod<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">scope</span><span style="color: #0000FF; ">&gt;</span>provided<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">scope</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span><br />
     <br />
     &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span>org.jgroups<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span>jgroups<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">scope</span><span style="color: #0000FF; ">&gt;</span>provided<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">scope</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span><br />
     <br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span>org.infinispan<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span>infinispan-spring<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">version</span><span style="color: #0000FF; ">&gt;</span>6.0.2.Final<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">version</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span>org.infinispan<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span>infinispan-jcache<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">version</span><span style="color: #0000FF; ">&gt;</span>6.0.2.Final<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">version</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span></div>
     <br />
     </li>
     <li>添加拦截器，WEB-INF/beans.xml<br />
     <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
     <br />
     Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
     http://www.CodeHighlighter.com/<br />
     <br />
     --><span style="color: #0000FF; ">&lt;?</span><span style="color: #FF00FF; ">xml&nbsp;version="1.0"</span><span style="color: #0000FF; ">?&gt;</span><br />
     <span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">beans&nbsp;</span><span style="color: #FF0000; ">xmlns</span><span style="color: #0000FF; ">="http://java.sun.com/xml/ns/javaee"</span><span style="color: #FF0000; ">&nbsp;xmlns:xsi</span><span style="color: #0000FF; ">="http://www.w3.org/2001/XMLSchema-instance"</span><span style="color: #FF0000; "><br />
     &nbsp;&nbsp;&nbsp;&nbsp;xsi:schemaLocation</span><span style="color: #0000FF; ">="http://java.sun.com/xml/ns/javaee&nbsp;http://jboss.org/schema/cdi/beans_1_0.xsd"</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">interceptors</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">class</span><span style="color: #0000FF; ">&gt;</span>org.infinispan.jcache.annotation.CacheResultInterceptor<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">class</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">class</span><span style="color: #0000FF; ">&gt;</span>org.infinispan.jcache.annotation.CachePutInterceptor<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">class</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">class</span><span style="color: #0000FF; ">&gt;</span>org.infinispan.jcache.annotation.CacheRemoveEntryInterceptor<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">class</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">class</span><span style="color: #0000FF; ">&gt;</span>org.infinispan.jcache.annotation.CacheRemoveAllInterceptor<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">class</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">interceptors</span><span style="color: #0000FF; ">&gt;</span><br />
     <span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">beans</span><span style="color: #0000FF; ">&gt;</span></div>
     <br />
     </li>
     <li>添加项目的全局依赖，WEB-INF/jboss-deployment-structure.xml<br />
     <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
     <br />
     Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
     http://www.CodeHighlighter.com/<br />
     <br />
     --><span style="color: #0000FF; ">&lt;?</span><span style="color: #FF00FF; ">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000FF; ">?&gt;</span><br />
     <span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">jboss-deployment-structure</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">deployment</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">dependencies</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">module&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="org.jboss.xnio"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">module&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="org.infinispan"</span><span style="color: #FF0000; ">&nbsp;export</span><span style="color: #0000FF; ">="true"</span><span style="color: #0000FF; ">/&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">module&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="org.infinispan.commons"</span><span style="color: #FF0000; ">&nbsp;export</span><span style="color: #0000FF; ">="true"</span><span style="color: #0000FF; ">/&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">module&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="org.infinispan.client.hotrod"</span><span style="color: #FF0000; ">&nbsp;export</span><span style="color: #0000FF; ">="true"</span><span style="color: #0000FF; ">/&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">dependencies</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">deployment</span><span style="color: #0000FF; ">&gt;</span><br />
     <span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">jboss-deployment-structure</span><span style="color: #0000FF; ">&gt;</span></div>
     <br />
     </li>
     <li>在CDI BEAN中使用CACHE<br />
     <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
     <br />
     Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
     http://www.CodeHighlighter.com/<br />
     <br />
     --><span style="color: #0000FF; ">package</span>&nbsp;com.paul.myejb;<br />
     <br />
     <span style="color: #0000FF; ">import</span>&nbsp;javax.annotation.Resource;<br />
     <span style="color: #0000FF; ">import</span>&nbsp;javax.cache.annotation.CacheResult;<br />
     <span style="color: #0000FF; ">import</span>&nbsp;javax.ejb.Remote;<br />
     <span style="color: #0000FF; ">import</span>&nbsp;javax.ejb.Stateless;<br />
     <span style="color: #0000FF; ">import</span>&nbsp;javax.interceptor.Interceptors;<br />
     <br />
     <span style="color: #0000FF; ">import</span>&nbsp;org.infinispan.Cache;<br />
     <span style="color: #0000FF; ">import</span>&nbsp;org.infinispan.manager.EmbeddedCacheManager;<br />
     <span style="color: #008000; ">//</span><span style="color: #008000; ">import&nbsp;org.springframework.cache.annotation.Cacheable;</span><span style="color: #008000; "><br />
     </span><span style="color: #0000FF; ">import</span>&nbsp;org.springframework.ejb.interceptor.SpringBeanAutowiringInterceptor;<br />
     <br />
     <span style="color: #008000; ">/**</span><span style="color: #008000; "><br />
     &nbsp;*&nbsp;Session&nbsp;Bean&nbsp;implementation&nbsp;class&nbsp;HelloWorldBean<br />
     &nbsp;</span><span style="color: #008000; ">*/</span><br />
     @Stateless<br />
     <span style="color: #008000; ">//</span><span style="color: #008000; ">@Local(HelloWorld.class)</span><span style="color: #008000; "><br />
     </span>@Remote(HelloWorld.<span style="color: #0000FF; ">class</span>)<br />
     @Interceptors(SpringBeanAutowiringInterceptor.<span style="color: #0000FF; ">class</span>)<br />
     <span style="color: #008000; ">//</span><span style="color: #008000; ">@RolesAllowed({Roles.ADMIN})</span><span style="color: #008000; "><br />
     </span><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;HelloWorldBean&nbsp;<span style="color: #0000FF; ">implements</span>&nbsp;HelloWorld&nbsp;{<br />
     &nbsp;&nbsp;&nbsp;&nbsp;<br />
     &nbsp;&nbsp;&nbsp;&nbsp;@Resource(lookup&nbsp;=&nbsp;"java:jboss/infinispan/tickets")<br />
     &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;EmbeddedCacheManager&nbsp;container;<br />
     &nbsp;&nbsp;&nbsp;&nbsp;<br />
     &nbsp;&nbsp;&nbsp;&nbsp;<br />
     &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; "><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Default&nbsp;constructor.&nbsp;<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;HelloWorldBean()&nbsp;{<br />
     &nbsp;&nbsp;&nbsp;&nbsp;}<br />
     <br />
     <span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;@Transactional<br />
     </span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;@Cacheable(value&nbsp;=&nbsp;"books",&nbsp;key&nbsp;=&nbsp;"#name")</span><span style="color: #008000; "><br />
     </span>&nbsp;&nbsp;&nbsp;&nbsp;@CacheResult<br />
     &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;String&nbsp;sayHello(String&nbsp;name)&nbsp;{<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("<img src="http://www.blogjava.net/Images/dot.gif" alt="" /><img src="http://www.blogjava.net/Images/dot.gif" alt="" />NO&nbsp;CACHE<img src="http://www.blogjava.net/Images/dot.gif" alt="" /><img src="http://www.blogjava.net/Images/dot.gif" alt="" />");<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;result&nbsp;=&nbsp;"Hello&nbsp;"&nbsp;+&nbsp;name&nbsp;+&nbsp;",&nbsp;I&nbsp;am&nbsp;HelloWorldBean.";<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cache&lt;String,&nbsp;String&gt;&nbsp;cache&nbsp;=&nbsp;<span style="color: #0000FF; ">this</span>.container.getCache();<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cache.put(name,&nbsp;result);<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;result;<br />
     &nbsp;&nbsp;&nbsp;&nbsp;}<br />
     <br />
     }</div>
     <br />
     <br />
     </li>
     <li>修改modules/system/layers/base/org/infinispan/client/hotrod/main/modules.xml<br />
     <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
     <br />
     Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
     http://www.CodeHighlighter.com/<br />
     <br />
     --><span style="color: #0000FF; ">&lt;?</span><span style="color: #FF00FF; ">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000FF; ">?&gt;</span><br />
     <span style="color: #008000; ">&lt;!--</span><span style="color: #008000; "><br />
     &nbsp;&nbsp;~&nbsp;JBoss,&nbsp;Home&nbsp;of&nbsp;Professional&nbsp;Open&nbsp;Source.<br />
     &nbsp;&nbsp;~&nbsp;Copyright&nbsp;2010,&nbsp;Red&nbsp;Hat,&nbsp;Inc.,&nbsp;and&nbsp;individual&nbsp;contributors<br />
     &nbsp;&nbsp;~&nbsp;as&nbsp;indicated&nbsp;by&nbsp;the&nbsp;@author&nbsp;tags.&nbsp;See&nbsp;the&nbsp;copyright.txt&nbsp;file&nbsp;in&nbsp;the<br />
     &nbsp;&nbsp;~&nbsp;distribution&nbsp;for&nbsp;a&nbsp;full&nbsp;listing&nbsp;of&nbsp;individual&nbsp;contributors.<br />
     &nbsp;&nbsp;~<br />
     &nbsp;&nbsp;~&nbsp;This&nbsp;is&nbsp;free&nbsp;software;&nbsp;you&nbsp;can&nbsp;redistribute&nbsp;it&nbsp;and/or&nbsp;modify&nbsp;it<br />
     &nbsp;&nbsp;~&nbsp;under&nbsp;the&nbsp;terms&nbsp;of&nbsp;the&nbsp;GNU&nbsp;Lesser&nbsp;General&nbsp;Public&nbsp;License&nbsp;as<br />
     &nbsp;&nbsp;~&nbsp;published&nbsp;by&nbsp;the&nbsp;Free&nbsp;Software&nbsp;Foundation;&nbsp;either&nbsp;version&nbsp;2.1&nbsp;of<br />
     &nbsp;&nbsp;~&nbsp;the&nbsp;License,&nbsp;or&nbsp;(at&nbsp;your&nbsp;option)&nbsp;any&nbsp;later&nbsp;version.<br />
     &nbsp;&nbsp;~<br />
     &nbsp;&nbsp;~&nbsp;This&nbsp;software&nbsp;is&nbsp;distributed&nbsp;in&nbsp;the&nbsp;hope&nbsp;that&nbsp;it&nbsp;will&nbsp;be&nbsp;useful,<br />
     &nbsp;&nbsp;~&nbsp;but&nbsp;WITHOUT&nbsp;ANY&nbsp;WARRANTY;&nbsp;without&nbsp;even&nbsp;the&nbsp;implied&nbsp;warranty&nbsp;of<br />
     &nbsp;&nbsp;~&nbsp;MERCHANTABILITY&nbsp;or&nbsp;FITNESS&nbsp;FOR&nbsp;A&nbsp;PARTICULAR&nbsp;PURPOSE.&nbsp;See&nbsp;the&nbsp;GNU<br />
     &nbsp;&nbsp;~&nbsp;Lesser&nbsp;General&nbsp;Public&nbsp;License&nbsp;for&nbsp;more&nbsp;details.<br />
     &nbsp;&nbsp;~<br />
     &nbsp;&nbsp;~&nbsp;You&nbsp;should&nbsp;have&nbsp;received&nbsp;a&nbsp;copy&nbsp;of&nbsp;the&nbsp;GNU&nbsp;Lesser&nbsp;General&nbsp;Public<br />
     &nbsp;&nbsp;~&nbsp;License&nbsp;along&nbsp;with&nbsp;this&nbsp;software;&nbsp;if&nbsp;not,&nbsp;write&nbsp;to&nbsp;the&nbsp;Free<br />
     &nbsp;&nbsp;~&nbsp;Software&nbsp;Foundation,&nbsp;Inc.,&nbsp;51&nbsp;Franklin&nbsp;St,&nbsp;Fifth&nbsp;Floor,&nbsp;Boston,&nbsp;MA<br />
     &nbsp;&nbsp;~&nbsp;02110-1301&nbsp;USA,&nbsp;or&nbsp;see&nbsp;the&nbsp;FSF&nbsp;site:&nbsp;http://www.fsf.org.<br />
     &nbsp;&nbsp;</span><span style="color: #008000; ">--&gt;</span><br />
     <span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">module&nbsp;</span><span style="color: #FF0000; ">xmlns</span><span style="color: #0000FF; ">="urn:jboss:module:1.3"</span><span style="color: #FF0000; ">&nbsp;name</span><span style="color: #0000FF; ">="org.infinispan.client.hotrod"</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">properties</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">property&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="jboss.api"</span><span style="color: #FF0000; ">&nbsp;value</span><span style="color: #0000FF; ">="private"</span><span style="color: #0000FF; ">/&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">properties</span><span style="color: #0000FF; ">&gt;</span><br />
     <br />
     &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">resources</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">resource-root&nbsp;</span><span style="color: #FF0000; ">path</span><span style="color: #0000FF; ">="infinispan-client-hotrod-6.0.2.Final.jar"</span><span style="color: #0000FF; ">/&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">resources</span><span style="color: #0000FF; ">&gt;</span><br />
     <br />
     &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">dependencies</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">module&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="javax.api"</span><span style="color: #0000FF; ">/&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">下面这一行注释掉</span><span style="color: #008000; ">--&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">&lt;module&nbsp;name="com.google.protobuf"/&gt;</span><span style="color: #008000; ">--&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">module&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="org.apache.commons.pool"</span><span style="color: #0000FF; ">/&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">module&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="org.infinispan.commons"</span><span style="color: #0000FF; ">/&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">module&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="org.infinispan.query.dsl"</span><span style="color: #0000FF; ">/&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">module&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="org.jboss.logging"</span><span style="color: #0000FF; ">/&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">dependencies</span><span style="color: #0000FF; ">&gt;</span><br />
     <span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">module</span><span style="color: #0000FF; ">&gt;</span></div>
     <br />
     </li>
</ol>
以下是SPRING版本
<ol>
     <li>
     添加依赖的SPRING BEAN<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">&lt;?</span><span style="color: #FF00FF; ">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000FF; ">?&gt;</span><br /><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">beans&nbsp;</span><span style="color: #FF0000; ">xmlns</span><span style="color: #0000FF; ">="http://www.springframework.org/schema/beans"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;xmlns:xsi</span><span style="color: #0000FF; ">="http://www.w3.org/2001/XMLSchema-instance"</span><span style="color: #FF0000; ">&nbsp;xmlns:context</span><span style="color: #0000FF; ">="http://www.springframework.org/schema/context"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;xmlns:cache</span><span style="color: #0000FF; ">="http://www.springframework.org/schema/cache"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;xmlns:p</span><span style="color: #0000FF; ">="http://www.springframework.org/schema/p"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;xmlns:jee</span><span style="color: #0000FF; ">="http://www.springframework.org/schema/jee"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;xsi:schemaLocation</span><span style="color: #0000FF; ">="http://www.springframework.org/schema/context<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/context/spring-context-3.0.xsd<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/beans<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/beans/spring-beans-3.0.xsd<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/cache<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/cache/spring-cache.xsd<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/jee&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/jee/spring-jee.xsd"</span><span style="color: #0000FF; ">&gt;</span><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">cache:annotation-driven&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">bean&nbsp;</span><span style="color: #FF0000; ">id</span><span style="color: #0000FF; ">="cacheManager"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class</span><span style="color: #0000FF; ">="org.infinispan.spring.provider.ContainerCacheManagerFactoryBean"</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">constructor-arg&nbsp;</span><span style="color: #FF0000; ">ref</span><span style="color: #0000FF; ">="cacheContainer"</span><span style="color: #FF0000; ">&nbsp;&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">bean</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">jee:jndi-lookup&nbsp;</span><span style="color: #FF0000; ">id</span><span style="color: #0000FF; ">="cacheContainer"</span><span style="color: #FF0000; ">&nbsp;jndi-name</span><span style="color: #0000FF; ">="java:jboss/infinispan/tickets"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">&gt;</span>&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">jee:jndi-lookup</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">&nbsp;&lt;bean&nbsp;id="cacheContainer"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class="com.paul.myejb.common.util.cache.JndiSpringCacheManagerFactoryBean"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p:infinispanJNDI="java:jboss/infinispan/tickets"&nbsp;/&gt;&nbsp;</span><span style="color: #008000; ">--&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">beans</span><span style="color: #0000FF; ">&gt;</span></div><br />
     </li>
     <li>
     使用CACHE<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">package</span>&nbsp;com.paul.myejb.spring;<br /><br /><span style="color: #0000FF; ">import</span>&nbsp;org.springframework.beans.factory.annotation.Autowired;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.springframework.cache.CacheManager;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.springframework.cache.annotation.Cacheable;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.springframework.stereotype.Component;<br /><br />@Component<br /><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;MySpringBean&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;@Autowired<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;CacheManager&nbsp;cacheManager;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;@Cacheable(value&nbsp;=&nbsp;"my-local-cache",&nbsp;key&nbsp;=&nbsp;"#name")<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;String&nbsp;sayHello(String&nbsp;name)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" />MySpringBean&nbsp;NO&nbsp;CACHE<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" />");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;result&nbsp;=&nbsp;"Hi&nbsp;"&nbsp;+&nbsp;name&nbsp;+&nbsp;",&nbsp;I&nbsp;am&nbsp;Spring!";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.springframework.cache.Cache&nbsp;springCache&nbsp;=&nbsp;<span style="color: #0000FF; ">this</span>.cacheManager.getCache("my-local-cache");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(springCache.get(name)&nbsp;==&nbsp;<span style="color: #0000FF; ">null</span>&nbsp;?&nbsp;"null"&nbsp;:&nbsp;springCache.get(name).get());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;springCache.put(name,&nbsp;result);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;result;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />}</div><br />
     </li>
     <li><br /></li>
</ol><img src ="http://www.blogjava.net/paulwong/aggbug/422998.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2015-02-23 13:40 <a href="http://www.blogjava.net/paulwong/archive/2015/02/23/422998.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Infinispan资源</title><link>http://www.blogjava.net/paulwong/archive/2015/02/22/422993.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Sun, 22 Feb 2015 06:03:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2015/02/22/422993.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/422993.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2015/02/22/422993.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/422993.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/422993.html</trackback:ping><description><![CDATA[Infinispan是一个分布式的缓存，由JBOSS开发。支持JSR-107标准。<br />
使用时最好与SPRING结合，用在DAO层。<br />
以某方法参数作为KEY，返回的对象作为VALUE保存到缓存中。<br />
ADD/EDIT/REMOVE方法被执行时则清除所有的缓存。<br />
<br />
Infinispan的运行模式有两种：<br />
1、嵌入式<br />
先启动一个进程，再在此进程中启动Infinispan的CACHE MANAGER。<br />
2、CLIENT/SERVER<br />
直接运行startserver.sh来启动。<br />
<br />
两者区别<br />
嵌入式：<br />
1、Infinispan和启动进程是在同一个进程里，如JBOSS中的Infinispan<br />
2、要使用Infinispan的CACHE，必须将应用部署到此进程中，如将WAR应用部署到JBOSS中<br />
3、如有多台机以此模式运行，则互相可以通讯<br />
<br />
CLIENT/SERVER：<br />
1、Infinispan单独一个进程<br />
2、通过SDK，以MEMCHAED，RHQ等协议访问CACHE<br />
3、如有多台机以此模式运行，互相不可以通讯<br />
<br />
<span style="color: #ff0000;">JBOSS中的INFINISPAN肯定是嵌入式，要访问INFINISPAN的CACHE必须部署到JBOSS才能访问，没有远程模式。</span><br />
<br />
Infinispan中的CACHE有两种模式：本地缓存和集群缓存。<br />
<br />
本地缓存是单机版。<br />
集群缓存是多机网络版，又分为三种：<br />
1、分布式：网络中的每个节点只保存部份缓存条目，所有的节点合起来保存全部缓存条目<br />
当本机无此条目时，要通过网络去到别的机器上取<br />
2、复制式：网络中的每个节点都保存全部缓存条目，但缓存条目有更新时，所有节点一并更新<br />
当本机无此条目时，不用到别的节点取，但缓存条目有更新时，所有节点都会执行更新本地缓存操作<br />
3、无效式：网络中的每个节点互不通讯，但缓存条目有更新时，节点收到失效通知，各自处理本机的缓存条目<br />
<br />
编程使用方法<br />
1、通过程序使用，即在代码中写cache的存取。<br />
2、通过注释使用，这各注释是通过截面拦截方法方式实现，即如果在缓存中有此缓存条目，则方法不会被执行，直接返回结果。<br />
又细分两种：<br />
通过SPRING实现，通过JAVA EE的CDI实现。<br />
<br />
<a href="http://blog.csdn.net/kylinsoong/article/details/13168511" style="color: #333333; text-decoration: none; font-family: 'Microsoft YaHei'; font-size: 20px; line-height: 30px; background-color: #ffffff;" target="_blank">JBoss 系列三十一：JBoss Data Grid（Infinispan）缓存模式</a><br />
<br />
<a href="http://blog.csdn.net/kylinsoong/article/details/13325629" style="color: #333333; text-decoration: none; font-family: 'Microsoft YaHei'; font-size: 20px; line-height: 30px; background-color: #ffffff;" target="_blank">JBoss 系列三十二：JBoss Data Grid（Infinispan）缓存模式示例</a><br />
<br />
<br />
<h1><strong style="box-sizing: border-box;"><a href="https://github.com/infinispan/infinispan-quickstart" data-pjax="#js-repo-pjax-container" style="box-sizing: border-box; color: #4183c4; text-decoration: none; white-space: nowrap; background-image: initial; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;">infinispan-quickstart</a></strong></h1>
<br />
<a href="https://docs.jboss.org/infinispan/5.0/apidocs/org/infinispan/spring/provider/package-summary.html" target="_blank">https://docs.jboss.org/infinispan/5.0/apidocs/org/infinispan/spring/provider/package-summary.html</a><br />
<br />
<br />
Infinispan integrate with spring based application<br />
<a href="http://timtang.me/blog/2012/11/04/infinispan-spring-based-application-integration/" target="_blank">http://timtang.me/blog/2012/11/04/infinispan-spring-based-application-integration/</a><br />
<br />
<br />
Java缓存新标准（javax.cache）<br />
<a href="http://www.importnew.com/11723.html" target="_blank">http://www.importnew.com/11723.html</a>
<br /><br /><a href="https://developer.jboss.org/en/infinispan/cn/content?filterID=contentstatus[published]~objecttype~objecttype[document]" target="_blank">https://developer.jboss.org/en/infinispan/cn/content?filterID=contentstatus[published]~objecttype~objecttype[document]</a><img src ="http://www.blogjava.net/paulwong/aggbug/422993.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2015-02-22 14:03 <a href="http://www.blogjava.net/paulwong/archive/2015/02/22/422993.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>几大NOSQL数据库性能比较</title><link>http://www.blogjava.net/paulwong/archive/2015/01/30/422565.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Thu, 29 Jan 2015 16:16:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2015/01/30/422565.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/422565.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2015/01/30/422565.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/422565.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/422565.html</trackback:ping><description><![CDATA[Apache Cassandra NoSQL Performance Benchmarks<br /><a href="http://planetcassandra.org/nosql-performance-benchmarks" target="_blank">http://planetcassandra.org/nosql-performance-benchmarks</a><br /><br />NoSQL Benchmarking<br /><a href="http://www.cubrid.org/blog/dev-platform/nosql-benchmarking/" target="_blank">http://www.cubrid.org/blog/dev-platform/nosql-benchmarking/</a><br /><br /><br /><a href="http://www.badrit.com/blog/2013/11/18/redis-vs-mongodb-performance#.VMpfW2SUfsg" target="_blank">http://www.badrit.com/blog/2013/11/18/redis-vs-mongodb-performance#.VMpfW2SUfsg</a><br /><br />How many requests per second can I get out of Redis?<br /><a href="http://skipperkongen.dk/2013/08/27/how-many-requests-per-second-can-i-get-out-of-redis/" target="_blank">http://skipperkongen.dk/2013/08/27/how-many-requests-per-second-can-i-get-out-of-redis/</a><br /><br />redis性能测试，测试并发性能<br /><a href="http://my.oschina.net/pblack/blog/102394" target="_blank">http://my.oschina.net/pblack/blog/102394</a><img src ="http://www.blogjava.net/paulwong/aggbug/422565.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2015-01-30 00:16 <a href="http://www.blogjava.net/paulwong/archive/2015/01/30/422565.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>腾讯CKV海量分布式存储系统</title><link>http://www.blogjava.net/paulwong/archive/2014/07/16/415866.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Tue, 15 Jul 2014 23:58:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2014/07/16/415866.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/415866.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2014/07/16/415866.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/415866.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/415866.html</trackback:ping><description><![CDATA[<img src="http://ww4.sinaimg.cn/bmiddle/a1ab8e59jw1eeeg66h72fj20c83ek7ra.jpg" width="440" height="4412" alt="" /><img src ="http://www.blogjava.net/paulwong/aggbug/415866.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2014-07-16 07:58 <a href="http://www.blogjava.net/paulwong/archive/2014/07/16/415866.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一些数据切分、缓存、rpc框架、nosql方案资料</title><link>http://www.blogjava.net/paulwong/archive/2013/10/14/404954.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Mon, 14 Oct 2013 02:14:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2013/10/14/404954.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/404954.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2013/10/14/404954.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/404954.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/404954.html</trackback:ping><description><![CDATA[<div style="margin-bottom: 15px; font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 12px; line-height: 18px;"><span style="line-height: 1.8em; font-size: 14px;">1、数据切分</span></div><div id="blog_content" style="line-height: 1.8em; font-family: Helvetica, Tahoma, Arial, sans-serif;"><p style="margin: 0px; padding: 0px;">&nbsp; &nbsp; &nbsp; &nbsp; 1.1、<a href="http://www.guokr.com/blog/475765/" style="color: #108ac6;" target="_blank">mysql中间件研究（Atlas，cobar，TDDL）</a>&nbsp;</p><p style="margin: 0px; padding: 0px;">&nbsp; &nbsp; &nbsp; &nbsp; 1.2、<a href="http://www.cnblogs.com/ivanjack/archive/2010/09/11/1824001.html" style="color: #108ac6;" target="_blank">利用 MySQL Proxy 实现数据切分及整合&nbsp;</a></p><p style="margin: 0px; padding: 0px;">&nbsp; &nbsp; &nbsp; &nbsp; 1.3、<a href="http://www.dedecms.com/knowledge/data-base/mysql/2012/0819/7626.html" style="color: #108ac6;" target="_blank">基于MySQL分库分表方案简介&nbsp;</a></p><p style="margin: 0px; padding: 0px;"><span style="line-height: 1.5;">&nbsp; &nbsp; &nbsp; &nbsp;</span>&nbsp;1.4、<a href="http://yale.iteye.com/blog/1859988" style="color: #108ac6;" target="_blank">tddl和diamond &nbsp;</a></p><p style="margin: 0px; padding: 0px;">2、缓存</p><p style="margin: 0px; padding: 0px;">&nbsp; &nbsp; &nbsp; &nbsp; 2.1、<a href="http://ljh0721.iteye.com/blog/1811338" style="color: #108ac6;" target="_blank">java客户端三种方式操作&nbsp;</a></p><p style="margin: 0px; padding: 0px;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;2.2、<a href="http://zys-wings.com/?p=218" style="color: #108ac6;" target="_blank">myibatis配置memcached评测&nbsp;</a></p><p style="margin: 0px; padding: 0px;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;2.3、<a href="http://stackoverflow.com/questions/11364554/memcached-spring-caching" style="color: #108ac6;" target="_blank">Memcached + Spring Caching&nbsp;</a></p><p style="margin: 0px; padding: 0px;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;2.4、<a href="http://www.open-open.com/lib/view/1324369698014%20" style="color: #108ac6;" target="_blank">memcachedb-持久化存储的缓存系统&nbsp;</a></p><p style="margin: 0px; padding: 0px;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;2.5、<a href="http://blog.sina.com.cn/s/blog_613904cc0100w5ij.html" style="color: #108ac6;" target="_blank">memcachedb让memcache的数据持久化&nbsp;</a></p><p style="margin: 0px; padding: 0px;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;2.6、<a href="http://code.taobao.org/p/tair/wiki/intro/" style="color: #108ac6;" target="_blank">淘宝kv缓存框架tair&nbsp;</a></p><p style="margin: 0px; padding: 0px;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;2.7、<a href="http://yueyemaitian.iteye.com/admin/blogs/%20http:/gubaojian.blog.163.com/blog/static/1661799082012519084312/" style="color: #108ac6;" target="_blank">ibatis之扩展缓存ibatis-tair-cache&nbsp;</a></p><p style="margin: 0px; padding: 0px;">3、rpc框架</p><p style="margin: 0px; padding: 0px;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;3.1、<a href="http://code.alibabatech.com/wiki/display/dubbo/Home-zh" style="color: #108ac6;">dubbo&nbsp;</a></p><p style="margin: 0px; padding: 0px;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;3.2、hsf 未开源</p><p style="margin: 0px; padding: 0px;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;3.3、<a href="http://iwinit.iteye.com/blog/1745132" style="color: #108ac6;" target="_blank">服务框架HSF分析之一容器启动</a></p><p style="margin: 0px; padding: 0px;">4、noSql</p><p style="margin: 0px; padding: 0px;"><span style="line-height: 1.5;">&nbsp; &nbsp; &nbsp; &nbsp;</span>&nbsp;4.1、<a href="http://www.ha97.com/3447.html" style="color: #108ac6;" target="_blank">学习NoSQL数据库的必读资料&nbsp;</a></p></div><img src ="http://www.blogjava.net/paulwong/aggbug/404954.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2013-10-14 10:14 <a href="http://www.blogjava.net/paulwong/archive/2013/10/14/404954.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>简单的开源分布式缓存框架架</title><link>http://www.blogjava.net/paulwong/archive/2012/05/02/377145.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Wed, 02 May 2012 02:24:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2012/05/02/377145.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/377145.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2012/05/02/377145.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/377145.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/377145.html</trackback:ping><description><![CDATA[<div><a target="_blank" href="http://code.google.com/p/xcache-j/">http://code.google.com/p/xcache-j/</a></div><img src ="http://www.blogjava.net/paulwong/aggbug/377145.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2012-05-02 10:24 <a href="http://www.blogjava.net/paulwong/archive/2012/05/02/377145.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>实战Memcached缓存系统</title><link>http://www.blogjava.net/paulwong/archive/2012/04/29/377039.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Sun, 29 Apr 2012 13:42:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2012/04/29/377039.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/377039.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2012/04/29/377039.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/377039.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/377039.html</trackback:ping><description><![CDATA[<ol><li><a href="http://blog.csdn.net/poechant/article/details/7074257"><font color="#4466bb">实战Memcached缓存系统（1）Memcached基础及示例程序</font></a></ <br 内容：建筑Memcached背景知识和入门示例程序。 /> <br /></li><li><a href="http://blog.csdn.net/poechant/article/details/7074928"><font color="#4466bb">实战Memcached缓存系统（2）Memcached Java API基础之MemcachedClient</font></a> <br />内容：以Memcached的Java Spy API为例，讲述基本的客户端使用。 <br /></li><li><a href="http://blog.csdn.net/poechant/article/details/7082115"><font color="#4466bb">实战Memcached缓存系统（3）Memcached配置参数初解</font></a> <br />内容：提供Memcached配置的初步解读。 <br /></li><li><a href="http://blog.csdn.net/poechant/article/details/7082189"><font color="#4466bb">实战Memcached缓存系统（4）Memcached的CAS协议</font></a> <br />内容：Memcached的CAS协议。 <br /></li><li><a href="http://blog.csdn.net/poechant/article/details/7082684"><font color="#4466bb">实战Memcached缓存系统（5）Memcached的CAS程序实例</font></a> <br />内容：Memcached Client使用CAS协议的实例。 <br /></li><li><a href="http://blog.csdn.net/poechant/article/details/7082842"><font color="#4466bb">实战Memcached缓存系统（6）Memcached CAS的多线程程序实例</font></a> <br />内容：Memcached Client使用CAS协议的多线程实例。 <br /></li><li><a href="http://blog.csdn.net/poechant/article/details/7085881"><font color="#4466bb">实战Memcached缓存系统（7）Memcached的一些基础FAQ</font></a> <br />内容：一些关于Memcached的常见问题和基础知识汇总，不断更新中。 <br /></li><li><a href="http://blog.csdn.net/poechant/article/details/7201087"><font color="#4466bb">实战Memcached缓存系统（8）Memcached异步实时读写问题的解决方案SAC</font></a> </li></ol><img src ="http://www.blogjava.net/paulwong/aggbug/377039.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2012-04-29 21:42 <a href="http://www.blogjava.net/paulwong/archive/2012/04/29/377039.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring基于注解的缓存配置--web应用实例</title><link>http://www.blogjava.net/paulwong/archive/2012/02/16/370119.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Thu, 16 Feb 2012 09:04:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2012/02/16/370119.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/370119.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2012/02/16/370119.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/370119.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/370119.html</trackback:ping><description><![CDATA[基于方法级别的缓存：通常如果一个带有参数的方法执行后会返回一个Object，那可以认为如果参数相同，则返回的结果一样，这样就可以为这个方法建立一个缓存Map，参数就是KEY，返回的结果就是VALUE，调用此方法前可以先判断参数是否和之前的一样，如果是则从Map中取出结果返回调用者，而无需再进入此方法内执行得到，从而节省了此方法执行时的时间。<br /><br /><a target="_blank" href="http://hanqunfeng.iteye.com/blog/605123">http://hanqunfeng.iteye.com/blog/605123</a><br /><br />经验证，如果要支持分布式的缓存，用spring-modules-cache不好使，必须转用<a target="_blank" href="http://code.google.com/p/ehcache-spring-annotations/">com.googlecode.ehcache-spring-annotations</a>。<br /><br />全套MAVEN的POM:<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">project&nbsp;</span><span style="color: #FF0000; ">xmlns</span><span style="color: #0000FF; ">="http://maven.apache.org/POM/4.0.0"</span><span style="color: #FF0000; ">&nbsp;xmlns:xsi</span><span style="color: #0000FF; ">="http://www.w3.org/2001/XMLSchema-instance"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;xsi:schemaLocation</span><span style="color: #0000FF; ">="http://maven.apache.org/POM/4.0.0&nbsp;http://maven.apache.org/xsd/maven-4.0.0.xsd"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">modelVersion</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">4.0.0</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">modelVersion</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">EhCache-Cluster-Tester</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">EhCache-Cluster-Tester</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">version</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">0.0.1-SNAPSHOT</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">version</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">packaging</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">war</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">packaging</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">dependencies</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">net.sf.ehcache</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">ehcache-jgroupsreplication</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">version</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">1.4</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">version</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">&nbsp;Spring&nbsp;framework&nbsp;</span><span style="color: #008000; ">--&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">org.springframework</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">spring</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">version</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">${spring.version}</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">version</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">&nbsp;Spring&nbsp;MVC&nbsp;framework&nbsp;</span><span style="color: #008000; ">--&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">org.springframework</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">spring-webmvc</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">version</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">${spring.version}</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">version</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">javax.servlet</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">servlet-api</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">version</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">2.4</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">version</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">scope</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">provided</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">scope</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">org.slf4j</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">slf4j-jdk14</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">version</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">1.5.6</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">version</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">type</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">jar</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">type</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">scope</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">compile</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">scope</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">log4j</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">log4j</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">version</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">1.2.13</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">version</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">type</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">jar</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">type</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">scope</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">compile</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">scope</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">cglib</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">cglib-nodep</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">version</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">2.2.2</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">version</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">type</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">jar</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">type</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">scope</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">compile</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">scope</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;dependency&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;groupId&gt;org.springmodules&lt;/groupId&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;artifactId&gt;spring-modules-cache&lt;/artifactId&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;version&gt;0.9&lt;/version&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;type&gt;jar&lt;/type&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;scope&gt;compile&lt;/scope&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/dependency&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">--&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">com.googlecode.ehcache-spring-annotations</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">ehcache-spring-annotations</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">version</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">1.2.0</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">version</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">type</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">jar</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">type</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">scope</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">compile</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">scope</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">exclusions</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">exclusion</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">spring-aop</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">org.springframework</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">exclusion</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">exclusion</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">spring-expression</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">org.springframework</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">exclusion</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">exclusions</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">dependencies</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">build</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">finalName</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">cluster-test</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">finalName</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">plugins</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">plugin</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">org.apache.maven.plugins</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">maven-compiler-plugin</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">configuration</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">source</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">1.6</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">source</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">target</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">1.6</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">target</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">encoding</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">UTF-8</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">encoding</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">configuration</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">plugin</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">plugin</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">org.mortbay.jetty</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">jetty-maven-plugin</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">version</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">8.0.4.v20111024</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">version</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;artifactId&gt;maven-jetty-plugin&lt;/artifactId&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;version&gt;6.1.26&lt;/version&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">--&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">configuration</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">contextPath</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">/cluster-test</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">contextPath</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">scanIntervalSeconds</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">3</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">scanIntervalSeconds</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">scanTargetPatterns</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">scanTargetPattern</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">directory</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">src/main/webapp/WEB-INF</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">directory</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">excludes</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">exclude</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">**/*.jsp</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">exclude</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">excludes</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">includes</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">include</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">**/*.properties</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">include</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">include</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">**/*.xml</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">include</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">includes</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">scanTargetPattern</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">scanTargetPatterns</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">configuration</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">plugin</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">plugins</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">build</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">properties</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">spring</span><span style="color: #FF0000; ">.version</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">2.5.2</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">spring.version</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">properties</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">project</span><span style="color: #0000FF; ">&gt;</span></div><img src ="http://www.blogjava.net/paulwong/aggbug/370119.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2012-02-16 17:04 <a href="http://www.blogjava.net/paulwong/archive/2012/02/16/370119.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ehcache分布式缓存</title><link>http://www.blogjava.net/paulwong/archive/2012/02/14/369948.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Tue, 14 Feb 2012 07:46:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2012/02/14/369948.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/369948.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2012/02/14/369948.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/369948.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/369948.html</trackback:ping><description><![CDATA[从1.2版本开始，Ehcache可以使用分布式的缓存了。<br />
<br />
分布式这个特性是以plugin的方式实现的。Ehcache自带了一些默认的分布式缓存插件实现，这些插件可以满足大部分应用的需要。如果需要使用其他的插件那就需要自己开发了，开发者可以通过查看distribution包里的源代码及JavaDoc来实现它。<br />
<br />
尽管不是必须的，在使用分布式缓存时理解一些ehcahce的设计思想也是有帮助的。这可以参看分布式缓存设计的页面。<br />
以下的部分将展示如何让分布式插件同ehcache一起工作。<br />
<br />
下面列出的是一些分布式缓存中比较重要的方面：<br />
<br />
你如何知道集群环境中的其他缓存？分布式传送的消息是什么形式？什么情况需要进行复制？增加（Puts），更新（Updates）或是失效（Expiries）？采用什么方式进行复制？同步还是异步方式？<br />
<br />
为了安装分布式缓存，你需要配置一个PeerProvider、一个CacheManagerPeerListener，它们对于一个CacheManager来说是全局的。每个进行分布式操作的cache都要添加一个cacheEventListener来传送消息。<br />
<br />
<strong>正确的元素类型</strong><br />
<br />
只有可序列化的元素可以进行复制。<br />
<br />
一些操作，比如移除，只需要元素的键值而不用整个元素；在这样的操作中即使元素不是可序列化的但键值是可序列化的也可以被复制，<br />
<br />
<strong>成员发现（Peer Discovery）</strong><br />
<br />
Ehcache进行集群的时候有一个cache组的概念。每个cache都是其他cache的一个peer，没有主cache的存在。刚才我们问了一个问题：你如何知道集群环境中的其他缓存？这个问题可以命名为成员发现（Peer Discovery）。<br />
<br />
Ehcache提供了两种机制用来进行成员发现，就像一辆汽车：手动档和自动档。<br />
<br />
要使用一个内置的成员发现机制要在ehcache的配置文件中指定cacheManagerPeerProviderFactory元素的class属性为net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory。<br />
<br />
<strong>自动的成员发现</strong><br />
<br />
自动的发现方式用TCP广播机制来确定和维持一个广播组。它只需要一个简单的配置可以自动的在组中添加和移除成员。在集群中也不需要什么优化服务器的知识，这是默认推荐的。<br />
<br />
成员每秒向群组发送一个&#8220;心跳&#8221;。如果一个成员 5秒种都没有发出信号它将被群组移除。如果一个新的成员发送了一个&#8220;心跳&#8221;它将被添加进群组。<br />
<br />
任何一个用这个配置安装了复制功能的cache都将被其他的成员发现并标识为可用状态。<br />
<br />
要设置自动的成员发现，需要指定ehcache配置文件中cacheManagerPeerProviderFactory元素的properties属性，就像下面这样：<br /><br />
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">peerDiscovery=automatic&nbsp;multicastGroupAddress=multicast&nbsp;address&nbsp;|&nbsp;multicast&nbsp;host&nbsp;name&nbsp;multicastGroupPort=port&nbsp;<br />#&nbsp;(timeToLive属性详见常见问题部分的描述)<br />timeToLive=0-255</span></div><br />
示例<br />
<br />
假设你在集群中有两台服务器。你希望同步sampleCache1和sampleCache2。每台独立的服务器都要有这样的配置：<br />
配置server1和server2<br />
<br />
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">cacheManagerPeerProviderFactory<br /></span><span style="color: #FF0000; ">class</span><span style="color: #0000FF; ">="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"</span><span style="color: #FF0000; "><br />properties</span><span style="color: #0000FF; ">="peerDiscovery=automatic,&nbsp;multicastGroupAddress=230.0.0.1,<br />multicastGroupPort=4446,&nbsp;timeToLive=32"</span><span style="color: #0000FF; ">/&gt;</span></div><br />
<strong>手动进行成员发现</strong><br />
<br />
进行手动成员配置要知道每个监听器的IP地址和端口。成员不能在运行时动态地添加和移除。在技术上很难使用广播的情况下就可以手动成员发现，例如在集群的服务器之间有一个不能传送广播报文的路由器。你也可以用手动成员发现进行单向的数据复制，只让server2知道server1而server1不知道server2。<br />
<br />
配置手动成员发现，需要指定ehcache配置文件中cacheManagerPeerProviderFactory的properties属性，像下面这样：<br />
<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">peerDiscovery</span><span style="color: #000000; ">=</span><span style="color: #000000; ">manual&nbsp;rmiUrls</span><span style="color: #000000; ">=</span><span style="color: #000000; ">//server:port/cacheName</span><span style="color: #000000; ">,</span><span style="color: #000000; ">&nbsp;<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><br />rmiUrls配置的是服务器cache&nbsp;peers的列表。注意不要重复配置。</span></div><br />
示例<br />
<br />
假设你在集群中有两台服务器。你要同步sampleCache1和sampleCache2。下面是每个服务器需要的配置：<br />
配置server1<br />
<br />
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">cacheManagerPeerProviderFactory<br /></span><span style="color: #FF0000; ">class</span><span style="color: #0000FF; ">="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"</span><span style="color: #FF0000; "><br />properties</span><span style="color: #0000FF; ">="peerDiscovery=manual,<br />rmiUrls=//server2:40001/sampleCache11|//server2:40001/sampleCache12"</span><span style="color: #0000FF; ">/&gt;</span></div><br />
配置server2<br />
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">cacheManagerPeerProviderFactory<br /></span><span style="color: #FF0000; ">class</span><span style="color: #0000FF; ">="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"</span><span style="color: #FF0000; "><br />properties</span><span style="color: #0000FF; ">="peerDiscovery=manual,<br />rmiUrls=//server1:40001/sampleCache11|//server1:40001/sampleCache12"</span><span style="color: #0000FF; ">/&gt;</span></div><br />
<strong>配置CacheManagerPeerListener</strong><br />
<br />
每个CacheManagerPeerListener监听成员们发向当前CacheManager的消息。<br />
配置CacheManagerPeerListener需要指定一个CacheManagerPeerListenerFactory，它以插件的机制实现，用来创建CacheManagerPeerListener。<br />
<br />
cacheManagerPeerListenerFactory的属性有：<br />
class &#8211; 一个完整的工厂类名。<br />
properties &#8211; 只对这个工厂有意义的属性，使用逗吃分隔。<br />
<br />
Ehcache有一个内置的基于RMI的分布系统。它的监听器是RMICacheManagerPeerListener，这个监听器可以用RMICacheManagerPeerListenerFactory来配置。<br />
<br />
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">cacheManagerPeerListenerFactory<br /></span><span style="color: #FF0000; ">class</span><span style="color: #0000FF; ">="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"</span><span style="color: #FF0000; "><br />properties</span><span style="color: #0000FF; ">="hostName=localhost,&nbsp;port=40001,<br />socketTimeoutMillis=2000"</span><span style="color: #0000FF; ">/&gt;</span></div><br />有效的属性是：<br />
hostname (可选) &#8211; 运行监听器的服务器名称。标明了做为集群群组的成员的地址，同时也是你想要控制的从集群中接收消息的接口。<br />
<br />
在CacheManager初始化的时候会检查hostname是否可用。<br />
<br />
如果hostName不可用，CacheManager将拒绝启动并抛出一个连接被拒绝的异常。<br />
<br />
如果指定，hostname将使用InetAddress.getLocalHost().getHostAddress()来得到。<br />
<br />
警告：不要将localhost配置为本地地址127.0.0.1，因为它在网络中不可见将会导致不能从远程服务器接收信息从而不能复制。在同一台机器上有多个CacheManager的时候，你应该只用localhost来配置。<br />
<br />
port &#8211; 监听器监听的端口。<br />
socketTimeoutMillis (可选) &#8211; Socket超时的时间。默认是2000ms。<br />
<br />
<strong>配置CacheReplicators</strong><br />
<br />
每个要进行同步的cache都需要设置一个用来向CacheManagerr的成员复制消息的缓存事件监听器。这个工作要通过为每个cache的配置增加一个cacheEventListenerFactory元素来完成。<br />
<br />
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">&nbsp;Sample&nbsp;cache&nbsp;named&nbsp;sampleCache2.&nbsp;</span><span style="color: #008000; ">--&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">cache&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="sampleCache2"</span><span style="color: #FF0000; "><br />maxElementsInMemory</span><span style="color: #0000FF; ">="10"</span><span style="color: #FF0000; "><br />eternal</span><span style="color: #0000FF; ">="false"</span><span style="color: #FF0000; "><br />timeToIdleSeconds</span><span style="color: #0000FF; ">="100"</span><span style="color: #FF0000; "><br />timeToLiveSeconds</span><span style="color: #0000FF; ">="100"</span><span style="color: #FF0000; "><br />overflowToDisk</span><span style="color: #0000FF; ">="false"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">cacheEventListenerFactory&nbsp;</span><span style="color: #FF0000; ">class</span><span style="color: #0000FF; ">="net.sf.ehcache.distribution.RMICacheReplicatorFactory"</span><span style="color: #FF0000; "><br />properties</span><span style="color: #0000FF; ">="replicateAsynchronously=true,<br />replicatePuts=true,&nbsp;replicateUpdates=true,&nbsp;replicateUpdatesViaCopy=false,&nbsp;replicateRemovals=true&nbsp;"</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">cache</span><span style="color: #0000FF; ">&gt;</span></div><br />
name：缓存名称。通常为缓存对象的类名（非严格标准）。<br />
<br />
maxElementsInMemory：设置基于内存的缓存可存放对象的最大数目。<br />
<br />
maxElementsOnDisk：设置基于硬盘的缓存可存放对象的最大数目。<br />
<br />
eternal：如果为true，表示对象永远不会过期，此时会忽略timeToIdleSeconds和timeToLiveSeconds属性，默认为false;<br />
<br />
timeToIdleSeconds： 设定允许对象处于空闲状态的最长时间，以秒为单位。当对象自从最近一次被访问后，如果处于空闲状态的时间超过了timeToIdleSeconds属性值，这个对象就会过期。当对象过期，EHCache将把它从缓存中清空。只有当eternal属性为false，该属性才有效。如果该属性值为0，则表示对象可以无限期地处于空闲状态。<br />
<br />
timeToLiveSeconds：设定对象允许存在于缓存中的最长时间，以秒为单位。当对象自从被存放到缓存中后，如果处于缓存中的时间超过了 timeToLiveSeconds属性值，这个对象就会过期。当对象过期，EHCache将把它从缓存中清除。只有当eternal属性为false，该属性才有效。如果该属性值为0，则表示对象可以无限期地存在于缓存中。timeToLiveSeconds必须大于timeToIdleSeconds属性，才有意义。<br />
<br />
overflowToDisk：如果为true,表示当基于内存的缓存中的对象数目达到了maxElementsInMemory界限后，会把益出的对象写到基于硬盘的缓存中。<br />
<br />
class &#8211; 使用net.sf.ehcache.distribution.RMICacheReplicatorFactory<br />
<br />
这个工厂支持以下属性：<br />
replicatePuts=true | false &#8211; 当一个新元素增加到缓存中的时候是否要复制到其他的peers. 默认是true。<br />
replicateUpdates=true | false &#8211; 当一个已经在缓存中存在的元素被覆盖时是否要进行复制。默认是true。<br />
replicateRemovals= true | false &#8211; 当元素移除的时候是否进行复制。默认是true。<br />
replicateAsynchronously=true | false &#8211; 复制方式是异步的（指定为true时）还是同步的（指定为false时）。默认是true。<br />
replicateUpdatesViaCopy=true | false &#8211; 当一个元素被拷贝到其他的cache中时是否进行复制（指定为true时为复制），默认是true。<br />
<br />
你可以使用ehcache的默认行为从而减少配置的工作量，默认的行为是以异步的方式复制每件事；你可以像下面的例子一样减少RMICacheReplicatorFactory的属性配置：<br />
<br />
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">&nbsp;Sample&nbsp;cache&nbsp;named&nbsp;sampleCache4.&nbsp;All&nbsp;missing&nbsp;RMICacheReplicatorFactory&nbsp;properties&nbsp;default&nbsp;to&nbsp;true&nbsp;</span><span style="color: #008000; ">--&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">cache&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="sampleCache4"</span><span style="color: #FF0000; "><br />maxElementsInMemory</span><span style="color: #0000FF; ">="10"</span><span style="color: #FF0000; "><br />eternal</span><span style="color: #0000FF; ">="true"</span><span style="color: #FF0000; "><br />overflowToDisk</span><span style="color: #0000FF; ">="false"</span><span style="color: #FF0000; "><br />memoryStoreEvictionPolicy</span><span style="color: #0000FF; ">="LFU"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">cacheEventListenerFactory&nbsp;</span><span style="color: #FF0000; ">class</span><span style="color: #0000FF; ">="net.sf.ehcache.distribution.RMICacheReplicatorFactory"</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">cache</span><span style="color: #0000FF; ">&gt;</span></div><br /><strong>常见的问题Windows上的Tomcat</strong><br />
<br />
有一个Tomcat或者是JDK的bug，在tomcat启动时如果tomcat的安装路径中有空格的话，在启动时RMI监听器会失败。参见http://archives.java.sun.com/cgi-bin/wa?A2=ind0205&amp;L=rmi-users&amp;P=797和http://www.ontotext.com/kim/doc/sys-doc/faq-howto-bugs/known-bugs.html。<br />
<br />
由于在Windows上安装Tomcat默认是装在&#8220;Program Files&#8221;文件夹里的，所以这个问题经常发生。<br />
<br />
<strong>广播阻断</strong><br />
<br />
自动的peer discovery与广播息息相关。广播可能被路由阻拦，像Xen和VMWare这种虚拟化的技术也可以阻拦广播。如果这些都打开了，你可能还在要将你的网卡的相关配置打开。<br />
<br />
一个简单的办法可以告诉广播是否有效，那就是使用ehcache remote debugger来看&#8220;心跳&#8221;是否可用。<br />
<br />
<strong>广播传播的不够远或是传得太远</strong><br />
<br />
你可以通过设置badly misnamed time to live来控制广播传播的距离。用广播IP协议时，timeToLive的值指的是数据包可以传递的域或是范围。约定如下：<br />
<br />
0是限制在同一个服务器<br />1是限制在同一个子网<br />32是限制在同一个网站<br />64是限制在同一个region<br />128是限制在同一个大洲<br />255是不限制<br />
<br />
译者按：上面这些资料翻译的不够准确，请读者自行寻找原文理解吧。<br />
<br />
在Java实现中默认值是1，也就是在同一个子网中传播。改变timeToLive属性可以限制或是扩展传播的范围。<br />
<br />
原文地址为 http://ehcache.sourceforge.net/documentation/distributed_caching.html<img src ="http://www.blogjava.net/paulwong/aggbug/369948.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2012-02-14 15:46 <a href="http://www.blogjava.net/paulwong/archive/2012/02/14/369948.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>优化程序之前，可用Jamon来监测你的Spring应用</title><link>http://www.blogjava.net/paulwong/archive/2012/01/25/368882.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Wed, 25 Jan 2012 08:32:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2012/01/25/368882.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/368882.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2012/01/25/368882.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/368882.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/368882.html</trackback:ping><description><![CDATA[/** <br />*作者：张荣华(ahuaxuan) <br />*2007-8-15 <br />*转载请注明出处及作者 <br />*/ <br /><br />前两天在看Spring内置的拦截器的时候，发现了一个之前没有注意的类：org.springframework.aop.interceptor.JamonPerformanceMonitorInterceptor，好奇心促使我上网查了一下这个jamon。大概看了一下之后发现这个玩意还真挺好用的而且挺重要的，而且现在国内对它的介绍也很少，所以写了一篇文章和大家分享。 <br /><br /><strong style="color: #0000ff">一，Jamon简介：</strong> <br />Jamon的全名是：Java Application Monitor。它是一个小巧的，免费的，高性能的，线程安全的性能监测工具。它可以用来测定系统的性能瓶颈，也可以用来监视用户和应用程序之间的交互情况。 Jamon主要是用来检测jee的应用程序。它最新的版本是2.1，可以用在1.4以上的jdk上。 <br /><br /><span style="color: #0000ff"><strong>二，将jamon导入到你的应用程序中去 </strong></span><br />首先下载jamon的开发包，见我的附件，同时你也可以去Sourceforge上自己下载。Sourceforge的下载地址为http://jamonapi.sourceforge.net。解压之后可以得到一个jar包和一个war包。jar包是自己会用到的，而war包是一个例子（不要小看这个例子，待会也要把它导入到项目中）。把war包之间丢到服务器上，访问：localhost:8080/jamon就可以看到这个例子了，这个例子是一个简单的性能监控系统。 <br /><br />接着把例子中的所有的包都导入到项目中，并把war包中的jsp和images还有css都考到项目中，比如新建一个目录叫monitor（它和WEB-INF是同级目录）。 <br /><br /><span style="color: #0000ff"><strong>三，正确配置自己的应用 </strong></span><br />我们在性能监测的时候最监测的就是页面的访问率和类中方法的访问率。所以在这一部分主要讲解一下如何监测自己的页面和类中方法的访问。 <br /><br /><span style="color: #0000ff">1， 检测自己的页面访问率 </span><br />首先我们需要在web.xml中添加一个filter，这个filter就是用来判断哪些页面需要被监视的，如下所示： 
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">JAMonFilter</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">com.easywebwork.filter.EasyPageMonFilter</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">JAMonFilter</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/*</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-mapping</span><span style="color: #0000ff">&gt;</span></div><br />接下来我们看看这个filter的写法：<br /><br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img id="Codehighlighter1_0_54_Open_Image" onclick="this.style.display='none'; Codehighlighter1_0_54_Open_Text.style.display='none'; Codehighlighter1_0_54_Closed_Image.style.display='inline'; Codehighlighter1_0_54_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_0_54_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_0_54_Closed_Text.style.display='none'; Codehighlighter1_0_54_Open_Image.style.display='inline'; Codehighlighter1_0_54_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif"><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_0_54_Closed_Text">/** */</span><span id="Codehighlighter1_0_54_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" /> * </span><span style="color: #808080">@author</span><span style="color: #008000"> 张荣华（ahuaxuan）<br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" /> *<br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" /> * </span><span style="color: #808080">@since</span><span style="color: #008000"> 2007-8-13<br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" /> </span><span style="color: #008000">*/</span></span><span style="color: #000000"><br /><img id="Codehighlighter1_102_966_Open_Image" onclick="this.style.display='none'; Codehighlighter1_102_966_Open_Text.style.display='none'; Codehighlighter1_102_966_Closed_Image.style.display='inline'; Codehighlighter1_102_966_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_102_966_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_102_966_Closed_Text.style.display='none'; Codehighlighter1_102_966_Open_Image.style.display='inline'; Codehighlighter1_102_966_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">class</span><span style="color: #000000"> PageMonFilter </span><span style="color: #0000ff">extends</span><span style="color: #000000"> JAMonFilter</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_102_966_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_102_966_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" /><br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" /> </span><span style="color: #0000ff">private</span><span style="color: #000000"> </span><span style="color: #0000ff">static</span><span style="color: #000000"> </span><span style="color: #0000ff">final</span><span style="color: #000000"> </span><span style="color: #0000ff">long</span><span style="color: #000000"> serialVersionUID </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">5746197114960908454L</span><span style="color: #000000">;<br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" /><br /><img id="Codehighlighter1_308_669_Open_Image" onclick="this.style.display='none'; Codehighlighter1_308_669_Open_Text.style.display='none'; Codehighlighter1_308_669_Closed_Image.style.display='inline'; Codehighlighter1_308_669_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_308_669_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_308_669_Closed_Text.style.display='none'; Codehighlighter1_308_669_Open_Image.style.display='inline'; Codehighlighter1_308_669_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif"> </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) </span><span style="color: #0000ff">throws</span><span style="color: #000000"> IOException, ServletException </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_308_669_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_308_669_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" /> Monitor allPages </span><span style="color: #000000">=</span><span style="color: #000000"> MonitorFactory.start(</span><span style="color: #0000ff">new</span><span style="color: #000000"> MonKeyImp(</span><span style="color: #000000">"</span><span style="color: #000000">org.easywebwork.allPages</span><span style="color: #000000">"</span><span style="color: #000000">,getURI(request),</span><span style="color: #000000">"</span><span style="color: #000000">ms.</span><span style="color: #000000">"</span><span style="color: #000000">));<br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" /> </span><span style="color: #008000">//</span><span style="color: #008000">这里就是我们要监视的所有的页面的配置</span><span style="color: #008000"><br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" /></span><span style="color: #000000"> Monitor monitor </span><span style="color: #000000">=</span><span style="color: #000000"> MonitorFactory.start(getURI(request));<br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" /> </span><span style="color: #008000">//</span><span style="color: #008000">这里就是我们要监视的某个页面的配置</span><span style="color: #008000"><br /><img id="Codehighlighter1_542_598_Open_Image" onclick="this.style.display='none'; Codehighlighter1_542_598_Open_Text.style.display='none'; Codehighlighter1_542_598_Closed_Image.style.display='inline'; Codehighlighter1_542_598_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_542_598_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_542_598_Closed_Text.style.display='none'; Codehighlighter1_542_598_Open_Image.style.display='inline'; Codehighlighter1_542_598_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif"></span><span style="color: #000000"> </span><span style="color: #0000ff">try</span><span style="color: #000000"> </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_542_598_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_542_598_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" /> filterChain.doFilter(request, response);<br /><img id="Codehighlighter1_608_663_Open_Image" onclick="this.style.display='none'; Codehighlighter1_608_663_Open_Text.style.display='none'; Codehighlighter1_608_663_Closed_Image.style.display='inline'; Codehighlighter1_608_663_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_608_663_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_608_663_Closed_Text.style.display='none'; Codehighlighter1_608_663_Open_Image.style.display='inline'; Codehighlighter1_608_663_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif"> }</span></span><span style="color: #000000"> </span><span style="color: #0000ff">finally</span><span style="color: #000000"> </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_608_663_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_608_663_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" /> monitor.stop();<br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" /> allPages.stop();<br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" /> }</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" /> }</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" /><br /><img id="Codehighlighter1_724_912_Open_Image" onclick="this.style.display='none'; Codehighlighter1_724_912_Open_Text.style.display='none'; Codehighlighter1_724_912_Closed_Image.style.display='inline'; Codehighlighter1_724_912_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_724_912_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_724_912_Closed_Text.style.display='none'; Codehighlighter1_724_912_Open_Image.style.display='inline'; Codehighlighter1_724_912_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif"> </span><span style="color: #0000ff">protected</span><span style="color: #000000"> String getURI(ServletRequest request) </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_724_912_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_724_912_Open_Text"><span style="color: #000000">{<br /><img id="Codehighlighter1_775_846_Open_Image" onclick="this.style.display='none'; Codehighlighter1_775_846_Open_Text.style.display='none'; Codehighlighter1_775_846_Closed_Image.style.display='inline'; Codehighlighter1_775_846_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_775_846_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_775_846_Closed_Text.style.display='none'; Codehighlighter1_775_846_Open_Image.style.display='inline'; Codehighlighter1_775_846_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif"> </span><span style="color: #0000ff">if</span><span style="color: #000000"> (request </span><span style="color: #0000ff">instanceof</span><span style="color: #000000"> HttpServletRequest) </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_775_846_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_775_846_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" /> </span><span style="color: #0000ff">return</span><span style="color: #000000"> ((HttpServletRequest) request).getRequestURI();<br /><img id="Codehighlighter1_854_906_Open_Image" onclick="this.style.display='none'; Codehighlighter1_854_906_Open_Text.style.display='none'; Codehighlighter1_854_906_Closed_Image.style.display='inline'; Codehighlighter1_854_906_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_854_906_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_854_906_Closed_Text.style.display='none'; Codehighlighter1_854_906_Open_Image.style.display='inline'; Codehighlighter1_854_906_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif"> }</span></span><span style="color: #000000"> </span><span style="color: #0000ff">else</span><span style="color: #000000"> </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_854_906_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_854_906_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" /> </span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #000000">"</span><span style="color: #000000">Not an HttpServletRequest</span><span style="color: #000000">"</span><span style="color: #000000">;<br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" /> }</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" /> }</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" /><br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" /> </span><span style="color: #0000ff">private</span><span style="color: #000000"> FilterConfig filterConfig </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">null</span><span style="color: #000000">;<br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" /> <br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span><span style="color: #000000">}</span></div><br />这个类看上去很简单，其实也挺<span style="color: #0000ff">简单的，就是得到uri，然后把它注册到MonitorFactory类中。这样只</span>要我们去访问刚才创建的monitor目录下的jsp就可以看到性能监测页面了。 <br /><br />2， 接下来我们看看在使用spring的情况下如何监测一个bean的方法调用。<br />Spring也提供了对Jamon的支持(spring支持的东西还真多啊)，也就是文章开头提出的那个拦截器，为了给我们的bean加上拦截器，我们在spring的applicationcontext配置文件中加入如下语句：<br /><br /><bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean </span><span style="color: #ff0000">class</span><span style="color: #0000ff">="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" /> </span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property </span><span style="color: #ff0000">name</span><span style="color: #0000ff">="beanNames"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" /> </span><span style="color: #0000ff">&lt;</span><span style="color: #800000">list</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" /> </span><span style="color: #0000ff">&lt;</span><span style="color: #800000">value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">userService</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" /> </span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">list</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" /> </span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" /> </span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property </span><span style="color: #ff0000">name</span><span style="color: #0000ff">="interceptorNames"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" /> </span><span style="color: #0000ff">&lt;</span><span style="color: #800000">list</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" /> </span><span style="color: #0000ff">&lt;</span><span style="color: #800000">value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">jamonInterceptor</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" /> </span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">list</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" /> </span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" /> </span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">bean</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" /> <br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" /> </span><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean </span><span style="color: #ff0000">id</span><span style="color: #0000ff">="jamonInterceptor"</span><span style="color: #ff0000"> class</span><span style="color: #0000ff">="org.springframework.aop.interceptor.JamonPerformanceMonitorInterceptor"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">bean</span><span style="color: #0000ff">&gt;</span></div><br />上面这个是典型的spring的aop的配置，如果对spring的aop配置不了解的可以去看一下spring中文文档，当然如果不想了解的话即使直接把这段配置拷到自己的项目中也是可以直接使用的。 <br /><br />还有一个步骤就是在你的log4j.properties中加入这句代码： <br /><br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" /><span style="color: #000000">log4j.logger.org.springframework.aop.interceptor.JamonPerformanceMonitorInterceptor </span><span style="color: #000000">=</span><span style="color: #000000"> TRACE</span></div><br /><br />如果没有这一行，那么这个拦截器是不会把方法调用的信息向MonitorFactory注册的。 <br /><br />只需要这些步骤，userservice中的方法在调用的时候就可以被拦截，然后将其注册到MonitorFactory中去了。 <br /><br />所有的配置完成之后我们来看一下效果吧: <br />http://www.iteye.com/topics/download/b2bac96e-6c18-4340-b7e0-f84c7bb6adca从这个图上我们可以看到，所有页面被访问的次数，UserService中的getAllUsers被调用的次数，最右边的是访问时间。这只是整个图的一部分，当然这个页面中也包括每一个页面被访问的次数和第一次访问的时间等等。下载附件运行，就可以看到所有的页面了。 <br /><br /><strong style="color: #0000ff">三，总结</strong> <br />根据以上的步骤，我们就可以监测我们的程序了，应用程序中哪些页面被访问的多，哪些页面被访问的少，哪些方法被访问的多，哪些方法被访问的少，以及访问高峰期集中在什么时间等等，有了这些参数，我们更可以有针对性的对应用程序进行优化了，比如说某个页面访问比较频繁，我就可以用ehcache或oscache给这个页面做一个缓存。如果某个方法的访问比较频繁那就看看这个方法能否进一步优化，是需要异步，还是需要缓存，还是需要其他等等，总之有了jamon可以给我们带来更多的便捷，既可以让我们知道我们的客户的行为，也可以让我们知道我们开发的程序的&#8220;能力&#8221;。 <br /><br />其实本文提供的只是对页面和方法调用的监控，但是jamon可以提供更多功能，比如说sql语句的监控等等，这就需要我们共同去发掘了。 <br /><br />附件中包括了一个easywebwork的例子，我把jamon导入到这个例子工程中去，大家可以直接下载运行观看效果。Easywebwork是一个旨在减少webwork2.2.x系列的xml配置文件的项目。<br /><br /><li><a href="http://dl.iteye.com/topics/download/55f4fd7a-ae57-47d5-b7a4-d74637b810f7"><font color="#006699">JamonSample.rar</font></a> (3.7 MB)</li><li>描述: 由于上传文件大小有限制，所以需要同学们自己添加一下jar包： spring,common-logging,log4j,common-collections activation, common-lang 
<p>&nbsp;</p></li><li><a href="http://dl.iteye.com/topics/download/99e759c6-4eb2-4b50-a936-2cae5b23db96"><font color="#006699">lib.rar</font></a> (3.3 MB)</li><li>描述: 第二组包包括 spring,common-logging,log4j,common-collections activation, common-lang 
<p>&nbsp;</p></li><img src ="http://www.blogjava.net/paulwong/aggbug/368882.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2012-01-25 16:32 <a href="http://www.blogjava.net/paulwong/archive/2012/01/25/368882.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>memcache-client-forjava </title><link>http://www.blogjava.net/paulwong/archive/2012/01/24/368871.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Tue, 24 Jan 2012 12:34:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2012/01/24/368871.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/368871.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2012/01/24/368871.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/368871.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/368871.html</trackback:ping><description><![CDATA[<a href="http://code.google.com/p/memcache-client-forjava/">http://code.google.com/p/memcache-client-forjava/</a> <br /><a href="http://marc.iteye.com/blog/28700">http://marc.iteye.com/blog/28700</a><br /><a href="http://www.jayxu.com/2010/06/09/2342/">http://www.jayxu.com/2010/06/09/2342/</a><br /><a href="http://www.iteye.com/topic/128458">http://www.iteye.com/topic/128458</a><br /><a href="http://code.google.com/p/xmemcached/wiki/User_Guide_zh">http://code.google.com/p/xmemcached/wiki/User_Guide_zh</a><br /><br /><img src ="http://www.blogjava.net/paulwong/aggbug/368871.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2012-01-24 20:34 <a href="http://www.blogjava.net/paulwong/archive/2012/01/24/368871.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EhCache 缓存系统简介</title><link>http://www.blogjava.net/paulwong/archive/2012/01/24/368869.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Tue, 24 Jan 2012 12:32:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2012/01/24/368869.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/368869.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2012/01/24/368869.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/368869.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/368869.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: EhCache 是一个纯Java的进程内缓存框架，具有快速、精干等特点，是Hibernate中默认的CacheProvider。下图是 EhCache 在应用程序中的位置：EhCache 的主要特性有：1. 快速.2. 简单.3. 多种缓存策略4. 缓存数据有两级：内存和磁盘，因此无需担心容量问题5. 缓存数据会在虚拟机重启的过程中写入磁盘6. 可以通过RMI、可插入API...&nbsp;&nbsp;<a href='http://www.blogjava.net/paulwong/archive/2012/01/24/368869.html'>阅读全文</a><img src ="http://www.blogjava.net/paulwong/aggbug/368869.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2012-01-24 20:32 <a href="http://www.blogjava.net/paulwong/archive/2012/01/24/368869.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>