camel-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Ashwin Karpe (JIRA)" <j...@apache.org>
Subject [jira] Commented: (CAMEL-1868) Created a new Camel Cache component (based on ehCache) with an ability to put messages and receive notifications from a Cache.
Date Sat, 01 Aug 2009 02:27:34 GMT

    [ https://issues.apache.org/activemq/browse/CAMEL-1868?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=53418#action_53418
] 

Ashwin Karpe commented on CAMEL-1868:
-------------------------------------

Thanks Hadrian. I am glad you like it. ehCache is a very nice piece of software...

If you need me to do something, please let me know.

Cheers,

Ashwin...

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


Mime
View raw message