<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns="http://www.mulesoft.org/schema/mule/core"
xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
xmlns:spring="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd">
<!-- Global object store definition for a Listable Object Store, used in Flow 3 below. -->
<spring:beans>
<spring:bean id="myListableObjectStore" class="org.mule.util.store.SimpleMemoryObjectStore"/>
</spring:beans>
<http:listener-config name="HTTP_Listener_Configuration" host="localhost" port="8081" doc:name="HTTP Listener Configuration"/>
<!-- Idempotent Filter with In Memory Object Store -->
<flow name="Flow1_idempotentWithInMemoryStore" doc:name="Flow1_idempotentWithInMemoryStore">
<http:listener config-ref="HTTP_Listener_Configuration" path="idempotentInMemory" doc:name="HTTP"/>
<idempotent-message-filter idExpression="#[message.payload]" throwOnUnaccepted="true" storePrefix="Idempotent_Message" doc:name="Idempotent Message">
<in-memory-store name="myInMemoryObjectStore" entryTTL="120" expirationInterval="3600" maxEntries="60000" />
</idempotent-message-filter>
<set-payload value="YAY!" doc:name="Set Payload" />
<catch-exception-strategy doc:name="Catch Exception Strategy">
<set-payload value="NAY!" doc:name="Set Payload" />
</catch-exception-strategy>
</flow>
<!-- Idempotent Filter with Persistent File Store -->
<flow name="Flow2_idempotentWithTextFileStore" doc:name="Flow2_idempotentWithTextFileStore">
<http:listener config-ref="HTTP_Listener_Configuration" path="idempotentTextFile" doc:name="HTTP"/>
<idempotent-message-filter idExpression="#[message.payload]" throwOnUnaccepted="true" storePrefix="Idempotent_Message" doc:name="Idempotent Message">
<simple-text-file-store
name="mySimpleTextFileStore"
directory="#[server.tmpDir + '/objectstore']"
entryTTL="120"
expirationInterval="3600"
maxEntries="60000" />
</idempotent-message-filter>
<set-payload value="YAY!" doc:name="Set Payload" />
<catch-exception-strategy doc:name="Catch Exception Strategy">
<set-payload value="NAY!" doc:name="Set Payload" />
</catch-exception-strategy>
</flow>
<!-- Until Successful Scope with In Memory Object Store -->
<flow name="Flow3_UntilSuccessfulWithListableObjectStore" doc:name="UntilSuccessfulWithListableObjectStore">
<http:listener config-ref="HTTP_Listener_Configuration" path="hey" doc:name="HTTP"/>
<until-successful objectStore-ref="myListableObjectStore" maxRetries="15" secondsBetweenRetries="1" doc:name="Until Successful">
<processor-chain doc:name="Processor Chain">
<message-filter throwOnUnaccepted="true">
<expression-filter expression="return Math.random() < 0.1" doc:name="Expression" />
</message-filter>
<logger message="This eventually happens." doc:name="Logger" />
</processor-chain>
</until-successful>
<set-payload value="Completed" doc:name="Set Payload" />
</flow>
</mule>
Mule Object Stores
An object store is a facility for storing objects in or across Mule applications. Mule uses object stores to persist data for eventual retrieval. Internally, Mule uses object stores in various filters, routers, and other message processors that need to store state between messages. In most cases, Mule creates and manages object stores automatically.
To learn about Object Store management in Runtime Manager, see Managing Application Data with Object Stores or more generally, Configuring an Object Store for Cache.
Note: To access and manipulate object stores in Mule applications, download the Object Store connector in Anypoint Studio.
Use Cases
You may explicitly configure an object store when configuring:
-
An idempotent message filter or until a successful scope occurs.
-
The idempotent redelivery policy of a custom endpoint.
-
An aggregator, you can either use the two default built-in object stores or create a reference of your own.
-
A custom component that must use an object store to persist information.
-
When storing or retrieving information from a Mule flow through the object store connector, available for installation
Mule provides two types of object stores:
-
In-memory store – stores objects in local Mule runtime memory. Objects are lost on shutdown of the Mule runtime.
-
Persistent store – Mule persists data when an object store is explicitly configured to be persistent. In a standalone Mule runtime, Mule creates a default persistent store in the file system. See also: About Persisting Object Stores in Runtime Manager
If you do not specify an object store, the default persistent object store is used.
For more information, see the Object Stores and Clustering section of the Cache Scope document.
Tip: The default object store created for all new caching strategies supports cluster mode out of the box, with the exception of the cache scope which uses the old default caching strategy.
XML Example
The following example demonstrates how to configure object stores in the following three situations:
-
idempotent filter with an in-memory object store.
-
idempotent filter with a persistent object store.
-
Until a successful scope occurs with an in-memory object store.
See Also
-
Install the Object Store connector in Anypoint Exchange.
-
Learn about the Runtime Manager implementation of object stores.