Luke,
The Cache component is used to cache invocation results for a service to
avoid having to call the external service again. As such, it always
sits between the actual service endpoint and the invoker. If you would
move the Cache service, I suppose you would want to cache the invocation
of the Validate call instead of the call to the LogisticsService? Why
not move the cache out entirely then and cache the entire routing slip?
One way to improve readability/maintainability of your code though, is
by changing the cache component's service/endpoint name, giving it the
same service name as the target service, just another endpoint name.
This way, you can write <eip:target/> with the LogisticsService in your
routing slip; if you want caching, you specify endpoint="cache",
otherwise you use the original endpoint name.
Regards,
Gert
splatch wrote:
Hello,
I have simple question about Cache configuration. Normally I must provide
destinationService attribute for this component, but that isn't nice if we
use EIP routing because in this moment we have inforations about routing in
two places. First is cache configuration, second is eip configuration.
Example configuration below works fine. Target endpoint
logistic:LogisticService is called only once. Problem is routing management.
If I want change order - move validation after caching - I must change
configuration in two places. Is there posibility to use only EIP to
configure cache destinationService?
Logistic namespace prefix value is set to
http://servicemix.org/services/logistic
cache/servicemix.xml
<sm:serviceunit id="jbi">
<sm:activationSpecs>
<sm:activationSpec id="LogisticCache" endpoint="logistic-cache"
componentName="LogisticCache" service="logistic:Cache"
destinationService="logistic:LogisticService">
<sm:component>
<!-- I use Spring to inject CacheComponent -->
<ref bean="logisticCache" />
</sm:component>
</sm:activationSpec>
</sm:activationSpecs>
</sm:serviceunit>
routing/xbean.xml
<eip:static-routing-slip service="logistic:LogisticRoutingSlip"
endpoint="logistic-routing">
<eip:targets>
<eip:exchange-target service="logistic:Validate" />
<eip:exchange-target service="logistic:Cache" />
<!-- I would like define destination here, not above -->
<!-- <eip:exchange-target service="logistic:LogisticService"
interface="logistic:LogisticServiceType" /> -->
</eip:targets>
</eip:static-routing-slip>
Regards,
Luke