public class ArchiveQueryTask extends QueryTask implements StreamMultiplexerDirector
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
Ergebnisdatensaetze enthalten.
|
private class |
ArchiveQueryTask.Info |
private class |
ArchiveQueryTask.Query
Klasse, die eine einzelne Unterabfrage (
ArchiveDataSpecification) aus der Archivanfrage und die zugehoerigen Daten fuer die Archivantwort kapselt. |
private class |
ArchiveQueryTask.SimpleArchiveData
Klasse, die einen Archivdatensatz mit den zugehoerigen Zeitstempeln und Datenindex kapselt.
|
QueryTask.SendingStateThread.State, Thread.UncaughtExceptionHandler| 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 Groesse des Empfaengerpuffers.
|
private static int |
BUFFER_SIZE_MUX_DEFAULT
Default-Groesse des Puffers im Stream-Multiplexer.
|
private static int |
bufferSizeMuxParam
Parametrierte Groesse des Puffers im Stream-Multiplexer.
|
private int |
bufferSizeMuxUsed
Tatsaechlich benutzte Groesse des Puffers im Stream-Multiplexer, angepasst an die Groesse des Empfaengerpuffers.
|
private 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-Datensaetze.
|
private List<ArchiveQueryTask.Query> |
queries
Liste der einzelnen Unterabfragen aus der aktuellen Archivanfrage.
|
private int |
receiverBufferSize
Groesse 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, tempMemresultData, taskMgrarchMgr, didTree, INDEX_MEMORY_SIZE, isTerminated, logger, persMgr, ringOfDeathListener, taskStepListenersMAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITYSTART_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 fuer 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,
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 Puffergroesse 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 fuer 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, subscribeSenderdoWork, getTaskIndex, run, setTaskIndexaddTaskStepListener, getArchMgr, isTaskTerminated, removeTaskStepListener, suspendTaskIfNecessary, terminateTaskactiveCount, checkAccess, clone, countStackFrames, currentThread, destroy, dumpStack, enumerate, getAllStackTraces, getContextClassLoader, getDefaultUncaughtExceptionHandler, getId, getName, getPriority, getStackTrace, getState, getThreadGroup, getUncaughtExceptionHandler, holdsLock, interrupt, interrupted, isAlive, isDaemon, isInterrupted, join, join, join, resume, setContextClassLoader, setDaemon, setDefaultUncaughtExceptionHandler, setName, setPriority, setUncaughtExceptionHandler, sleep, sleep, start, stop, stop, suspend, toString, yieldprivate static final int BLOCKING_FACTOR_MUX_DEFAULT
private static int blockingFactorMuxParam
private int blockingFactorMuxUsed
private static final int BUFFER_SIZE_MUX_DEFAULT
private static int bufferSizeMuxParam
private int bufferSizeMuxUsed
private StreamMultiplexer mux
private FlowControlTask flowCtrl
private List<ArchiveQueryTask.Query> queries
private int receiverBufferSize
private boolean initialResponseSent
private Inflater decompresser
private int _maximumRequestsPerApplication
public ArchiveQueryTask(ArchiveManager archiveMgr, MultiTaskManager tMgr, FlowControlTask flowCtrl)
archiveMgr - Archiv-VerwaltungtMgr - Zugeordneter Task-ManagerflowCtrl - Verwaltung der Flusskontrollepublic static void subscribeObjects(ArchiveManager archMgr, InQueuesMgr.DataReceiver receiver)
archMgr - Archiv-Verwaltungreceiver - Empfaengerobjektpublic static void setBlockingFactorMux(int bFMuxParam)
bFMuxParam - Parametrierter Blocking-Faktor des StreamMultiplexerspublic static void setBufferSizeMux(int bSMuxParam)
bSMuxParam - Parametrierte Puffergroesse des StreamMultiplexerspublic static int getBlockingFactorMux()
setBlockingFactorMux(int)public static int getBufferSizeMux()
setBlockingFactorMux(int)public int getMaximumRequestsPerApplication()
public void setMaximumRequestsPerApplication(int maximumRequestsPerApplication)
maximumRequestsPerApplication - neuer Wert ( > 0 )public void work()
MultiTaskwork in class MultiTaskMultiTask.work()public void sendData(byte[] streamDataPacket)
de.bsvrz.sys.funclib.communicationStreams.StreamMultiplexerDirectorStreamDemultiplexer.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 StreamMultiplexerDirectorstreamDataPacket - Ein Nutzdatenpaket vom StreamMultiplexer zum StreamDemultiplexerStreamMultiplexerDirector.sendData(byte[])public byte[] take(int indexOfStream)
de.bsvrz.sys.funclib.communicationStreams.StreamMultiplexerDirectorStreamDemultiplexer.take(int) bereit gestellt
wird.take in interface StreamMultiplexerDirectorindexOfStream - Stream über den die Nutzdaten übertragen werden sollennull zurück
gegeben.StreamMultiplexerDirector.take(int)public void streamAborted(int indexOfStream)
de.bsvrz.sys.funclib.communicationStreams.StreamMultiplexerDirectorstreamAborted in interface StreamMultiplexerDirectorindexOfStream - 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.ClientSenderInterfacedataRequest in interface ClientSenderInterfacedataRequest in class QueryTaskobject - 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()
private void analyze()
throws NoSuchVersionException,
IOException,
PersistenceException,
IndexException
ArchiveQueryTask.Query.protected void unsubscribeSender()
unsubscribeSender in class QueryTaskprivate void sendInitialResponse(boolean success,
String errorMsg)
throws IOException
success - Anfrage erfolgreicherrorMsg - Fehlermeldung bei MisserfolgIOExceptionprivate void abortQueries()
private int getIntervalErrorQueryIdx()
private void configureMuxParameter()