caching and invalidating with managed store

18
Caching and invalidating with managed-store

Upload: sunil-komarapu

Post on 27-Jan-2017

130 views

Category:

Technology


1 download

TRANSCRIPT

Caching and invalidating with managed-store

Today’s topic we will be discussing the NonPersistentManagedObjectStore and we will not be doing any complex Caching configuration with spring beans in our Mule config.

.

How ??? I will show you how .

So, let us consider we have configured a web service with the Mule cache scope in following way:-

<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 doc:name="Object to String"/> <ee:cache doc:name="Cache" cachingStrategy-ref="cachingStrategy" > <vm:outbound-endpoint exchange-pattern="request-response" path="Flow1-WT-Main" doc:name="VM"/> <object-to-string-transformer doc:name="Object to String"/> </ee:cache></flow> <flow name="ServiceFlow2" doc:name="ServiceFlow2"><vm:inbound-endpoint exchange-pattern="request-response" path="Flow1-WT-Main" doc:name="VM"/> <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>

Corresponding Mule flow will be :-

Now we will configure our cachingStrategy with NonPersistentManagedObjectStore as follows:-

<ee:object-store-caching-strategy name="cachingStrategy" doc:name="cachingStrategy"> <managed-store storeName="myNonPersistentManagedObjectStore" maxEntries="-1" entryTTL="20000" expirationInterval="5000"/> </ee:object-store-caching-strategy>

So it is very simple right ?

In next step we will be running and testing the application. This web servicewill intereact with database retrieve a row from the database and show the row value in the SOAP response.

Here how we will test the web service :-

You can see that we have used SoapUI to test the web service. Now when we hit the service, you can see in the SOAP request, it takes id as input and then fetches all the data from the database for that id.

Now, what we will do is manually deleting the entire row from the database. In my case, I have used sql server and deleted the row from the table using a SQL query:-

With this in place, if we again hit the service, we will get the same response as we got earlier:-

You can see that, though the entire row is deleted from the database table, it’s still showing the response, which means it is fetching the response from cache and not hitting the actual database

Now, let’s create a Mule flow that will invalidate and clear all the CacheSo, with following flow we can clear all the Cache that has been used:-

Corresponding Mule config will be :-

<flow name="cacheinvalidate" doc:name="cacheinvalidate"> <http:inbound-endpoint exchange-pattern="request-response" address="http://localhost:8083/invalidate" doc:name="HTTP"/> <object-to-string-transformer doc:name="Object to String"/> <ee:invalidate-cache cachingStrategy-ref="cachingStrategy"/> <set-payload value="All cache invalidated" doc:name="Set Payload"/> </flow>As we can see the above flow will use ee:invalidate-cache

to clear all the cache.

Now if we hit the url:- http://localhost:8083/invalidate following way :-

So, we can hit the web service again to test the output. So, now if we hit service again after the cache has been invalidated, we will find the following result

As you can see, it clearly shows no records are there in the database, which means the cache has invalidated successfully and the service is actually hitting the database.

It’s simple example.. isn’t it … we don’t need to configure any complex configuration for the cache as compared to the configuration we need to do in case of using cache with EHCache.

Hope you enjoyed the simple usage of Cache with NonPersistentManagedObjectStore and the way of invalidating it.

Thank You