Eigene Threads in J2EE-Umgebung

Status
Nicht offen für weitere Antworten.

RoNa

Bekanntes Mitglied
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

Top Contributor
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 :D
 
M

maki

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

Noctarius

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

RoNa

Bekanntes Mitglied
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
 
S

SlaterB

Gast
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

Top Contributor
Bringt eh nichts, weil normalerweise Request-Threads irgendwann getötet werden um Blockieren zu verhindern.
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben