# Eigene Threads in J2EE-Umgebung



## RoNa (10. Jun 2009)

Hi,

meines Wissens sollen eigene Thraeds in einer J2EE Umgebung nicht gestartet werden.

Wie sollte man es korrekt machen? Gibt es dafür einen Service vom Container?

Ich möchte ein Servlet aufrufen, und dabei weiß ich, daß die Verarbeitung länger dauert. Da würde sich eine asynchrone Verarbeitung empfehlen.

Hat jemand einen Tipp für mich?

Gruß,

Robert


----------



## Noctarius (10. Jun 2009)

Ich würde nen separaten Server (eigener Prozess oder sowas) machen und per JMS / RMI / ... anbinden. Kommt eine Anfrage die einen langen Berechnungszeitraum braucht, reichst du diesen Request an den anderen Server weiter und gibt dem Client zurück, dass die Abarbeitung eingereiht wurde.

btw: Deine Signatur kann ich nur bedingt teilen - kenn mind ein Gegenbeispiel


----------



## maki (10. Jun 2009)

In WebAnwendungen darf man Threads starten, in EJBs bzw. EJB-Containern nicht.


----------



## Noctarius (10. Jun 2009)

Huch er hatte ja garnicht EJB geschrieben  Naja bin direkt mal davon ausgegangen *schäm* *gg*


----------



## RoNa (10. Jun 2009)

EJB ist schon nicht schlecht. Es ist zwar eine EAR aber den App-Server brauchen wir gar nicht. Servlet-Container würde reichen. Tomcat z.B. konkret machen wir REST Representational State Transfer ? Wikipedia mit jersey.

Robert


----------



## Noctarius (10. Jun 2009)

Auf einem normalen Servlet-Container wie Tomcat darfst du, wie maki schon sagte, auch Threads starten


----------



## RoNa (14. Jun 2009)

Ich hab' da eine Idee: Der Servlet-Container macht für jeden Reqest einen eigenen Thread. Wäre es valide, wenn ein so ein langlebiger Request reinkommt, ruft der Server intern sich selbst unter einer anderen URI und schick dem Client die Anwort, dass die Verarbeitung gestartet ist. Der Client fragt später, ob der Server mit dem Auftrag schon fertig ist.

So könnte auch die asynchrone Verarbeitung realisiert werden. Oder?

Gruß,

Robert


----------



## SlaterB (14. Jun 2009)

klingt ganz gut, bis auf

> ruft der Server intern sich selbst unter einer anderen URI und schick dem Client die Anwort, dass die Verarbeitung gestartet ist.

hier sollte nicht unbedingt eine komplett neue Verarbeitung einer Client-Anfrage simuliert werden (sofern überhaupt möglich),
sondern einfach nur der aktuelle Request normal zu einer 'Verarbeitung gestartet'-JSP/ HTML-Seite geführt werden,

falls dich die Anzeige in der Browser-Adresszeile stört oder du ein Problem mit F5/ Aktualisieren hast,
dann schicke an den Browser ein Redirect, so dass dieser dann wirklich eine zweite Anfrage auf eine andere Seite an den Server stellt


----------



## Noctarius (14. Jun 2009)

Bringt eh nichts, weil normalerweise Request-Threads irgendwann getötet werden um Blockieren zu verhindern.


----------

