I have implemented a Camel Service , but when i try to shutdown my route , it’s impossible …. I have to kill the process. What i have missed ?
First I create a class which implements camel.Service :
@Service("myService")
public class MyService implements org.apache.camel.Service {
...
public WebSocket ws = null;
private Boolean isRunning=true;
public void mainCall() {
try {
.....
ws = connect();
while(isRunning) {
.....
}
} catch (IOException e) {
e.printStackTrace();
} catch (WebSocketException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
@Override
public void start() throws Exception {
isRunning = true;
mainCall();
}
@Override
public void stop() throws Exception {
isRunning = false;
ws.disconnect();
}
I add my service on my Camel context like below :
@Autowired
private MyService myService;
@Autowired
private CamelContext context;
@PostConstruct
public void setupCamelContext() throws Exception {
....
context.addService(myService);
}
At the end i start my route :
from("timer://runOnce?repeatCount=1&delay=5000")
.serviceCall("myService");
Advertisement
Answer
I resolve my problem by splitting my Service in two :
- One who implement org.apache.camel.Service
- Second who implement start fucntion but with an @Async anotation
The main problem in my case was my infinite loop block stuck the start function, Asunc method resolve the problem