Class MultiTaskManager

java.lang.Object

public final class MultiTaskManager
extends QueueTask<de.bsvrz.dav.daf.main.ResultData>
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
    Modifier and Type Field Description
    protected de.bsvrz.sys.funclib.losb.ringbuffer.RingBuffer<MultiTask> freeTaskQueue
    Warteschlange mit Sub-Tasks, die aktuell nichts tun.
    protected java.util.ArrayList<MultiTask> taskList
    Liste mit allen Sub-Tasks

    Fields inherited from class de.bsvrz.ars.ars.mgmt.tasks.RepeatingTask

    TERMINATE_TASK

    Fields inherited from class de.bsvrz.ars.ars.mgmt.tasks.AbstractTask

    _debug, _shouldTerminate, archMgr, didTree, persMgr
  • Constructor Summary

    Constructors
    Constructor Description
    MultiTaskManager​(ArchiveManager archiveMgr, java.util.concurrent.BlockingQueue<java.lang.Object> inputData, java.lang.String taskName)
    Erstellt einen neuen MultiTaskManager
  • Method Summary

    Modifier and Type Method Description
    void addTask​(MultiTask task)
    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 getObjectsFromDav()
    Wird aufgerufen, sobald eine Datenverteilerverbindung verfügbar ist.
    int getTaskNum()
    Gibt die Anzahl der aktuell verwalteten Sub-Tasks zurück
    boolean isAlive()
    Gibt true zurück, wenn der Task aktuell läuft
    void join()
    Wartet auf das Beenden des Tasks nach der Terminierung.
    void removeTask()
    Entfernt einen Subtask aus der Liste der verfuegbaren Tasks.
    void start()
    Startet den Thread, der den Task ausführt
    java.lang.String toString()  
    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

    offer, step, submit, terminateTask

    Methods inherited from class de.bsvrz.ars.ars.mgmt.tasks.RepeatingTask

    execute

    Methods inherited from class de.bsvrz.ars.ars.mgmt.tasks.Task

    addTaskStepListener, getName, getState, isTerminated, removeTaskStepListener, setName, taskStepDone

    Methods inherited from class de.bsvrz.ars.ars.mgmt.tasks.AbstractTask

    getArchMgr, shouldTerminate, suspendTaskIfNecessary

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
  • Field Details

    • freeTaskQueue

      protected final de.bsvrz.sys.funclib.losb.ringbuffer.RingBuffer<MultiTask> freeTaskQueue
      Warteschlange mit Sub-Tasks, die aktuell nichts tun.
    • taskList

      protected final java.util.ArrayList<MultiTask> taskList
      Liste mit allen Sub-Tasks
  • Constructor Details

    • MultiTaskManager

      public MultiTaskManager​(ArchiveManager archiveMgr, java.util.concurrent.BlockingQueue<java.lang.Object> inputData, java.lang.String taskName)
      Erstellt einen neuen MultiTaskManager
      Parameters:
      archiveMgr - Archiv-Manager
      inputData - Queue, in die von einem anderne THread zu verarbeitende Daten eingefügt werden
      taskName - Name
  • Method Details

    • start

      public void start()
      Description copied from class: Task
      Startet den Thread, der den Task ausführt
      Overrides:
      start in class Task
      See Also:
      Thread.start()
    • addTask

      public void addTask​(MultiTask task)
      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: Task
      Wird garantiert aufgerufen, nachdem der Task vollständig terminiert wurde. Dieser Code wird im selben Thread ausgeführt, wie der eigentliche Task

      Tut standardmäßig nichts, kann überschrieben werden um Daten aufzuräumen, Abmeldungen durchzuführen usw.

      Overrides:
      cleanUp in class Task
    • work

      protected void work​(de.bsvrz.dav.daf.main.ResultData step) throws java.lang.InterruptedException
      Description copied from class: QueueTask
      Vom konkreten Task zu implementierende Methode, die den Auftrag abarbeitet
      Specified by:
      work in class QueueTask<de.bsvrz.dav.daf.main.ResultData>
      Parameters:
      step - Auftrag/Arbeitsschritt
      Throws:
      java.lang.InterruptedException - Thread unterbrochen
    • join

      public void join() throws java.lang.InterruptedException
      Description copied from class: Task
      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 class Task
      Throws:
      java.lang.InterruptedException - bei Unterbrechung
      See Also:
      Thread.join()
    • toString

      public java.lang.String toString()
      Overrides:
      toString in class java.lang.Object
    • isAlive

      public boolean isAlive()
      Description copied from class: Task
      Gibt true zurück, wenn der Task aktuell läuft
      Overrides:
      isAlive in class Task
      Returns:
      true, wenn der Task aktuell läuft, sonst false
    • getObjectsFromDav

      public void getObjectsFromDav()
      Description copied from class: AbstractTask
      Wird aufgerufen, sobald eine Datenverteilerverbindung verfügbar ist. Kann benutzt werden, um Objekte zu laden und Anmeldungen durchzuführen.

      Wichtig: Diese Methode wird unter Umständen im Konstruktor ausgeführt und sollte daher nicht erwarten, dass die Subklasse (`this`) vollständig initialisiert ist.

      Overrides:
      getObjectsFromDav in class AbstractTask