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.SendingState
Thread.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, tempMem
resultData, taskMgr
archMgr, didTree, INDEX_MEMORY_SIZE, isTerminated, logger, persMgr, ringOfDeathListener, taskStepListeners
MAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITY
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 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, subscribeSender
doWork, getTaskIndex, run, setTaskIndex
addTaskStepListener, getArchMgr, isTaskTerminated, removeTaskStepListener, suspendTaskIfNecessary, terminateTask
activeCount, 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, yield
private 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()
MultiTask
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()
private void analyze() throws NoSuchVersionException, IOException, PersistenceException, IndexException
ArchiveQueryTask.Query
.protected void unsubscribeSender()
unsubscribeSender
in class QueryTask
private void sendInitialResponse(boolean success, String errorMsg) throws IOException
success
- Anfrage erfolgreicherrorMsg
- Fehlermeldung bei MisserfolgIOException
private void abortQueries()
private int getIntervalErrorQueryIdx()
private void configureMuxParameter()