Ersatz für Thread.sleep() in EJBs?

Dieses Thema Ersatz für Thread.sleep() in EJBs? im Forum "Application Tier" wurde erstellt von peez, 21. Jan. 2013.

Thema: Ersatz für Thread.sleep() in EJBs? Ich weiß, dass man in Stateless Session Beans keine sleeps verwenden soll. Der Grund leuchtet mir natürlich auch ein...

  1. Ich weiß, dass man in Stateless Session Beans keine sleeps verwenden soll. Der Grund leuchtet mir natürlich auch ein (Transaktionen, Thread-Management etc.).

    Was wäre denn ein adäquater Ersatz für ein Sleep, wenn ich z.B. innerhalb einer Methode ein Fremdsystem mit einer Aktion beauftragen möchte, dieses z.B. in Zehn-sekunden-Abständen nach dem Status fragen und wenn es mit seiner Arbeit fertig ist, weiter im Programmablauf gehen möchte?

    Also zum Beispiel sowas hier:
    Code (Java):

    public class Bsp {
        public void doSomething() {

                    //Irgendwas tun
            int a = 0;
            int b = 5*5;
           
                    //Fremdsystem beauftragen
            fremdsystemClient.invokeTransferFile();
           
                    //Mit 10 Sek. Pause immer wieder Status pollen
            while (fremdsystemClient.getTransferStatus() != FERTIG) {
                Thread.sleep(10000);
            }
           
                    //Datei transferiert, weiter im Programm
            FileInputStream i = new FileInputStream(transferierteDatei);
        }
    }
     
  2. Vielleicht hilft dir das Grundlagen Training weiter --> *Klick*
  3. Wait/Notify könnte auch noch eine Alternative sein.
     
  4. Leider ist das Fremdsystem u.a. ein Webservice, d.h. wait/notify würde ich auf Anhieb sagen kommt nicht in Frage, da das Fremdsystem u.a. per Webservice aufgerufen wird, und nicht von sich aus über den Abschluss informieren kann.

    Habe das jetzt mit Timer versucht, funktioniert auch, allerdings scheint er damit die Session / den Login zu verlieren.
    Kann ich dem Timer evt. die aktuelle Usersession direkt mitgeben u. die dann beim Timeout wiederherstellen?
     
  5. Das Fremdsystem selbst natürlich nicht, aber bei synchronen Webserviceaufrufen kann die Klasse, mit der Du den Aufruf machst (fremdsystemClient), das tun, wenn das Ergebnis vorliegt.

    Bei asynchronen Webservice-Aufrufen könnte der Callback-Handler das übernehmen.
     
  6. Kostenloses Java-Grundlagen Training im Wert von 39 €
    Schau dir jetzt hier das Tutorial an und starte richtig durch!