I\'m running a Camel Spring OSGI application. The Camel context is initialized through Spring. When the bundle stops, I need to do some clean-up activities, like de-register
Just to expand a little on the answer of Bilgin Ibryam which is correct.
Camel has the ability to apply a policy to a route. This Policy controls routes at runtime. This will allow you to do custom logic at certain events of the route life time.
Implementing a route policy.
It is rather simple declare a new class which extends RoutePolicySupport then override the methods you are interested in.
public class MyRoutePolicy extends RoutePolicySupport{
@Override
public void onStart(Route route) {
// TODO Auto-generated method stub
super.onStart(route);
}
@Override
public void onStop(Route route) {
// TODO Auto-generated method stub
super.onStop(route);
}
@Override
public void onExchangeBegin(Route route, Exchange exchange) {
// TODO Auto-generated method stub
super.onExchangeBegin(route, exchange);
}
}
Now use the route in your routebuilder configure() method like this:
RoutePolicy policy = new MyRoutePolicy();
from("timer://blah")
.routeId("Test1").routePolicy(policy)
.setBody().constant("A Message Like Hello World")
.to("mock:meh");
If you were just using a Spring XML with a route then add the following:
<bean id="policy" class="MyRoutePolicy"/>
<camelContext xmlns="http://camel.apache.org/schema/spring">
<route id="foo" routePolicyRef="MyRoutePolicy">
<from uri="timer://blah"/>
<setBody><constant>A Message Like Hello World</constant></setBody>
<to uri="mock:meh"/>
</route>
</camelContext>
You can use Camel Route policy and write your code to cleanup resource when the route is about to stop or be removed from the context.