public abstract class QueryTask extends MultiTask implements ClientSenderInterface
Oberklasse für Tasks, die Archivanfragen oder Archiv-Informationsanfragen bearbeiten.
Modifier and Type | Class and Description |
---|---|
protected static class |
QueryTask.SendingState
Zustand der Sendesteuerung (Senden / Anhalten / Abbrechen).
|
Modifier and Type | Field and Description |
---|---|
protected AttributeGroup |
atgQuery
Attributgruppe für Archiv-Anfragen.
|
protected java.io.ByteArrayOutputStream |
bosResult
Wiederverwendbarer ByteArrayOutputStream.
|
protected DataDescription |
ddResponse
Datenidentifikation der Archiv-Antwort.
|
protected Deserializer |
deserializer
Der Deserialisierer aus DAF.
|
protected Data |
gData
Dieses Datenobjekt wird zum Senden des Ergebnisses verwendet
|
protected ResultData |
gResultData
Wird zum Senden verwendet (muss nur einmal angelegt werden)
|
static int |
MIN_CONTAINER_FILES
Mindest-Anzahl an ContainerFile-Objekten, die der PersistenzManager für diesen Task vorhalten soll.
|
protected static ArchiveDataKind |
NA
Datensatzart Nachgefordert Aktuell
|
protected static ArchiveDataKind |
NN
Datensatzart Nachgefordert Nachgeliefert
|
protected static ArchiveDataKind |
OA
Datensatzart Online Aktuell
|
protected static ArchiveDataKind |
ON
Datensatzart Online Nachgeliefert
|
protected 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 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.
|
protected static long |
t_lsMax
Maximale Dauer, um die der Loeschschutz automatisch verlaengert wird (gemessen ab Ende Vorhaltezeitraum)
|
protected byte[] |
tempMem
Speicher für das Abfragen der Indexe.
|
resultData
TERMINATE_TASK
_debug, _shouldTerminate, archMgr, didTree, INDEX_MEMORY_SIZE, persMgr
START_SENDING, STOP_SENDING, STOP_SENDING_NO_RIGHTS, STOP_SENDING_NOT_A_VALID_SUBSCRIPTION
Constructor and Description |
---|
QueryTask(ArchiveManager archiveMgr,
MultiTaskManager tMgr)
Konstruktor für den QueryTask.
|
Modifier and Type | Method and Description |
---|---|
protected void |
createQueryData()
Legt alle Datenstrukturen an, die zu Beginn der Anfrage ermittelt werden koennen.
|
void |
dataRequest(SystemObject object,
DataDescription dataDescription,
byte state)
Sendesteuerung des Datenverteilers an die Applikation.
|
void |
getObjectsFromDav()
Wird aufgerufen, sobald eine Datenverteilerverbindung verfügbar ist. kann benutzt werden, um Objekte zu laden und Anmeldungen durchzuführen.
|
protected void |
init()
Initialisiert den Task für eine neue Anfrage.
|
boolean |
isRequestSupported(SystemObject object,
DataDescription dataDescription)
Diese Methode muss von der Applikation implementiert werden, um zu signalisieren, ob Sendesteuerungen erwünscht sind und mit der Methode
dataRequest verarbeitet werden. |
protected ArchiveDataSpecification[] |
parseArchiveDataSpec(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 uebergebene Byte-Array in einem Ergebnis-Datensatz (
ResultData ) an das Empfaenger-Applikations-Objekt. |
static void |
setT_lsMax(long tlsMax) |
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.
|
getTaskIndex, setTaskIndex, work, work
getQueue, step, submit, terminateTask
execute
addTaskStepListener, cleanUp, getArchMgr, getName, getState, isAlive, isTerminated, join, removeTaskStepListener, setName, shouldTerminate, start, suspendTaskIfNecessary, taskStepDone
protected static ArchiveDataKind OA
Datensatzart Online Aktuell
protected static ArchiveDataKind ON
Datensatzart Online Nachgeliefert
protected static ArchiveDataKind NA
Datensatzart Nachgefordert Aktuell
protected static ArchiveDataKind NN
Datensatzart Nachgefordert Nachgeliefert
public static final int MIN_CONTAINER_FILES
Mindest-Anzahl an ContainerFile-Objekten, die der PersistenzManager für diesen Task vorhalten soll.
protected QueryTask.SendingState sendingState
Aktueller Zustand der Sendesteuerung.
protected java.lang.Object syncObj
Spezielles Objekt zur Synchronisiserung. Immer dieses anstatt this verwenden!
protected byte[] tempMem
Speicher für das Abfragen der Indexe.
protected SystemObject queryAppObj
Applikations-Objekt des Absenders der Archiv-Anfrage.
protected AttributeGroup atgQuery
Attributgruppe für Archiv-Anfragen.
protected DataDescription ddResponse
Datenidentifikation der Archiv-Antwort.
protected int queryIdx
Anfrage-Index der anfragenden Applikation zur Archiv-Anfrage.
protected int serializerVersion
Serialisiererversion der anfragenden Applikation, mit der auch die Antwort erstellt wird.
protected Data gData
Dieses Datenobjekt wird zum Senden des Ergebnisses verwendet
protected ResultData gResultData
Wird zum Senden verwendet (muss nur einmal angelegt werden)
protected java.io.ByteArrayOutputStream bosResult
Wiederverwendbarer ByteArrayOutputStream.
protected Serializer serializer
Der Serialisierer aus DAF.
protected Deserializer deserializer
Der Deserialisierer aus DAF.
protected static long t_lsMax
Maximale Dauer, um die der Loeschschutz automatisch verlaengert wird (gemessen ab Ende Vorhaltezeitraum)
public QueryTask(ArchiveManager archiveMgr, MultiTaskManager tMgr)
Konstruktor für den QueryTask.
archiveMgr
- Der Archiv-Manager.tMgr
- Der MultiTaskManager.public void getObjectsFromDav()
Task
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.
getObjectsFromDav
in class Task
protected void init()
Initialisiert den Task für eine neue Anfrage.
public static void setT_lsMax(long tlsMax)
t_lsMax
public boolean isRequestSupported(SystemObject object, DataDescription dataDescription)
de.bsvrz.dav.daf.main.ClientSenderInterface
dataRequest
verarbeitet werden. In der Implementierung dieser Methode dürfen keine synchronen Aufrufe, die auf Telegramme vom Datenverteiler
warten (wie z.B. Konfigurationsanfragen) durchgeführt werden, da ansonsten ein Deadlock entsteht.isRequestSupported
in interface ClientSenderInterface
object
- Das in der zugehörigen Sendeanmeldung angegebene System-Objekt.dataDescription
- Die in der zugehörigen Sendeanmeldung angegebenen beschreibenden Informationen der angemeldeten Daten.true
, falls Sendesteuerungen gewünscht sind, sonst false
.ClientSenderInterface.isRequestSupported(SystemObject,DataDescription)
public void dataRequest(SystemObject object, DataDescription dataDescription, byte state)
de.bsvrz.dav.daf.main.ClientSenderInterface
dataRequest
in interface ClientSenderInterface
object
- Das in der zugehörigen Sendeanmeldung angegebene Objekt, auf das sich die Sendesteuerung bezieht.dataDescription
- Beschreibende Informationen zu den angemeldeten Daten auf die sich die Sendesteuerung bezieht.state
- Status der Sendesteuerung. Kann einen der Werte START_SENDING
, STOP_SENDING
,
STOP_SENDING_NO_RIGHTS
, STOP_SENDING_NOT_A_VALID_SUBSCRIPTION
enthalten.ClientSenderInterface.dataRequest(SystemObject,DataDescription,byte)
protected void subscribeSender() throws 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.
receiver
- Empfaenger-Applikations-ObjektOneSubscriptionPerSendData
protected void unsubscribeSender()
Meldet den Task als Sender für Archiv-Antworten an das angegebene Empfaenger-Applikations-Objekt ab.
protected void createQueryData() throws NoSuchVersionException
Legt alle Datenstrukturen an, die zu Beginn der Anfrage ermittelt werden koennen.
NoSuchVersionException
protected void sendResultData(byte[] resultBytes, int msgType)
Sendet das uebergebene Byte-Array in einem Ergebnis-Datensatz (ResultData
) an das Empfaenger-Applikations-Objekt.
resultBytes
- Zu versendendes Byte-ArraymsgType
- ArchivNachrichtenTyp wie definiert in MessageType
protected ArchiveDataSpecification[] parseArchiveDataSpec(Deserializer ds) throws java.io.IOException
Interpretiert die empfangene Archivanfrage oder Archiv-Informationsanfrage und zerlegt sie in einzelne Unterabfragen vom Typ ArchiveDataSpecification.
ds
- Deserialisierer mit der Anfrage.java.io.IOException