class Query extends java.lang.Object implements ArchiveDataQueryResult
Diese Klasse stellt alle Methoden zur Verfügung um eine Archivanfrage zu stellen, sie wird der Klasse StreamedArchiveRequester
benutzt.
Modifier and Type | Class and Description |
---|---|
private static class |
Query.DirectorStreamDemultiplexer |
Modifier and Type | Field and Description |
---|---|
private ArchiveQueryID |
_archiveRequestID
Dieses Objekt identifiziert die Archivanfrage eindeutig.
|
private DataStream[] |
_arrayOfStreams
Hier werden alle streams, die zu einer Archivanfrage gehören, gespeichert.
|
private boolean |
_blocking
Solange diese Variable true ist, werden alle Anfragen an die Query blockiert da das Archiv noch nicht geantwortet hat.
|
private int |
_blockingFactor
Bestimmt den blockingFactor des StreamDemultiplexers.
|
private static Debug |
_debug
DebugLogger für Debug-Ausgaben
|
private short |
_defaultSimulationVariant |
private java.lang.String |
_errorMessage
Falls es zu einem Fehler gekommen ist, zu welchem.
|
private int |
_numberOfFinishedStreams
Diese Variable speichert, wie viele Streams bisher beendet wurden, entweder durch empfang des null-Pakets oder durch abort.
|
private int |
_numberOfStreams
Wieviele Streams gehören zu der Archivanfrage.
|
private ArchiveQueryPriority |
_priority |
private int |
_receiveBufferSize
Diese Variable bestimmt die Größe des Empfangspuffers (StreamDemultiplexer).
|
private boolean |
_requestSuccessful
Konnte die Anfrage zum Archiv durchgeführt werden
|
private java.util.List<ArchiveDataSpecification> |
_spec
ArchiveDataSpecification einer Anfrage in einer Liste speichern
|
private StreamDemultiplexer |
_streamDemultiplexer |
(package private) StreamedArchiveRequester |
_streamedArchiveRequester |
Constructor and Description |
---|
Query(ArchiveQueryID archiveRequestID,
ArchiveQueryPriority priority,
ArchiveDataSpecification spec,
int receiveBufferSize,
StreamedArchiveRequester streamedArchiveRequester,
short defaultSimulationVariant)
Archivanfrage mit einem Objekt
|
Query(ArchiveQueryID archiveRequestID,
ArchiveQueryPriority priority,
java.util.List<ArchiveDataSpecification> spec,
int receiveBufferSize,
StreamedArchiveRequester streamedArchiveRequester,
short defaultSimulationVariant) |
Modifier and Type | Method and Description |
---|---|
void |
archiveDataResponse(byte[] data)
Diese Methode verwaltet Nutzdaten, die für eine Archivanfrage empfangen wurden.
|
(package private) void |
countFinishedStream()
Diese Methode wird von einem Objekt der Klasse Query aufgerufen sobald der Stream des Objekts ein null-Paket empfängt oder die Empfängerapplikation abort aufruft.
|
ArchiveQueryID |
getArchiveRequestID()
Die Rückgabe identifiziert eine Archivanfrage.
|
java.lang.String |
getErrorMessage()
Bestimmt eine Fehlernachricht, falls die entsprechende Archivanfrage nicht erfolgreich war.
|
ArchiveDataStream[] |
getStreams()
Diese Methode gibt alle Streams, die zu einer Archivanfrage gehören, zurück.
|
void |
initiateArchiveRequest()
Mit dieser Methode wird die initiale Archivanfrage verschickt.
|
void |
initiateArchiveResponse(byte[] queryResponse)
Diese Methode wird vom StreamedArchivRequester aufgerufen, sobald das Archiv auf die erste Archivanfrage eines Auftrags antwortet.
|
boolean |
isRequestSuccessful()
Diese Methode blockiert solange, bis das Archiv auf die erste Archivanfrage geantwortet hat.
|
(package private) void |
killAllStreams()
Diese Methode benachrichtigt den StreamDemultiplexer, dass ein Fehler aufgetreten ist und das alle Streams beendet werden müssen.
|
void |
lostArchive()
Die Verbindung zum Archive wurde unterbrochen, alle Streams werden abgebrochen und liefern beim Aufruf der Methode
DataStream.take() eine Exception. |
StreamedArchiveRequester _streamedArchiveRequester
private final ArchiveQueryID _archiveRequestID
Dieses Objekt identifiziert die Archivanfrage eindeutig.
private DataStream[] _arrayOfStreams
Hier werden alle streams, die zu einer Archivanfrage gehören, gespeichert. Das Array wird mit null initialisiert, es bekommt erst dann die Streams, sobald das Archiv bereit ist Nutzdaten zu verschicken.
private final ArchiveQueryPriority _priority
private final java.util.List<ArchiveDataSpecification> _spec
ArchiveDataSpecification einer Anfrage in einer Liste speichern
private StreamDemultiplexer _streamDemultiplexer
private final int _numberOfStreams
Wieviele Streams gehören zu der Archivanfrage. Jedes Objekt der Anfrage besitzt einen Stream.
private int _numberOfFinishedStreams
Diese Variable speichert, wie viele Streams bisher beendet wurden, entweder durch empfang des null-Pakets oder durch abort. Ist der Wert der Variablen gleich _numberOfStreams kann die Verbindung zum Archiv beendet werden.
private final int _receiveBufferSize
Diese Variable bestimmt die Größe des Empfangspuffers (StreamDemultiplexer). Die Größe wird in Bytes angegben. Der Wert “0” ist der default Wert. Das bedeutet, dass das Archiv die Größe des Empfangspuffers festlegt. Der Defaultwert ist in der Konfiguration gespeichert und wird dort vom Archiv angefordert. Soll ein anderer Wert benutzt werden, so kann dieser mit StreamedArchiveRequester.setReceiveBufferSize(int)
gesetzt werden, für diese Anfrage ist der Wert allerdings konstant.
private boolean _requestSuccessful
Konnte die Anfrage zum Archiv durchgeführt werden
private java.lang.String _errorMessage
Falls es zu einem Fehler gekommen ist, zu welchem.
private boolean _blocking
Solange diese Variable true ist, werden alle Anfragen an die Query blockiert da das Archiv noch nicht geantwortet hat. Erst wenn das Archiv zum ersten mal eine Nachricht zu der Anfrage geschickt hat, darf weiter gearbeitet werden.
private int _blockingFactor
Bestimmt den blockingFactor des StreamDemultiplexers. Dieser wird vom Archiv gesetzt (ist in der Antwort des Archivs, auf die Archivanfrage, enthalten)
private static final Debug _debug
DebugLogger für Debug-Ausgaben
private final short _defaultSimulationVariant
public Query(ArchiveQueryID archiveRequestID, ArchiveQueryPriority priority, ArchiveDataSpecification spec, int receiveBufferSize, StreamedArchiveRequester streamedArchiveRequester, short defaultSimulationVariant)
Archivanfrage mit einem Objekt
archiveRequestID
- eindeutige Identifizierung der Anfrage, diese wird benötigt um Archivantworten an das Objekt weiterzuleitenpriority
- Priorität der Anfragespec
- ArchivanfragereceiveBufferSize
- Größe des Empfangspuffers (in Byte)streamedArchiveRequester
- Objekt über das Archivanfragen verschickt werden könnendefaultSimulationVariant
- Falls keine Simulationsvariante gesetzt wurde wird dieser Wert als default benutzt.public Query(ArchiveQueryID archiveRequestID, ArchiveQueryPriority priority, java.util.List<ArchiveDataSpecification> spec, int receiveBufferSize, StreamedArchiveRequester streamedArchiveRequester, short defaultSimulationVariant)
archiveRequestID
- eindeutige Identifizierung der Anfrage, diese wird benötigt um Archivantworten an das Objekt weiterzuleitenpriority
- Priorität der Anfragespec
- ArchivanfragereceiveBufferSize
- Größe des Empfangspuffers (in Byte)streamedArchiveRequester
- Objekt über das Archivanfragen verschickt werden könnendefaultSimulationVariant
- Falls keine Simulationsvariante gesetzt wurde wird dieser Wert als default benutzt.public void initiateArchiveRequest()
Mit dieser Methode wird die initiale Archivanfrage verschickt.
public boolean isRequestSuccessful() throws java.lang.InterruptedException
Diese Methode blockiert solange, bis das Archiv auf die erste Archivanfrage geantwortet hat. In der Archivantwort wird dann geklärt, ob das Archiv die geforderten Nutzdaten zur Verfügung stellen kann (falls nicht, warum nicht).
isRequestSuccessful
in interface ArchiveQueryResult
java.lang.InterruptedException
- Falls der aufrufende Thread unterbrochen wurde, während auf die entsprechende Antwortnachricht aus dem Archivsystem gewartet wurde.public java.lang.String getErrorMessage() throws java.lang.InterruptedException
ArchiveQueryResult
Bestimmt eine Fehlernachricht, falls die entsprechende Archivanfrage nicht erfolgreich war.
getErrorMessage
in interface ArchiveQueryResult
java.lang.InterruptedException
- Falls der aufrufende Thread unterbrochen wurde, während auf die entsprechende Antwortnachricht aus dem Archivsystem gewartet wurde.public ArchiveDataStream[] getStreams() throws java.lang.IllegalStateException, java.lang.InterruptedException
Diese Methode gibt alle Streams, die zu einer Archivanfrage gehören, zurück. Die geforderten Archivdaten liegen in den Stream bereit und können mit der entsprechenden Methode angefordert werden.
getStreams
in interface ArchiveDataQueryResult
java.lang.IllegalStateException
- Die Archivanfrage konnte nicht vom Archiv bearbeitet werden, somit durfte diese Methode nicht aufgerufen werdenjava.lang.InterruptedException
- Falls der aufrufende Thread unterbrochen wurde, während auf die entsprechende Antwortnachricht aus dem Archivsystem gewartet wurde.ArchiveRequestManager.request(ArchiveQueryPriority,ArchiveDataSpecification)
,
ArchiveRequestManager.request(ArchiveQueryPriority, java.util.List)
public void initiateArchiveResponse(byte[] queryResponse)
Diese Methode wird vom StreamedArchivRequester aufgerufen, sobald das Archiv auf die erste Archivanfrage eines Auftrags antwortet. Diese Antwort bedeutet, dass die Anfrage bearbeitet werden kann oder das ein Fehler aufgetreten ist.
queryResponse
- Die Antwort des Archivs, die Informationen im byte-Array codiertpublic void archiveDataResponse(byte[] data)
Diese Methode verwaltet Nutzdaten, die für eine Archivanfrage empfangen wurden.
data
- Nutzdaten für eine Archivanfragevoid countFinishedStream()
Diese Methode wird von einem Objekt der Klasse Query aufgerufen sobald der Stream des Objekts ein null-Paket empfängt oder die Empfängerapplikation abort aufruft. Das null-Paket bedeutet, dass das Archiv für diesen Stream keine Archivdaten mehr zur Verfügung hat. Der Aufruf von abort bedeutet, dass die Empfängeraplikation keine Archivdaten für diesen Stream mehr benötigt.
Sobald alle Streams ein null-Paket empfangen haben oder mit abort beendet wurden, wird das Objekt aus der Hashtable entfernt. TBD name schlecht gewählt, da im zweifelsfall die connection abgebaut wird, hier nicht nicht nur gezählt
void killAllStreams()
Diese Methode benachrichtigt den StreamDemultiplexer, dass ein Fehler aufgetreten ist und das alle Streams beendet werden müssen. Jeder aufruf der take-Methode liefert eine entsprechende Exception.
public void lostArchive()
Die Verbindung zum Archive wurde unterbrochen, alle Streams werden abgebrochen und liefern beim Aufruf der Methode DataStream.take()
eine Exception.
public ArchiveQueryID getArchiveRequestID()
Die Rückgabe identifiziert eine Archivanfrage.