2014-10-29 2 views
1

У меня есть SOAP веб-сервиса следующим образом: -Как настроить EHCache с CXF в Mule

<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> 

Теперь, как вы можете видеть .. Я завернул cxf:jaxws-service и component class под ee:cache блок ..

Webservice извлекает набор данных из базы данных

Моей главной целью является то, что если я запускаю веб-сервис, он будет извлекать данные из БД с первого раза, а затем для того же запроса он будет извлекать из кеша в течение определенного времени ... В tween, если я запускаю службу с другим запросом, она снова будет извлекать данные из БД в первый раз для этого запроса, а затем извлекать из кеша для последующего же запроса.

Он будет хранить данные в кеше для конкретного время ..

Теперь проблема заключается в том, что я запускаю службу .. она всегда извлекает данные из БД и не хранит данные в кеше для одного и того же запроса. Каждый раз, когда я нахожусь в службе, он попадает в базу данных напрямую и данные не извлекаются из кеша для одного и того же запроса. Пожалуйста, помогите .. как настроить кеш с CXF в Mule

ответ

2

Разрыв потока обслуживания в два, используя конечную точку виртуальной машины и сериализацию как запроса, так и ответа на строку. Это сделает кешируемое событие.

<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

спасибо David .. . Это сработало –

0

Таким образом, окончательное решение по предложению Давида, разбивая поток на два, а также с помощью <object-to-string-transformer /> для сериализации как запрос и ответ, который является очень важным для кэша, чтобы выполнить

Смежные вопросы