Announcement

Collapse
No announcement yet.

Timeout in JEE Applikation

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Timeout in JEE Applikation

    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

  • #2
    Ich würde auf EJB-Seite mit einem Transaction-Timeout arbeiten. Das wird von den JEE-Containern sowohl für container-managed als auch bean-managed Transactions unterstützt. Damit kümmert sich auch der Container darum, das alles korrekt "abgeräumt" wird.

    Comment


    • #3
      Danke ramon98 für den Tipp.
      Transaction-Timeout hlift auch nichts weiter, weil der Container räumt ab, erst wenn die Ausführung der EJB Methode fertig ist. Der Container kann
      die Ausführung der EJB Methode nicht abbrechen.

      Comment


      • #4
        Ist es nicht so, dass nach einer Abgelaufene Zeit etwas gestartet wird? Z.B. Division mit null, was execption verursacht?

        Comment

        Working...
        X