public abstract class Task extends java.lang.Object implements SuspendableTask
Abstrakte Basisklasse für die abstrakten Task-Basisklassen SingleTask
und MultiTask
.
Ein Task ist ein Thread, eine bestimmte Aktion ausführt. Mit terminateTask()
kann diese Aufgabe abgebrochen werden. Während der Ausführung kann der Task mit shouldTerminate()
prüfen, ob er terminiert wurde und dann die Aufgabe ggf. neu starten.
Modifier and Type | Field and Description |
---|---|
protected Debug |
_debug |
protected boolean |
_shouldTerminate
Zeigt an ob der Task beendet werden soll.
|
protected ArchiveManager |
archMgr
Zentrale Archiv-Verwaltung.
|
protected DataIdentTree |
didTree
Datenindentifikationen
|
protected static int |
INDEX_MEMORY_SIZE
Größe des Byte-Arrays für temporaeren Speicher beim Abfragen der Indexe.
|
protected PersistenceManager |
persMgr
PersistenceManager für den Zugriff auf die Daten des Archivsystems
|
Constructor and Description |
---|
Task(ArchiveManager archiveMgr) |
Modifier and Type | Method and Description |
---|---|
void |
addTaskStepListener(TaskStepListener tsl)
Zu Testzwecken kann hiermit ein Listener eingefuegt werden, der am Ende eines jedem Schleifendurchlaufs aufgerufen wird.
|
protected void |
cleanUp()
Wird garantiert aufgerufen, nachdem der Task vollständig terminiert wurde, also die Step-Funktion das letzte mal ausgeführt wurde.
|
protected void |
execute()
Diese Methode muss implementiert werden und definiert die Aktion, die dieser Task ausführt
|
ArchiveManager |
getArchMgr()
Gibt den Archivmanager zurück
|
java.lang.String |
getName()
Gibt den Namen zurück
|
void |
getObjectsFromDav()
Wird aufgerufen, sobald eine Datenverteilerverbindung verfügbar ist. kann benutzt werden, um Objekte zu laden und Anmeldungen durchzuführen.
|
java.lang.Thread.State |
getState() |
boolean |
isAlive()
Gibt true zurück, wenn der Task aktuell läuft
|
boolean |
isTerminated()
Gibt true zurück, wenn der Task schon gelaufen ist und komplett terminiert wurde
|
void |
join()
Wartet auf das Beenden des Threads nach der Terminierung.
|
void |
removeTaskStepListener(TaskStepListener tsl)
Entfernt den Listener.
|
void |
setName(java.lang.String name)
Setzt den Namen, der auch den Namen des Threads definiert und in Debug-Ausgaben benutzt wird.
|
boolean |
shouldTerminate()
Gibt an, ob der Task terminiert werden soll.
|
void |
start() |
void |
suspendTaskIfNecessary()
Hält den Task an, falls sich das Archivsystem in einem kritischen Zustand befindet.
|
protected void |
taskStepDone()
Benachrichtigt darüber, dass ein Schleifendurchlauf abgearbeitet wurde.
|
void |
terminateTask()
Terminiert den Task, indem die
#run() -Methode unterbrochen wird, sofern sie im Wartezustand ist und nicht gerade einen Auftrag bearbeitet. |
protected static final int INDEX_MEMORY_SIZE
Größe des Byte-Arrays für temporaeren Speicher beim Abfragen der Indexe.
protected final Debug _debug
protected ArchiveManager archMgr
Zentrale Archiv-Verwaltung.
protected DataIdentTree didTree
Datenindentifikationen
protected PersistenceManager persMgr
PersistenceManager für den Zugriff auf die Daten des Archivsystems
protected volatile boolean _shouldTerminate
Zeigt an ob der Task beendet werden soll. Der Task bricht dann möglichst schnell an der nächsten sicheren Stelle ab.
public Task(ArchiveManager archiveMgr)
public final java.lang.Thread.State getState()
public void start()
protected void execute()
Diese Methode muss implementiert werden und definiert die Aktion, die dieser Task ausführt
protected void cleanUp()
Wird garantiert aufgerufen, nachdem der Task vollständig terminiert wurde, also die Step-Funktion das letzte mal ausgeführt wurde.
Tut standardmäßig nichts, kann überschrieben werden um Daten aufzuräumen, Abmeldungen durchzuführen usw.
public void addTaskStepListener(TaskStepListener tsl)
Zu Testzwecken kann hiermit ein Listener eingefuegt werden, der am Ende eines jedem Schleifendurchlaufs aufgerufen wird. Auf diese Weise sind z.B. die Tasks einfacher zu testen. Wenn ein Task abgebrochen wird, kann nicht garantiert werden, dass für die letzte Schleife der TaskListener
aufgerufen wird.
tsl
- Callback-Interfacepublic void removeTaskStepListener(TaskStepListener tsl)
Entfernt den Listener.
tsl
- Callback-Interfaceprotected void taskStepDone()
Benachrichtigt darüber, dass ein Schleifendurchlauf abgearbeitet wurde.
public void terminateTask()
Terminiert den Task, indem die #run()
-Methode unterbrochen wird, sofern sie im Wartezustand ist und nicht gerade einen Auftrag bearbeitet. Andernfalls wird der Task vor dem naechsten Zyklus beendet.
public boolean shouldTerminate()
Gibt an, ob der Task terminiert werden soll. Diese Methode sollte innerhalb des Tasks aufgerufen werden um festzustellen, ob der Vorgang abgebrochen werden soll. Sie gibt nicht an, ob der Task schon komplett beendet ist!
shouldTerminate
in interface SuspendableTask
public ArchiveManager getArchMgr()
Gibt den Archivmanager zurück
public final void suspendTaskIfNecessary()
Hält den Task an, falls sich das Archivsystem in einem kritischen Zustand befindet.
suspendTaskIfNecessary
in interface SuspendableTask
public void getObjectsFromDav()
Wird aufgerufen, sobald eine Datenverteilerverbindung verfügbar ist. kann benutzt werden, um Objekte zu laden und Anmeldungen durchzuführen.
Wichtig: Diese Methode wird im Konstruktor ausgeführt und sollte daher nicht erwarten, dass die Subklasse (this
) vollständig initialisiert ist.
public final java.lang.String getName()
Gibt den Namen zurück
public final void setName(java.lang.String name)
Setzt den Namen, der auch den Namen des Threads definiert und in Debug-Ausgaben benutzt wird.
name
- neuer Name (nicht null)public void join() throws java.lang.InterruptedException
Wartet auf das Beenden des Threads nach der Terminierung.
java.lang.InterruptedException
public final boolean isAlive()
Gibt true zurück, wenn der Task aktuell läuft
public boolean isTerminated()
Gibt true zurück, wenn der Task schon gelaufen ist und komplett terminiert wurde