Package de.bsvrz.ars.ars.mgmt.tasks
Class QueryTask
java.lang.Object
de.bsvrz.ars.ars.mgmt.tasks.AbstractTask
de.bsvrz.ars.ars.mgmt.tasks.Task
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.MultiTask
de.bsvrz.ars.ars.mgmt.tasks.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 verwendetprotected 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
Aktueller Zustand der Sendesteuerung. -
syncObj
protected final java.lang.Object syncObjSpezielles Objekt zur Synchronisiserung. Immer dieses anstatt this verwenden! -
queryAppObj
protected de.bsvrz.dav.daf.main.config.SystemObject queryAppObjApplikations-Objekt des Absenders der Archiv-Anfrage. -
atgQuery
protected de.bsvrz.dav.daf.main.config.AttributeGroup atgQueryAttributgruppe für Archiv-Anfragen. -
ddResponse
protected de.bsvrz.dav.daf.main.DataDescription ddResponseDatenidentifikation der Archiv-Antwort. -
queryIdx
protected int queryIdxAnfrage-Index der anfragenden Applikation zur Archiv-Anfrage. -
serializerVersion
protected int serializerVersionSerialisiererversion der anfragenden Applikation, mit der auch die Antwort erstellt wird. -
gData
protected de.bsvrz.dav.daf.main.Data gDataDieses Datenobjekt wird zum Senden des Ergebnisses verwendet -
gResultData
protected de.bsvrz.dav.daf.main.ResultData gResultDataWird zum Senden verwendet (muss nur einmal angelegt werden) -
bosResult
protected final java.io.ByteArrayOutputStream bosResultWiederverwendbarer ByteArrayOutputStream. -
serializer
protected de.bsvrz.sys.funclib.dataSerializer.Serializer serializerDer Serialisierer aus DAF. -
deserializer
protected de.bsvrz.sys.funclib.dataSerializer.Deserializer deserializerDer Deserialisierer aus DAF.
-
-
Constructor Details
-
QueryTask
Konstruktor für den QueryTask.- Parameters:
archiveMgr
- Der Archiv-Manager.tMgr
- Der MultiTaskManager.
-
-
Method Details
-
waitForSendControl
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 classAbstractTask
-
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 interfacede.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 interfacede.bsvrz.dav.daf.main.ClientSenderInterface
-
subscribeSender
protected void subscribeSender() throws de.bsvrz.dav.daf.main.OneSubscriptionPerSendDataMeldet 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.NoSuchVersionExceptionLegt 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-ArraymsgType
- ArchivNachrichtenTyp wie definiert inMessageType
-
parseArchiveDataSpec
protected de.bsvrz.dav.daf.main.archive.ArchiveDataSpecification[] parseArchiveDataSpec(de.bsvrz.sys.funclib.dataSerializer.Deserializer ds) throws java.io.IOExceptionInterpretiert 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
-