2017-04-19 6 views
1

Ich habe eine Anwendung, um einige Tests auf Netzwerkknoten wie Ping-Test, Speicherplatz abrufen und so weiter.Batchlet vs EJB Timer

Ich verwende ein geplantes Batchlet, um die Aktionen auszuführen, aber ich frage mich, ob es die richtige Verwendung von Batchlet ist?

Muss ein EJB-Timer relevanter sein? Wenn ich ein Batch-Batch verwende, führt mein Glassfish-Server außerdem ein Protokoll des Batch-Jobs, und ich brauche ihn nicht unbedingt (insbesondere mit der Menge der Batch-Jobs, die während eines Tages erstellt werden).

Wenn ich einen Job in der gleichen Zeit ausführen muss, denke ich, batchled kann es tun, aber EJB-Timer auch?

Können Sie mir Ihre Eingabe auf dem richtigen Weg geben, dies zu erreichen?

Danke, Ersch

Antwort

1

Dies ist keine Frage mit einer klaren Antwort, aber es gibt ein bisschen Kosten bei der Faktorisierung Ihrer Anwendung als Batch-Job, und ich würde schauen, was ich bekomme, um zu sehen, ob es sich lohnt.

Sie denken also über einen Job nach, der aus einem einzelnen Batchlet-Schritt besteht. Nun, von "Neustart" -Funktionen würde nichts profitieren, weder beim fehlgeschlagenen Schritt innerhalb eines Jobs noch bei der Nutzung von Checkpoints innerhalb eines Chunk-Schritts. Das Batchlet-Programmiermodell ist ziemlich einfach ... selbst wenn Sie @BatchProperty wirklich mögen, müssten Sie jetzt mit einem XML-Code arbeiten.

Dies wird erst interessanter, wenn Sie diese Ausführungen zusammen mit den anderen Batch-Jobs starten, anzeigen und verwalten möchten. Dies liegt möglicherweise daran, dass Sie mit einer Implementierung arbeiten, die eine Art implementierungsspezifischer Add-On-Funktion bietet. Ein Beispiel hierfür könnte eine Integration mit einer externen Scheduler-Software sein, die es ermöglicht, Jobs zu planen. Auf der anderen Seite, wenn Sie Wert auf eine persistente Aufzeichnung aller Ihrer Batch-Job-Ausführungen an einem Ort (das Job-Repository, in der Regel eine persistente DB), dann könnte dies auch für Sie lohnend machen.

Aber wenn Sie nichts davon interessiert, dann könnte ein EJB-Timer stattdessen der Weg sein.

+0

Ich brauche nicht wirklich eine Validierung oder eine Überprüfung, wenn der Job ordnungsgemäß abgeschlossen wurde. Die einzige Sache, die ich tun möchte, ist schauen, ob ein Knoten lebt und eine Warnung in meiner Anwendung erzeugen, wenn sie nicht lebt. Im Falle einer Speicherplatzprüfung erstellen Sie eine Warnung, wenn der Freiraumtrigger erreicht ist. Ich habe eine Implementierung der Funktion in einem EJB gemacht, aber ich hatte ein Performance-Problem, als das Testing lief. Es war der Grund, warum ich das Batchlet im Hintergrund hatte. Da es eine "Ende der Studie" Arbeit ist, muss ich so viel wie möglich Code durch miself tun, hoffe es hilft, meine Notwendigkeit zu identifizieren. – Ersch

+0

Es scheint nicht offensichtlich, warum das Batchlet ein Leistungsproblem vermeiden würde, das ein Timer treffen würde. Ok, viel Glück. –

+0

Wahrscheinlich hatte ich eine schlechte Verwendung des EJB, ich rief direkt die Methode an, um den Knotenstatus zu überprüfen, um meine jsf-Seite so darzustellen, dass während der Ausführung der Methode meine Seite eingefroren wurde. Es ist auch möglich, einige Chargen zu haben, die in der Zeit laufen, aber ich frage mich, ob wir es über den EJB-Timer machen können – Ersch

1

ein EJB-Timer zu verwenden ist sinnvoll, wenn Sie Ihre Aufgabe in einem Lidschlag (oder so) ausführt.

Andernfalls den Dosiermechanismus verwenden.

Lang laufende Tasks, die von EJB-Timern ausgeführt werden, können problematisch sein, da sie in Transaktionen ausgeführt werden, die normalerweise nach kurzer Zeit ablaufen. Wenn Sie dieses Transaktionszeitlimit erhöhen, erhöht sich auch die Wahrscheinlichkeit von Datenbank- und möglicherweise anderen Ressourcensperren, die sich auf den normalen Betrieb Ihrer Anwendung auswirken können.

+0

Sie müssen jedoch keine Timer-Task innerhalb einer Transaktion ausführen. –