Hi,

<bean id="cacheManager" class="org.ehcache.config.builders.CacheManagerBuilder"
 init-method="init"
 factory-method="newCacheManager"


wouldn't work?

js.

On 3/21/23 19:25, Mirek Borsky wrote:
Greetings,

I am trying to use camel-ehcache with pure blueprint DSL and struggle to make 
it work. Could someone either help point me in the right direction or confirm 
that it is not possible?

I have done the following:
downloaded karaf 4.4.3, and Java 11, run the following in karaf concole:
feature:repo-add camel 3.20.2
feature:install camel
feature:install camel-ehcache

Then tried this route:

<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0";>
     <camelContext xmlns="http://camel.apache.org/schema/blueprint"; 
id="CacheTest-ctx">
         <route id="CacheTest">
             <from uri="timer:onetime?repeatCount=1"/>
             <setBody>
                 <constant>testbody</constant>
             </setBody>
             <setHeader name="CamelEhcacheKey">
                 <constant>testkey</constant>
             </setHeader>
             <to uri="ehcache:testcache?action=PUT"/>
             <setBody>
                 <constant>empty</constant>
             </setBody>
             <to uri="ehcache:testcache?action=GET"/>
             <to uri="log:output?showAll=true"/>
         </route>
     </camelContext>
</blueprint>

The route run, but output showed that the key was not found in the cache (body was 
"empty" instead of "testbody").

I tried to add a sample xml configuration of the cache:
<config xmlns="http://www.ehcache.org/v3";>
     <cache alias="testcache">
         <key-type>java.lang.String</key-type>
         <value-type>java.lang.String</value-type>
         <expiry><ttl unit="seconds">30</ttl></expiry>
         <resources><heap unit="entries">10</heap></resources>
     </cache>
</config>

And used it in the route:
<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0";>
     <bean id="cacheConfigurationURL" class="java.net.URL">
         <argument value="file:deploy/ehcache.xml"/>
     </bean>
     <bean id="cacheConfigurationFile" class="org.ehcache.xml.XmlConfiguration">
         <argument ref="cacheConfigurationURL"/>
     </bean>
     <bean id="cacheManager" class="org.ehcache.config.builders.CacheManagerBuilder" 
factory-method="newCacheManager">
         <argument ref="cacheConfigurationFile"/>
     </bean>
     <camelContext xmlns="http://camel.apache.org/schema/blueprint"; 
id="CacheTest-ctx">
         <route id="CacheTest">
             <from uri="timer:onetime?repeatCount=1"/>
             <setBody>
                 <constant>testbody</constant>
             </setBody>
             <setHeader name="CamelEhcacheKey">
                 <constant>testkey</constant>
             </setHeader>
             <to 
uri="ehcache:testcache?action=PUT&amp;cacheManager=#cacheManager"/>
             <setBody>
                 <constant>empty</constant>
             </setBody>
             <to 
uri="ehcache:testcache?action=GET&amp;cacheManager=#cacheManager"/>
             <to uri="log:output?showAll=true"/>
         </route>
     </camelContext>
</blueprint>

but the route will not start up, providing java.lang.IllegalStateException: 
State is UNINITIALIZED exception.
I understand that cacheManager.init have to be called before the route start, 
but could this be done with just blueprint DSL? I can not create a dummy bean 
and call this as a factory-method, as it returns void. I can not call it in a 
separate route with lower startup order, as it is not fast enough.
Any suggestions?

Mirek Borský

Reply via email to