Class QueryTask

All Implemented Interfaces:
de.bsvrz.dav.daf.main.ClientSenderInterface
Direct Known Subclasses:
ArchiveInfoQueryTask, ArchiveQueryTask

public abstract class QueryTask
extends MultiTask
implements de.bsvrz.dav.daf.main.ClientSenderInterface
Oberklasse für Tasks, die Archivanfragen oder Archiv-Informationsanfragen bearbeiten.
  • Nested Class Summary

    Nested Classes
    Modifier and Type Class Description
    protected static class  QueryTask.SendingState
    Zustand der Sendesteuerung (Senden / Anhalten / Abbrechen).
  • Field Summary

    Fields
    Modifier and Type Field Description
    protected de.bsvrz.dav.daf.main.config.AttributeGroup atgQuery
    Attributgruppe für Archiv-Anfragen.
    protected java.io.ByteArrayOutputStream bosResult
    Wiederverwendbarer ByteArrayOutputStream.
    protected de.bsvrz.dav.daf.main.DataDescription ddResponse
    Datenidentifikation der Archiv-Antwort.
    protected de.bsvrz.sys.funclib.dataSerializer.Deserializer deserializer
    Der Deserialisierer aus DAF.
    protected de.bsvrz.dav.daf.main.Data gData
    Dieses Datenobjekt wird zum Senden des Ergebnisses verwendet
    protected de.bsvrz.dav.daf.main.ResultData gResultData
    Wird zum Senden verwendet (muss nur einmal angelegt werden)
    protected de.bsvrz.dav.daf.main.config.SystemObject queryAppObj
    Applikations-Objekt des Absenders der Archiv-Anfrage.
    protected int queryIdx
    Anfrage-Index der anfragenden Applikation zur Archiv-Anfrage.
    protected QueryTask.SendingState sendingState
    Aktueller Zustand der Sendesteuerung.
    protected de.bsvrz.sys.funclib.dataSerializer.Serializer serializer
    Der Serialisierer aus DAF.
    protected int serializerVersion
    Serialisiererversion der anfragenden Applikation, mit der auch die Antwort erstellt wird.
    protected java.lang.Object syncObj
    Spezielles Objekt zur Synchronisiserung.

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

    resultData

    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

    Fields inherited from interface de.bsvrz.dav.daf.main.ClientSenderInterface

    START_SENDING, STOP_SENDING, STOP_SENDING_NO_RIGHTS, STOP_SENDING_NOT_A_VALID_SUBSCRIPTION
  • Constructor Summary

    Constructors
    Constructor Description
    QueryTask​(ArchiveManager archiveMgr, MultiTaskManager tMgr)
    Konstruktor für den QueryTask.
  • Method Summary

    Modifier and Type Method Description
    protected void createQueryData()
    Legt alle Datenstrukturen an, die zu Beginn der Anfrage ermittelt werden können.
    void dataRequest​(de.bsvrz.dav.daf.main.config.SystemObject object, de.bsvrz.dav.daf.main.DataDescription dataDescription, byte state)  
    void getObjectsFromDav()
    Wird aufgerufen, sobald eine Datenverteilerverbindung verfügbar ist.
    protected void init()
    Initialisiert den Task für eine neue Anfrage.
    boolean isRequestSupported​(de.bsvrz.dav.daf.main.config.SystemObject object, de.bsvrz.dav.daf.main.DataDescription dataDescription)  
    protected de.bsvrz.dav.daf.main.archive.ArchiveDataSpecification[] parseArchiveDataSpec​(de.bsvrz.sys.funclib.dataSerializer.Deserializer ds)
    Interpretiert die empfangene Archivanfrage oder Archiv-Informationsanfrage und zerlegt sie in einzelne Unterabfragen vom Typ ArchiveDataSpecification.
    protected void sendResultData​(byte[] resultBytes, int msgType)
    Sendet das übergebene Byte-Array in einem Ergebnis-Datensatz (ResultData) an das Empfaenger-Applikations-Objekt.
    protected void subscribeSender()
    Meldet den Task als Sender für Archiv-Antworten an das angegebene Empfaenger-Applikations-Objekt an.
    protected void unsubscribeSender()
    Meldet den Task als Sender für Archiv-Antworten an das angegebene Empfaenger-Applikations-Objekt ab.
    protected QueryTask.SendingState waitForSendControl()
    Wartet darauf, dass es eine positive Sendesteuerung für das Verschicken der Antworten gibt.

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

    setTaskIndex, work, work

    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, cleanUp, getName, getState, isAlive, isTerminated, join, removeTaskStepListener, setName, start, 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, toString, wait, wait, wait
  • Field Details

    • sendingState

      protected QueryTask.SendingState sendingState
      Aktueller Zustand der Sendesteuerung.
    • syncObj

      protected final java.lang.Object syncObj
      Spezielles Objekt zur Synchronisiserung. Immer dieses anstatt this verwenden!
    • queryAppObj

      protected de.bsvrz.dav.daf.main.config.SystemObject queryAppObj
      Applikations-Objekt des Absenders der Archiv-Anfrage.
    • atgQuery

      protected de.bsvrz.dav.daf.main.config.AttributeGroup atgQuery
      Attributgruppe für Archiv-Anfragen.
    • ddResponse

      protected de.bsvrz.dav.daf.main.DataDescription ddResponse
      Datenidentifikation der Archiv-Antwort.
    • queryIdx

      protected int queryIdx
      Anfrage-Index der anfragenden Applikation zur Archiv-Anfrage.
    • serializerVersion

      protected int serializerVersion
      Serialisiererversion der anfragenden Applikation, mit der auch die Antwort erstellt wird.
    • gData

      protected de.bsvrz.dav.daf.main.Data gData
      Dieses Datenobjekt wird zum Senden des Ergebnisses verwendet
    • gResultData

      protected de.bsvrz.dav.daf.main.ResultData gResultData
      Wird zum Senden verwendet (muss nur einmal angelegt werden)
    • bosResult

      protected final java.io.ByteArrayOutputStream bosResult
      Wiederverwendbarer ByteArrayOutputStream.
    • serializer

      protected de.bsvrz.sys.funclib.dataSerializer.Serializer serializer
      Der Serialisierer aus DAF.
    • deserializer

      protected de.bsvrz.sys.funclib.dataSerializer.Deserializer deserializer
      Der Deserialisierer aus DAF.
  • Constructor Details

    • QueryTask

      public QueryTask​(ArchiveManager archiveMgr, MultiTaskManager tMgr)
      Konstruktor für den QueryTask.
      Parameters:
      archiveMgr - Der Archiv-Manager.
      tMgr - Der MultiTaskManager.
  • Method Details

    • waitForSendControl

      protected QueryTask.SendingState waitForSendControl() throws java.lang.InterruptedException
      Wartet darauf, dass es eine positive Sendesteuerung für das Verschicken der Antworten gibt. Diese Methode wartet so lange, wie eine negative Sendesteuerung besteht.
      Returns:
      In der Regel QueryTask.SendingState.SEND, außer es tritt ein Fehler oder Timeout auf. Der Aufrufer muss den Rückgabewert auswerten und entsprechend reagieren.
      Throws:
      java.lang.InterruptedException
    • 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
    • init

      protected void init()
      Initialisiert den Task für eine neue Anfrage.
    • isRequestSupported

      public boolean isRequestSupported​(de.bsvrz.dav.daf.main.config.SystemObject object, de.bsvrz.dav.daf.main.DataDescription dataDescription)
      Specified by:
      isRequestSupported in interface de.bsvrz.dav.daf.main.ClientSenderInterface
    • dataRequest

      public void dataRequest​(de.bsvrz.dav.daf.main.config.SystemObject object, de.bsvrz.dav.daf.main.DataDescription dataDescription, byte state)
      Specified by:
      dataRequest in interface de.bsvrz.dav.daf.main.ClientSenderInterface
    • subscribeSender

      protected void subscribeSender() throws de.bsvrz.dav.daf.main.OneSubscriptionPerSendData
      Meldet den Task als Sender für Archiv-Antworten an das angegebene Empfaenger-Applikations-Objekt an. Registriert den StreamMultiplexer für den Empfang von Flusskontroll-Steuerungspaketen.
      Throws:
      de.bsvrz.dav.daf.main.OneSubscriptionPerSendData
    • unsubscribeSender

      protected void unsubscribeSender()
      Meldet den Task als Sender für Archiv-Antworten an das angegebene Empfaenger-Applikations-Objekt ab.
    • createQueryData

      protected void createQueryData() throws de.bsvrz.sys.funclib.dataSerializer.NoSuchVersionException
      Legt alle Datenstrukturen an, die zu Beginn der Anfrage ermittelt werden können.
      Throws:
      de.bsvrz.sys.funclib.dataSerializer.NoSuchVersionException
    • sendResultData

      protected void sendResultData​(byte[] resultBytes, int msgType)
      Sendet das übergebene Byte-Array in einem Ergebnis-Datensatz (ResultData) an das Empfaenger-Applikations-Objekt.
      Parameters:
      resultBytes - Zu versendendes Byte-Array
      msgType - ArchivNachrichtenTyp wie definiert in MessageType
    • parseArchiveDataSpec

      protected de.bsvrz.dav.daf.main.archive.ArchiveDataSpecification[] parseArchiveDataSpec​(de.bsvrz.sys.funclib.dataSerializer.Deserializer ds) throws java.io.IOException
      Interpretiert die empfangene Archivanfrage oder Archiv-Informationsanfrage und zerlegt sie in einzelne Unterabfragen vom Typ ArchiveDataSpecification.
      Parameters:
      ds - Deserialisierer mit der Anfrage.
      Returns:
      Feld von Unterabfragen vom Typ ArchiveDataSpecification.
      Throws:
      java.io.IOException - Allgemeiner IO-Fehler