2014-10-29 78 views
1

與CXF配置的EHCache我有一個SOAP Web服務如下: -如何騾子

<spring:bean id="cacheManager" name="cacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"/> 
     <spring:bean id="cache" name="cache" class="org.springframework.cache.ehcache.EhCacheFactoryBean"> 
      <spring:property name="cacheManager" ref="cacheManager"/> 
      <spring:property name="cacheName" value="dbCache"/> 
      <spring:property name="maxElementsInMemory" value="10000"/> 
      <spring:property name="eternal" value="false"/> 
      <spring:property name="timeToIdle" value="${timeToIdle}"/> 
      <spring:property name="timeToLive" value="${timeToLive}"/> 
      <spring:property name="overflowToDisk" value="true"/> 
      <spring:property name="maxElementsOnDisk" value="10000000"/> 
      <spring:property name="diskPersistent" value="false"/> 
      <spring:property name="diskExpiryThreadIntervalSeconds" value="5"/> 
      <spring:property name="memoryStoreEvictionPolicy" value="LRU"/> 
      <!-- Cache Expiry --> 
     </spring:bean> 
    </spring:beans> 


<ee:object-store-caching-strategy name="cachingStrategy" doc:name="cachingStrategy"> 
    <custom-object-store class="com.anirban.EHCatche.EhcacheObjectStore"> 
     <spring:property name="cache" ref="cache"/> 
    </custom-object-store> 
</ee:object-store-caching-strategy> 

<!-- Catch Strategy ends -->  



<flow name="ServiceFlow" doc:name="ServiceFlow"> 
<http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8082" path="mainData" doc:name="HTTP" /> 

<ee:cache doc:name="Cache" cachingStrategy-ref="cachingStrategy"> 
<cxf:jaxws-service serviceClass="com.test.services.schema.maindata.v1.MainData" doc:name="SOAP"/> 
<component class="com.test.services.schema.maindata.v1.Impl.MainDataImpl" doc:name="JavaMain_ServiceImpl"/> 
</ee:cache> 

</flow> 

現在你可以看到。我已經包裹下ee:cachecxf:jaxws-servicecomponent class ..

Webservice從DB獲取一組數據我主要的意圖是,如果我觸發web服務,它將從第一次從數據庫獲取數據,然後針對同一個請求,它將從緩存中獲取特定時間...在如果我用不同的請求觸發服務,它將再次從該數據庫中首次獲取該數據,然後從高速緩存中檢索後續相同的請求。

它會將數據保存在緩存中時間..

現在的問題是,如果我觸發服務..它總是從數據庫中提取數據,它沒有在緩存中爲相同的請求保存任何數據.. 每次我點擊服務時,它都會觸發數據庫直接和數據不會從緩存中獲取相同的請求.. 請幫助..如何配置緩存與CXF中的騾子

回答

2

使用VM端點並將請求和響應序列化爲字符串,從而將服務流分解爲兩部分。這將使事件可緩存。

<flow name="ServiceFlow" doc:name="ServiceFlow"> 
    <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8082" path="mainData" doc:name="HTTP" /> 
    <object-to-string-transformer /> 
    <ee:cache doc:name="Cache" cachingStrategy-ref="cachingStrategy"> 
    <vm:outbound-endpoint path="cxf.service" exchange-pattern="request-response" /> 
    <object-to-string-transformer /> 
    </ee:cache> 
</flow> 

<flow name="CXFFlow" doc:name="CXFFlow"> 
    <vm:inbound-endpoint path="cxf.service" exchange-pattern="request-response" /> 
    <cxf:jaxws-service serviceClass="com.test.services.schema.maindata.v1.MainData" doc:name="SOAP"/> 
    <component class="com.test.services.schema.maindata.v1.Impl.MainDataImpl" doc:name="JavaMain_ServiceImpl"/> 
</flow> 
+0

由於大衛這是非常重要.. 。 有效 – 2014-10-29 20:35:40

0

所以,最終的解決方案是爲大衛建議,通過打破流分成兩個,並且還使用<object-to-string-transformer />用於序列化請求和響應用於高速緩存來執行