You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@camel.apache.org by "Hadrian Zbarcea (JIRA)" <ji...@apache.org> on 2009/08/14 23:53:36 UTC
[jira] Issue Comment Edited: (CAMEL-1868) Created a new Camel Cache
component (based on ehCache) with an ability to put messages and receive
notifications from a Cache.
[ https://issues.apache.org/activemq/browse/CAMEL-1868?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=53618#action_53618 ]
Hadrian Zbarcea edited comment on CAMEL-1868 at 8/14/09 2:52 PM:
-----------------------------------------------------------------
Oops, looks like m earlier comment came out incoherently.
What I mean to say was
========================================
Hi All,
I have added a set of nice processors to the camel-cache component to provide the ability to perform cache lookups and selectively replace payload content at the
- body
- token
- xpath level
The mechanics of doing this are as follows
{code}
context.addRoutes(new RouteBuilder() {
public void configure() {
from("cache://TestCache1").
filter(header("CACHE_KEY").isEqualTo("greeting")).
process (new CacheBasedMessageBodyReplacer("cache://TestCache1","farewell")).
to("direct:next");
from("cache://TestCache1").
filter(header("CACHE_KEY").isEqualTo("quote")).
process (new CacheBasedTokenReplacer("cache://TestCache1","novel","#novel#")).
process (new CacheBasedTokenReplacer("cache://TestCache1","author","#author#")).
process (new CacheBasedTokenReplacer("cache://TestCache1","number","#number#")).
to("direct:next");
from("cache://TestCache1").
filter(header("CACHE_KEY").isEqualTo("XML_FRAGMENT")).
process (new CacheBasedXPathReplacer("cache://TestCache1","book1","/books/book1")).
process (new CacheBasedXPathReplacer("cache://TestCache1","book2","/books/book2")).
to("direct:next");
}
});
{code}
was (Author: akarpe):
Oops, looks like m earlier comment came out incoherently.
What I mean to say was
========================================
Hi All,
I have added a set of nice processors to the camel-cache component to provide the ability to perform cache lookups and selectively replace payload content at the
- body
- token
- xpath level
The mechanics of doing this are as follows
context.addRoutes(new RouteBuilder() {
public void configure() {
from("cache://TestCache1").
filter(header("CACHE_KEY").isEqualTo("greeting")).
process (new CacheBasedMessageBodyReplacer("cache://TestCache1","farewell")).
to("direct:next");
from("cache://TestCache1").
filter(header("CACHE_KEY").isEqualTo("quote")).
process (new CacheBasedTokenReplacer("cache://TestCache1","novel","#novel#")).
process (new CacheBasedTokenReplacer("cache://TestCache1","author","#author#")).
process (new CacheBasedTokenReplacer("cache://TestCache1","number","#number#")).
to("direct:next");
from("cache://TestCache1").
filter(header("CACHE_KEY").isEqualTo("XML_FRAGMENT")).
process (new CacheBasedXPathReplacer("cache://TestCache1","book1","/books/book1")).
process (new CacheBasedXPathReplacer("cache://TestCache1","book2","/books/book2")).
to("direct:next");
}
});
> 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
> Assignee: Hadrian Zbarcea
> Fix For: 2.1.0
>
> Attachments: camel-cache-with-processors.patch, camel-cache-with-processors.zip, camel-cache.patch, camel-cache.zip
>
>
> 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.