[ https://issues.apache.org/activemq/browse/CAMEL-1868?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=54209#action_54209 ]
Ashwin Karpe commented on CAMEL-1868: ------------------------------------- Hi Claus, No problem. I will write up documentation and submt it this week on the camel documentation wiki. 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: Willem Jiang > 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.