public class ArchiveQueryTask extends QueryTask implements StreamMultiplexerDirector
Task für Bearbeitung von Archivanfragen.
Die Archivanfrage wird analysiert und in ihre Unterabfragen ArchiveQueryTask.Query
zerlegt. Die Beantwortung erfolgt streambasiert mit einem Stream pro Unterabfrage.
Modifier and Type | Class and Description |
---|---|
private class |
ArchiveQueryTask.Container
Diese Klasse kapselt alle notwendigen Informationen zu einem Ergebnis-Datencontainer.
|
private class |
ArchiveQueryTask.ContWalk
Im Container-Walk werden alle Container einer Datensatzart gesammelt, die zur Beantwortung einer Unterabfrage (@link Query} benoetigt werden, da sie ErgebnisDatensätze enthalten.
|
private class |
ArchiveQueryTask.Info |
private class |
ArchiveQueryTask.Query
Klasse, die eine einzelne Unterabfrage (
ArchiveDataSpecification ) aus der Archivanfrage und die zugehoerigen Daten für die Archivantwort kapselt. |
private class |
ArchiveQueryTask.SimpleArchiveData
Klasse, die einen Archivdatensatz mit den zugehoerigen Zeitstempeln und Datenindex kapselt.
|
QueryTask.SendingState
Modifier and Type | Field and Description |
---|---|
private int |
_maximumRequestsPerApplication
Maximale Anzahl paralleler Archivanfragen je Applikation
|
private static int |
BLOCKING_FACTOR_MUX_DEFAULT
Default-Anzahl der Pakete, die pro Stream initial an den Empfaenger geschickt werden duerfen.
|
private static int |
blockingFactorMuxParam
Parametrierte Anzahl der Pakete, die pro Stream an den Empfaenger geschickt werden duerfen.
|
private int |
blockingFactorMuxUsed
Tatsaechlich benutzte Anzahl der Pakete, die pro Stream an den Empfaenger geschickt werden, angepasst an die Größe des Empfaengerpuffers.
|
private static int |
BUFFER_SIZE_MUX_DEFAULT
Default-Größe des Puffers im Stream-Multiplexer.
|
private static int |
bufferSizeMuxParam
Parametrierte Größe des Puffers im Stream-Multiplexer.
|
private int |
bufferSizeMuxUsed
Tatsaechlich benutzte Größe des Puffers im Stream-Multiplexer, angepasst an die Größe des Empfaengerpuffers.
|
private java.util.zip.Inflater |
decompresser
Zum Dekomprimieren.
|
private FlowControlTask |
flowCtrl
Task zur Verarbeitung der Flusskontroll-Steuerungspakete.
|
private boolean |
initialResponseSent
Wurde die initiale Antwort (kann auch Fehlermeldung sein) verschickt?
|
private StreamMultiplexer |
mux
Der StreamMultiplexer zum Verpacken der Ergebnis-Datensätze.
|
private java.util.List<ArchiveQueryTask.Query> |
queries
Liste der einzelnen Unterabfragen aus der aktuellen Archivanfrage.
|
private int |
receiverBufferSize
Größe des Empfangspuffers der anfragenden Applikation.
|
atgQuery, bosResult, ddResponse, deserializer, gData, gResultData, MIN_CONTAINER_FILES, NA, NN, OA, ON, queryAppObj, queryIdx, sendingState, serializer, serializerVersion, syncObj, t_lsMax, tempMem
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 |
---|
ArchiveQueryTask(ArchiveManager archiveMgr,
MultiTaskManager tMgr,
FlowControlTask flowCtrl)
Erzeugt eine neue Query-Task.
|
Modifier and Type | Method and Description |
---|---|
private void |
abortQueries()
Markiert alle Unterabfragen als erledigt und schliesst alle noch offenen Datensatz-Iteratoren und Container.
|
private void |
analyze()
Analysiert die aktuelle Archivanfrage und fuellt die Liste der
ArchiveQueryTask.Query . |
private void |
configureMuxParameter()
Bestimmt die Parameter bufferSizeStreamMultiplexer und blockingFactor, mit denen der StreamMultiplexer per Konstruktor parametriert wird, anhand der Werte aus den Archivsystem-Einstellungen und dem tatsaechlich vorhandenen Empfangspuffer des Empfaengers.
|
void |
dataRequest(SystemObject object,
DataDescription dataDescription,
byte state)
Sendesteuerung des Datenverteilers an die Applikation.
|
static int |
getBlockingFactorMux() |
static int |
getBufferSizeMux() |
private int |
getIntervalErrorQueryIdx()
Liefert den Index der Query, bei der die angefragten Intervallgrenzen vertauscht sind.
|
int |
getMaximumRequestsPerApplication()
Gibt die konfigurierte maximale Anzahl paralleler Archivanfragen pro Applikation zurück.
|
protected void |
init()
Initialisiert den Task für eine neue Archivanfrage.
|
void |
sendData(byte[] streamDataPacket)
Diese Methode wird von einem StreamMultiplexer aufgerufen und wenn ein Byte-Array an den entsprechenden
StreamDemultiplexer gesendet werden soll.
|
private void |
sendInitialResponse(boolean success,
java.lang.String errorMsg)
Sendet die initiale Ergebnismeldung zur Archiv-Anfrage an das Empfaenger-Applikations-Objekt.
|
static void |
setBlockingFactorMux(int bFMuxParam)
Ueber diese Methode kann die Parametrierung den Blocking-Faktor des StreamMultiplexers auf den parametrierten Wert setzen (Attribut “AnzahlBlocks” in Attributgruppe “ArchivEinstellung”).
|
static void |
setBufferSizeMux(int bSMuxParam)
Ueber diese Methode kann die Parametrierung die PufferGröße des StreamMultiplexers auf den parametrierten Wert setzen (Attribut “AnzahlBytes” in Attributgruppe “ArchivEinstellung”).
|
void |
setMaximumRequestsPerApplication(int maximumRequestsPerApplication)
Setzt die maximale Anzahl paralleler Archivanfragen pro Applikation
|
void |
streamAborted(int indexOfStream)
Wenn die Empfängerapplikation keine Nutzdaten mehr verarbeiten kann (aus welchem Grund auch immer), wird sie den
Stream auf Empfängerseite (StreamDemultiplexer) mit abort beenden.
|
static void |
subscribeObjects(ArchiveManager archMgr,
InQueuesMgr.DataReceiver receiver)
Fuehrt alle notwendigen Anmeldungen durch.
|
byte[] |
take(int indexOfStream)
Diese Methode wird von einem StreamMultiplexer aufgerufen, sobald dieser Daten an einen StreamDemultiplexer
verschicken darf.
|
protected void |
unsubscribeSender()
Meldet den Task als Sender für Archiv-Antworten an das angegebene Empfaenger-Applikations-Objekt ab.
|
void |
work()
Diese Methode ist zu überschreiben, um die konkrete Aufgabe der Task zu implementieren.
|
createQueryData, getObjectsFromDav, isRequestSupported, parseArchiveDataSpec, sendResultData, setT_lsMax, subscribeSender
getTaskIndex, setTaskIndex, work
getQueue, step, submit, terminateTask
execute
addTaskStepListener, cleanUp, getArchMgr, getName, getState, isAlive, isTerminated, join, removeTaskStepListener, setName, shouldTerminate, start, suspendTaskIfNecessary, taskStepDone
private static final int BLOCKING_FACTOR_MUX_DEFAULT
Default-Anzahl der Pakete, die pro Stream initial an den Empfaenger geschickt werden duerfen. Wert laut Datenkatalog.
private static int blockingFactorMuxParam
Parametrierte Anzahl der Pakete, die pro Stream an den Empfaenger geschickt werden duerfen.
private int blockingFactorMuxUsed
Tatsaechlich benutzte Anzahl der Pakete, die pro Stream an den Empfaenger geschickt werden, angepasst an die Größe des Empfaengerpuffers.
private static final int BUFFER_SIZE_MUX_DEFAULT
Default-Größe des Puffers im Stream-Multiplexer. Wert laut Datenkatalog.
private static int bufferSizeMuxParam
Parametrierte Größe des Puffers im Stream-Multiplexer.
private int bufferSizeMuxUsed
Tatsaechlich benutzte Größe des Puffers im Stream-Multiplexer, angepasst an die Größe des Empfaengerpuffers.
private StreamMultiplexer mux
Der StreamMultiplexer zum Verpacken der Ergebnis-Datensätze.
private FlowControlTask flowCtrl
Task zur Verarbeitung der Flusskontroll-Steuerungspakete.
private java.util.List<ArchiveQueryTask.Query> queries
Liste der einzelnen Unterabfragen aus der aktuellen Archivanfrage.
private int receiverBufferSize
Größe des Empfangspuffers der anfragenden Applikation.
private boolean initialResponseSent
Wurde die initiale Antwort (kann auch Fehlermeldung sein) verschickt?
private java.util.zip.Inflater decompresser
Zum Dekomprimieren. Wird hier gahalten, damit sowenig Instanzen wie moeglich angelegt werden (hoher Speicherverbrauch)
private int _maximumRequestsPerApplication
Maximale Anzahl paralleler Archivanfragen je Applikation
public ArchiveQueryTask(ArchiveManager archiveMgr, MultiTaskManager tMgr, FlowControlTask flowCtrl)
Erzeugt eine neue Query-Task.
archiveMgr
- Archiv-VerwaltungtMgr
- Zugeordneter Task-ManagerflowCtrl
- Verwaltung der Flusskontrollepublic static void subscribeObjects(ArchiveManager archMgr, InQueuesMgr.DataReceiver receiver)
Fuehrt alle notwendigen Anmeldungen durch.
archMgr
- Archiv-Verwaltungreceiver
- Empfaengerobjektpublic static void setBlockingFactorMux(int bFMuxParam)
Ueber diese Methode kann die Parametrierung den Blocking-Faktor des StreamMultiplexers auf den parametrierten Wert setzen (Attribut “AnzahlBlocks” in Attributgruppe “ArchivEinstellung”).
bFMuxParam
- Parametrierter Blocking-Faktor des StreamMultiplexerspublic static void setBufferSizeMux(int bSMuxParam)
Ueber diese Methode kann die Parametrierung die PufferGröße des StreamMultiplexers auf den parametrierten Wert setzen (Attribut “AnzahlBytes” in Attributgruppe “ArchivEinstellung”).
bSMuxParam
- Parametrierte PufferGröße des StreamMultiplexerspublic static int getBlockingFactorMux()
setBlockingFactorMux(int)
public static int getBufferSizeMux()
setBlockingFactorMux(int)
public int getMaximumRequestsPerApplication()
Gibt die konfigurierte maximale Anzahl paralleler Archivanfragen pro Applikation zurück.
public void setMaximumRequestsPerApplication(int maximumRequestsPerApplication)
Setzt die maximale Anzahl paralleler Archivanfragen pro Applikation
maximumRequestsPerApplication
- neuer Wert ( > 0 )public void work()
MultiTask
Diese Methode ist zu überschreiben, um die konkrete Aufgabe der Task zu implementieren. In der Methode soll keine weitere Synchronisation stattfinden.
work
in class MultiTask
MultiTask.work()
public void sendData(byte[] streamDataPacket)
de.bsvrz.sys.funclib.communicationStreams.StreamMultiplexerDirector
StreamDemultiplexer.receivedDataFromSender(byte[])
aufgerufen werden.
Das Byte-Array enthält kodiert den Index des Streams, den Index des Pakets, die Größe des Byte-Arrays in dem
die Nutzdaten gespeichert sind und die Nutzdaten.sendData
in interface StreamMultiplexerDirector
streamDataPacket
- Ein Nutzdatenpaket vom StreamMultiplexer zum StreamDemultiplexerStreamMultiplexerDirector.sendData(byte[])
public byte[] take(int indexOfStream)
de.bsvrz.sys.funclib.communicationStreams.StreamMultiplexerDirector
StreamDemultiplexer.take(int)
bereit gestellt
wird.take
in interface StreamMultiplexerDirector
indexOfStream
- Stream über den die Nutzdaten übertragen werden sollennull
zurück
gegeben.StreamMultiplexerDirector.take(int)
public void streamAborted(int indexOfStream)
de.bsvrz.sys.funclib.communicationStreams.StreamMultiplexerDirector
streamAborted
in interface StreamMultiplexerDirector
indexOfStream
- Index des Streams, dessen Nutzdaten in der Senderapplikation verworfen werden könnenStreamMultiplexerDirector.streamAborted(int)
public void dataRequest(SystemObject object, DataDescription dataDescription, byte state)
de.bsvrz.dav.daf.main.ClientSenderInterface
dataRequest
in interface ClientSenderInterface
dataRequest
in class QueryTask
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 init()
Initialisiert den Task für eine neue Archivanfrage.
private void analyze() throws NoSuchVersionException, java.io.IOException, PersistenceException, IndexException
Analysiert die aktuelle Archivanfrage und fuellt die Liste der ArchiveQueryTask.Query
.
NoSuchVersionException
java.io.IOException
NoSuchVersionException
java.io.IOException
IndexException
PersistenceException
IndexException
PersistenceException
protected void unsubscribeSender()
Meldet den Task als Sender für Archiv-Antworten an das angegebene Empfaenger-Applikations-Objekt ab. Deregistriert den StreamMultiplexer für den Empfang von Flusskontroll-Steuerungspaketen.
unsubscribeSender
in class QueryTask
private void sendInitialResponse(boolean success, java.lang.String errorMsg) throws java.io.IOException
Sendet die initiale Ergebnismeldung zur Archiv-Anfrage an das Empfaenger-Applikations-Objekt.
success
- Anfrage erfolgreicherrorMsg
- Fehlermeldung bei Misserfolgjava.io.IOException
private void abortQueries()
Markiert alle Unterabfragen als erledigt und schliesst alle noch offenen Datensatz-Iteratoren und Container.
private int getIntervalErrorQueryIdx()
Liefert den Index der Query, bei der die angefragten Intervallgrenzen vertauscht sind.
private void configureMuxParameter()
Bestimmt die Parameter bufferSizeStreamMultiplexer und blockingFactor, mit denen der StreamMultiplexer per Konstruktor parametriert wird, anhand der Werte aus den Archivsystem-Einstellungen und dem tatsaechlich vorhandenen Empfangspuffer des Empfaengers.