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.