Package de.bsvrz.ars.ars.mgmt.tasks
Class MultiTaskManager
java.lang.Object
de.bsvrz.ars.ars.mgmt.tasks.Task
de.bsvrz.ars.ars.mgmt.tasks.AbstractTask
de.bsvrz.ars.ars.mgmt.tasks.RepeatingTask
de.bsvrz.ars.ars.mgmt.tasks.QueueTask<de.bsvrz.dav.daf.main.ResultData>
de.bsvrz.ars.ars.mgmt.tasks.MultiTaskManager
Verwaltet eine Warteschlange und eine Liste von Tasks. Ein Auftrag aus der Warteschlage wird dem nächsten freien Task zugewiesen. Wenn kein Task frei ist,
wartet der MultiTaskManager.
-
Field Summary
Fields inherited from class de.bsvrz.ars.ars.mgmt.tasks.Task
_debug, _shouldTerminate
-
Constructor Summary
ConstructorsConstructorDescriptionMultiTaskManager
(ArchiveManager archiveMgr, SignalingQueue<de.bsvrz.dav.daf.main.ResultData> inputData, String taskName) Erstellt einen neuen MultiTaskManager -
Method Summary
Modifier and TypeMethodDescriptionvoid
Fuegt ein MultiTask hinzu und startet ihn, falls der MultitaskManager selbst schon gestartet ist.protected void
cleanUp()
Wird garantiert aufgerufen, nachdem der Task vollständig terminiert wurde.void
int
Gibt die Anzahl der aktuell verwalteten Sub-Tasks zurückboolean
isAlive()
Gibttrue
zurück, wenn der Task aktuell läuftvoid
join()
Wartet auf das Beenden des Tasks nach der Terminierung.void
Entfernt einen Subtask aus der Liste der verfuegbaren Tasks.void
start()
Startet den Thread, der den Task ausführttoString()
protected void
work
(de.bsvrz.dav.daf.main.ResultData step) Vom konkreten Task zu implementierende Methode, die den Auftrag abarbeitet.Methods inherited from class de.bsvrz.ars.ars.mgmt.tasks.QueueTask
step, submit, terminateTask
Methods inherited from class de.bsvrz.ars.ars.mgmt.tasks.RepeatingTask
execute, getArchMgr
Methods inherited from class de.bsvrz.ars.ars.mgmt.tasks.AbstractTask
addTaskStepListener, getName, getState, isTerminated, removeTaskStepListener, setName, taskStepDone
Methods inherited from class de.bsvrz.ars.ars.mgmt.tasks.Task
getDidTree, getPersistenceManager, shouldTerminate, suspendTaskIfNecessary
-
Constructor Details
-
MultiTaskManager
public MultiTaskManager(ArchiveManager archiveMgr, SignalingQueue<de.bsvrz.dav.daf.main.ResultData> inputData, String taskName) Erstellt einen neuen MultiTaskManager- Parameters:
archiveMgr
- Archiv-ManagerinputData
- Queue, in die von einem anderne THread zu verarbeitende Daten eingefügt werdentaskName
- Name
-
-
Method Details
-
start
public void start()Description copied from class:AbstractTask
Startet den Thread, der den Task ausführt- Overrides:
start
in classAbstractTask
- See Also:
-
addTask
Fuegt ein MultiTask hinzu und startet ihn, falls der MultitaskManager selbst schon gestartet ist.- Parameters:
task
- Kind-Task
-
removeTask
public void removeTask()Entfernt einen Subtask aus der Liste der verfuegbaren Tasks. Es verbleibt immer mindestens ein Task. -
getTaskNum
public int getTaskNum()Gibt die Anzahl der aktuell verwalteten Sub-Tasks zurück- Returns:
- Anzahl
-
cleanUp
protected void cleanUp()Description copied from class:AbstractTask
Wird garantiert aufgerufen, nachdem der Task vollständig terminiert wurde. Dieser Code wird im selben Thread ausgeführt, wie der eigentliche TaskTut standardmäßig nichts, kann überschrieben werden um Daten aufzuräumen, Abmeldungen durchzuführen usw.
- Overrides:
cleanUp
in classAbstractTask
-
work
Description copied from class:QueueTask
Vom konkreten Task zu implementierende Methode, die den Auftrag abarbeitet. Diese Methode sollte nur Intern aufgerufen werden, ist für Testfälle aber public. Normalerweise sollten Aufträge aber Asynchron mit submit() übergeben werden- Specified by:
work
in classQueueTask<de.bsvrz.dav.daf.main.ResultData>
- Parameters:
step
- Auftrag/Arbeitsschritt- Throws:
InterruptedException
- Thread unterbrochen
-
join
Description copied from class:AbstractTask
Wartet auf das Beenden des Tasks nach der Terminierung. Beispielcode:task.terminateTask(); // Task soll bei der nächsten Möglichkeit terminieren (asynchroner Aufruf) task.join(); // Auf das terminieren synchron warten
- Overrides:
join
in classAbstractTask
- Throws:
InterruptedException
- bei Unterbrechung- See Also:
-
toString
-
isAlive
public boolean isAlive()Description copied from class:AbstractTask
Gibttrue
zurück, wenn der Task aktuell läuft- Overrides:
isAlive
in classAbstractTask
- Returns:
true
, wenn der Task aktuell läuft, sonstfalse
-
getObjectsFromDav
public void getObjectsFromDav()
-