Ich suche gerade einen Lösungsvorschlag für mein Timeout Problem.
Problem:
Ich habe eine Servlet, die eine Methode einer Stateless Bean aufruft. Dieser Aufruf muss nach einem definierten Timeout sofort abgebrochen und eine Exception geschmissen werden. Als Application Server benutze ich den SAP NetWeaver Application Server 7.2.
Mir fallen zwei Ideen ein, um dies zu realisieren.
1) Erste Idee: TimerService
Meine Stateless Bean sieht ungefähr so aus:
@Stateless()
public class MyBean implements SomeInterface {
@Resource
TimerService timerService;
public void myMethod() {
timerService.createTimer(timeOutMs,null);
//Do something
}
@Timeout
public void timeout(Timer timer)
Do something
Try {
timer.cancel();
}
catch (RuntimeException e) {
throw new myException(e)
}
}
Nach Ablauf des definierten Timeout muss die Ausführung der Methode myMethod() sofort abgebrochen und die Methode timeOut() aufgerufen werden.
Das tut er nicht. Erst nachdem er fertig mit der Ausführung der Methode
myMethod() ist, dann führt er die Methode timeOut() aus. Selbst wenn myMethod() lange dauert.
2) Zweite Idee: Timer und TimerTask aus java.util Package
Allerdings benutzt diese Lösung Thread und man muss keine Thread in ein JEE Applikation einsetzen, weil der JEE Server dadurch gestört wird.
Ich würde mich sehr freuen, wenn jemand mir eine andere Idee vorschlägt, wie ich das Timeout umsetzen soll.
Ich bedanke mich für jeden Vorschlag.
Viele Grüße
Problem:
Ich habe eine Servlet, die eine Methode einer Stateless Bean aufruft. Dieser Aufruf muss nach einem definierten Timeout sofort abgebrochen und eine Exception geschmissen werden. Als Application Server benutze ich den SAP NetWeaver Application Server 7.2.
Mir fallen zwei Ideen ein, um dies zu realisieren.
1) Erste Idee: TimerService
Meine Stateless Bean sieht ungefähr so aus:
@Stateless()
public class MyBean implements SomeInterface {
@Resource
TimerService timerService;
public void myMethod() {
timerService.createTimer(timeOutMs,null);
//Do something
}
@Timeout
public void timeout(Timer timer)
Do something
Try {
timer.cancel();
}
catch (RuntimeException e) {
throw new myException(e)
}
}
Nach Ablauf des definierten Timeout muss die Ausführung der Methode myMethod() sofort abgebrochen und die Methode timeOut() aufgerufen werden.
Das tut er nicht. Erst nachdem er fertig mit der Ausführung der Methode
myMethod() ist, dann führt er die Methode timeOut() aus. Selbst wenn myMethod() lange dauert.
2) Zweite Idee: Timer und TimerTask aus java.util Package
Allerdings benutzt diese Lösung Thread und man muss keine Thread in ein JEE Applikation einsetzen, weil der JEE Server dadurch gestört wird.
Ich würde mich sehr freuen, wenn jemand mir eine andere Idee vorschlägt, wie ich das Timeout umsetzen soll.
Ich bedanke mich für jeden Vorschlag.
Viele Grüße
Comment