Created a new Camel Cache component (based on ehCache) with an ability to put
messages and receive notifications from a Cache.
--------------------------------------------------------------------------------------------------------------------------------
Key: CAMEL-1868
URL: https://issues.apache.org/activemq/browse/CAMEL-1868
Project: Apache Camel
Issue Type: New Feature
Environment: All UNIX and windows based environments...
Reporter: Ashwin Karpe
I have developed a Camel Caching component based on ehCache. I am submitting
this new feature for your review and consideration for releasing this
capability into the Camel mainstream.
The Camel Caching component has the following abilities
a> In Producer mode, the component provides the ability to direct payloads
in exchanges to a stored in a pre-existing or created-on-demand Cache. The
producer mode supports operations to ADD/UPDATE/DELETE/DELETEALL elements in a
cache. (Examples goven below)
b> In Consumer mode, the component provides the ability to listen on a
pre-existing or created-on-demand Cache using an event Listener and receive
automatic notifications when any cache activity take place (i.e
ADD/UPDATE/DELETE/DELETEALL). Upon such an activity takng place, an exchange
containing header elements describing the operation and cachekey and a body
containing the just added/updated payload is placed and sent. In case of a
DELETEALL operation the body of the exchanage is not populated.
The cache itself may be created on demand or if a cache of that name already
exists then it is simply utilized with its original settings. The URL itself
may take the following form
from
("cache://MyApplicationCache?maxElementsInMemory=1000&memoryStoreEvictionPolicy=MemoryStoreEvictionPolicy.LFU&overflowToDisk=true&eternal=true&timeToLiveSeconds=300&timeToIdleSeconds=true&diskPersistent=true&diskExpiryThreadIntervalSeconds=300")
Note that all the attributes of the above URL are standard ehCache settings
that may be set at Cache creation.
Given below are examples of how to create/set routes:
Producer Example 1: Adding keys to the cache with a body received from
direct:start
----------------------------------------------------------------------------------------------------
context.addRoutes(new RouteBuilder() {
public void configure() {
from("direct:start").
setHeader("CACHE_OPERATION", constant("ADD")).
setHeader("CACHE_KEY", constant("Ralph_Waldo_Emerson")).
to("cache://TestCache1");
}
});
context.start();
Producer Example 2: Updating existing keys in a cache with a body received from
direct:start
----------------------------------------------------------------------------------------------------
context.addRoutes(new RouteBuilder() {
public void configure() {
from("direct:start").
setHeader("CACHE_OPERATION", constant("UPDATE")).
setHeader("CACHE_KEY", constant("Ralph_Waldo_Emerson")).
to("cache://TestCache1");
}
});
context.start();
Producer Example 3: Deleting existing keys in a cache with a body received from
direct:start
----------------------------------------------------------------------------------------------------
context.addRoutes(new RouteBuilder() {
public void configure() {
from("direct:start").
setHeader("CACHE_OPERATION", constant("DELETE")).
setHeader("CACHE_KEY", constant("Ralph_Waldo_Emerson")).
to("cache://TestCache1");
}
});
context.start();
Producer Example 4: Deleting all keys in a cache with a body received from
direct:start
----------------------------------------------------------------------------------------------------
context.addRoutes(new RouteBuilder() {
public void configure() {
from("direct:start").
setHeader("CACHE_OPERATION", constant("ADD")).
setHeader("CACHE_KEY", constant("Ralph_Waldo_Emerson")).
to("cache://TestCache1");
from("direct:start").
setHeader("CACHE_OPERATION", constant("ADD")).
setHeader("CACHE_KEY", constant("Ralph_Waldo_Emerson2")).
to("cache://TestCache1");
from("direct:start").
setHeader("CACHE_OPERATION", constant("DELETEALL")).
to("cache://TestCache1");
}
});
context.start();
Consumer Example 1: Notifying any changes registering in a Cache to Processors
and other Producers
---------------------------------------------------------------------------------------------------------------------------------------------
Note: in this example the consumer is created first and then 3 routes send
different message as Cache Producers
// Cache Notification Consumer
context.addRoutes(new RouteBuilder() {
public void configure() {
from("cache://TestCache1").
process(new Processor() {
public void process(Exchange exchange) throws Exception
{
String operation = (String)
exchange.getIn().getHeader("CACHE_OPERATION");
String key = (String)
exchange.getIn().getHeader("CACHE_KEY");
Object body = exchange.getIn().getBody();
// Do something
}
});
// Cache Producer1
from("direct:start").
setHeader("CACHE_OPERATION", constant("ADD")).
setHeader("CACHE_KEY", constant("Ralph_Waldo_Emerson")).
to("cache://TestCache1");
// Cache Producer2
from("direct:start").
setHeader("CACHE_OPERATION", constant("UPDATE")).
setHeader("CACHE_KEY", constant("Ralph_Waldo_Emerson")).
to("cache://TestCache1");
// Cache Producer3
from("direct:start").
setHeader("CACHE_OPERATION", constant("DELETE")).
setHeader("CACHE_KEY", constant("Ralph_Waldo_Emerson")).
to("cache://TestCache1");
}
});
context.start();
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.