Wie man einen Hintergrundprozess in Java EE starten

stimmen
10

Ich mag einen Hintergrundprozess in einer Java EE (OC4J 10) Umgebung starten. Es scheint falsch, nur einen Thread mit „neuem Thread“ beginnen Aber ich kann nicht einen guten Weg für diese finden.

eine JMS-Warteschlange zu verwenden ist schwierig in meinem speziellen Fall, da meine Parameter für diesen Methodenaufruf nicht serialisierbar sind.

Ich dachte auch über die Verwendung von onTimeoutTimer - Methode auf einem Session - Bean , aber das erlaubt mir nicht , Parameter zu übergeben (soweit ich weiß).

Gibt es einen „Kanon“ Art und Weise , eine solche Aufgabe zu bewältigen, oder muss ich nur zurückkommen zu „neuen Thread“ oder ein java.concurrent.ThreadPool.

Veröffentlicht am 25/06/2009 um 21:42
quelle vom benutzer
In anderen Sprachen...                            


7 antworten

stimmen
1

Weiß OCJ4 nicht im Detail, aber ich verwenden, um den Themen-Ansatz und einen java.util.Timer Ansatz eines bestimmte Aufgabe in einer Tomcat-basierten Anwendung auszuführen. In Java 5+ gibt es eine Option eine der Executor-Dienste zu nutzen (eingeplante, Priority).

Ich weiß nicht, über die onTimeout aber man kann Parameter um in der Sitzung selbst, der App Kontext übergibt oder in einer statischen Variablen (entmutigt würden einige sagen). Aber der Name sagt mir, es aufgerufen wird, wenn die Sitzungszeiten des Benutzers und Sie wollen einige Bereinigung zu tun.

Beantwortet am 25/06/2009 um 21:49
quelle vom benutzer

stimmen
14

Java EE versuchen in der Regel zu Einfädeln von den Entwicklern Sorgen zu entfernen. (Es ist Erfolg das ist ein ganz anderes Thema).

JMS ist eindeutig der bevorzugte Ansatz, dies zu umgehen.

Bei den meisten Parametern haben Sie die Möglichkeit, zu zwingen oder Serialisierung fälschen, auch wenn sie nicht standardmäßig serialisierbar sind. In Abhängigkeit von den Daten, halten sie in einem serialisierbares Objekt Einwickeln, der die Daten neu geladen werden. Dies wird auf dem Parameter und Anwendung deutlich ab.

Beantwortet am 25/06/2009 um 21:53
quelle vom benutzer

stimmen
3

JMS ist die Java EE Art und Weise, dies zu tun. Sie können Ihre eigenen Threads beginnen, wenn der Container Sie können, aber dass die Java EE-Spezifikation verstößt (Sie können oder auch darüber nicht kümmern).

Wenn Sie nicht über Java EE generic Compliance kümmern (wenn Sie in der Tat auf Threads anstatt sich mit JMS greifen würde), für die Oracle - Container Willen haben sicher proprietäre Möglichkeiten dies zu tun (wie die OracleAS Job Scheduler ).

Beantwortet am 25/06/2009 um 22:20
quelle vom benutzer

stimmen
1

Unter Verwendung des JMS ist der richtige Weg, es zu tun, aber es ist schwerer Gewicht.

Der Vorteil, den Sie erhalten, ist, dass, wenn Sie mehrere Server benötigen, einen Server oder was auch immer, sobald die Server konfiguriert sind, Ihre „Einfädeln“ kann nun auf mehrere Maschinen verteilt werden.

Es bedeutet auch, Sie nicht wollen, eine Nachricht für eine wirklich triviale Menge an Arbeit oder mit einer großen Menge an Daten senden. Wählen Sie Ihre Schnittstelle Punkte gut.

Beantwortet am 25/06/2009 um 23:15
quelle vom benutzer

stimmen
1

siehe hier für einige weitere Informationen: stackoverflow.com/questions/533783/why-spawning-threads-in-j2ee-container-is-discouraged

Ich habe Threads in einem Container (Tomcat, JBoss) ohne Probleme zu schaffen, aber sie waren wirklich einfach Warteschlangen und ich verlassen Sie sich nicht auf Clustering.

Allerdings EJB 3.1 wird asynchronen Aufruf einführen , die Sie nützlich finden können: http://www.theserverside.com/tt/articles/article.tss?track=NL-461&ad=700869&l=EJB3-1Maturity&asrc=EM_NLN_6665442&uid=2882457

Beantwortet am 26/06/2009 um 01:49
quelle vom benutzer

stimmen
1

Java EE nicht wirklich verbieten Sie Ihre eigenen Threads zu erstellen, es ist die EJB-Spezifikation, die „nicht verwalteten Threads“ arn't erlaubt sagt. Der Grund dafür ist, dass diese Themen auf dem Anwendungsserver unbekannt sind und deshalb kann der Behälter nicht Dinge wie Sicherheit und Transaktionen auf diesen Threads verwalten.

Dennoch gibt es viele Rahmenbedingungen gibt, die ihre eigenen Threads erstelle. Zum Beispiel Quarz, Axis und Frühling. Änderungen sind Ihre bereits eine davon verwenden, so ist es nicht so schlimm Ihre eigenen Threads zu erstellen, solange Sie sich der Konsequenzen bewusst sind. Das sagte ich mit den anderen darüber einig, dass die Verwendung von JMS oder JCA über manuelle Thread-Erzeugung bevorzugt.

By the way, OC4J können Sie Ihre eigenen Threads erstellen. Allerdings ist es nicht JNDI - Lookups von diesen nicht verwalteten Threads ermöglichen. Sie können diese Einschränkung deaktivieren , indem Sie die Angabe -userThreads Argument.

Beantwortet am 26/06/2009 um 10:02
quelle vom benutzer

stimmen
0

Ich komme aus einem .NET - Hintergrund, und JMS scheint ziemlich schwer Gewicht zu mir. Stattdessen empfehle ich Quarz , die eine Hintergrund-Scheduling - Bibliothek für Java und JEE - Anwendungen ist. (Ich habe Quartz.NET in meiner ASP.NET MVC - app mit viel Erfolg.)

Beantwortet am 22/12/2013 um 16:09
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more