|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectde.bsvrz.dav.daf.main.impl.archive.request.StreamedArchiveRequester
public class StreamedArchiveRequester
Die Objekte dieser Klasse verwalten alle Arten von Anfragen an das Archivsystem, gleichzeitig werden auch alle Antworten vom Archivsystem, die für die
Applikation bestimmt sind, entgegen genommen und in entsprechende Objekte umgewandelt (der Datensatz wird von einem Objekt der Klasse StreamedRequestManager
empfangen, aber an den richtigen StreamedArchiveRequester weitergeleitet). Für jede anfragende Applikation wird ein solches Objekt
erzeugt.
Nested Class Summary | |
---|---|
(package private) class |
StreamedArchiveRequester.ClientSender
Diese innerClass implementiert das ClientSenderInterface und wird im StreamedArchiveRequester benötigt um ein ClientDavConnection Objekt zu erzeugen. |
Field Summary | |
---|---|
private SystemObject |
_archiveSystem
Für welches Archivsystem ist dieser Manager. |
private StreamedArchiveRequester.ClientSender |
_clientSender
|
private ClientDavInterface |
_connection
Stellt die Verbindung zum Archiv dar. |
private DataDescription |
_dataDescriptionSender
|
private static Debug |
_debug
DebugLogger für Debug-Ausgaben |
private short |
_defaultSimulationVariant
Falls keine Simulationsvariante gesetzt wird, dann wird dieser default-Wert benutzt. |
private int |
_indexOfRequest
Jede Anfrage erhält einen eigene Index. |
private List<ArchiveAvailabilityListener> |
_listener
Speichert alle Listener, die benachrichtigt werden, wenn das Archivsystem nicht mehr über den DaV zu erreichen ist |
private Byte |
_lockState
Diese Objekt für synchronized() benötigt, es sperrt den Zugriff auf die Variable _state. |
private int |
_receiveBufferSize
Diese Variable bestimmt die Größe des Empfangspuffers (StreamDemultiplexer). |
private Map |
_requests
Hier sind alle Anfragen gespeichert, als Key wird der Index der Anfrage benutzt und das Archiv von dem die Daten angefordert werden. |
private byte |
_state
Diese Variable wird benutzt um zu prüfen ob es einen Abnehmer für Archivanfragen gibt. |
private SubscriptionArchiveOnlineDataManager |
_subscriptionArchiveOnlineDataManager
|
private Date |
_timeOutArchiveRequest
|
Constructor Summary | |
---|---|
StreamedArchiveRequester(ClientDavInterface archiveConnection,
int timeOutArchiveRequest,
SystemObject archiveSystem,
short defaultSimulationVariant)
Dieser Konstruktor erzeugt ein StreamedArchiveRequester Objekt und meldet sich gleichzeitig auf der übergebenen Verbindung als Sender für Anfragen an. |
Method Summary | |
---|---|
void |
addArchiveAvailabilityListener(ArchiveAvailabilityListener listener)
Das übergebene Objekt listener wird benachrichtigt sobald sich die Erreichbarkeit des Archivsystems
über den Datenverteiler ändert. |
private void |
adviseListener()
Diese Methode benachrichtigt alle Listener, dass sich der Verbindungszustand zum Archivsystem geändert hat. |
(package private) void |
archiveDataResponse(Data data)
Diese Methode leitet die Nutzdaten, die für eine bestimmte Archivanfrage gedacht sind, weiter. |
ArchiveQueryResult |
archiveFileSaverAlignment(int volumeIdTypB)
Beauftragt das Archivsystem seine Informationen zu gespeicherten Daten mit einem Speichermedium Typ B ArchiveFileSaver abzugleichen. |
private void |
archiveFileSaverAlignmentResponse(Data data)
|
private void |
connectionLost()
Die Verbindung zum Archiv ist verloren gegangen. |
(package private) void |
createArchivRequestResultData(ArchiveQueryID archiveRequest,
int messageType,
byte[] dataArray)
Diese Methode erzeugt einen Datensatz, der zum Archiv geschickt werden kann. |
void |
dataReceiver(Data data)
Diese Methode analisiert die Daten und ruft die passenden Methoden auf, die die Daten weiter reichen oder verarbeiten um sie dann weiter zu reichen. |
ArchiveQueryResult |
deleteData(List<ArchiveInformationResult> dataDisposedToDelete,
boolean deleteImmediately)
Beauftragt das Archivsystem die angegebenen Zeitbereiche ohne Rücksicht auf den mit ArchiveRequestManager.increaseDeleteTime(java.util.List festgelegten Wert zu löschen. |
private void |
deleteDataResponse(Data data)
|
ArchiveQueryResult |
deleteDataSimulationVariant(short simulationVariant)
Diese Methode beauftragt das Archivsystem alle Daten, die zu einer bestimmten Simulationsvariante gehören, zu löschen. |
private void |
deletePersistentDataResponse(Data data)
Diese Methode wird aufgerufen, wenn eine Antwort auf einen Löschauftrag vorliegt. |
private Query |
getQuery(int indexOfQuery,
SystemObject archiveReference)
Diese Methode liefert zu einem gegebenen Index, der zu einer Archivanfrage gehört, die dazugehörige Archivanfrage. |
ArchiveQueryResult |
increaseDeleteTime(List<ArchiveInformationResult> requiredData,
long timePeriod)
Beauftragt das Archivsystem den Löschzeitpunkt der angegebenen Zeitbereiche zu verlängern. |
private void |
increaseDeleteTimeResponse(Data data)
|
private void |
intitiateArchiveQueryResponse(Data data)
Das Archiv Antwortet auf die gestellt Archivanfrage. |
boolean |
isArchiveAvailable()
Stellt fest ob das Archivsystem über den Datenverteiler derzeit erreichbar ist. |
private boolean |
isConnectionOk(Date timeOut)
Diese Methode prüft, ob gesendet werden darf. |
void |
removeArchiveAvailabilityListener(ArchiveAvailabilityListener listener)
Das Objekt, das mit ArchiveRequestManager.addArchiveAvailabilityListener(de.bsvrz.dav.daf.main.archive.ArchiveAvailabilityListener) übergeben wurde, wird nicht mehr benachrichtigt sobald
sich die Erreichbarkeit des Archivsystems über den Datenverteiler ändert. |
(package private) void |
removeRequest(Object key)
Diese Methode entfernt eine Archivauftrag aus der Hashtable. |
ArchiveDataQueryResult |
request(ArchiveQueryPriority priority,
ArchiveDataSpecification spec)
Diese Methode stellt eine Anfrage an das Archiv. |
ArchiveDataQueryResult |
request(ArchiveQueryPriority priority,
List<ArchiveDataSpecification> specs)
Diese Methode stellt eine Anfrage an das Archiv. |
ArchiveQueryResult |
requestData(Collection<ArchiveInformationResult> requiredData,
Collection<SystemObject> requestedArchives)
Beauftragt das Archivsystem fehlende Daten von anderen Archivsystemen anzufordern und diese dann als "nachgefordert" zu speichern und bei Archivanfragen zur Verfügung zu stellen. |
ArchiveQueryResult |
requestData(long startTime,
long endTime,
Collection<SystemObject> requestedArchives)
Beauftragt das Archivsystem fehlende Daten von anderen Archivsystemen anzufordern und diese dann als "nachgefordert" zu speichern und bei Archivanfragen zur Verfügung zu stellen. |
private void |
requestDataResponse(Data data)
Diese Methode wird aufgerufen, wenn eine Antwort auf einen Auftrag zum initierten Nachfordern von Daten vorliegt. |
ArchiveInfoQueryResult |
requestInfo(ArchiveDataSpecification spec)
Start einer Archivinformationsanfrage an das Archivsystem. |
ArchiveInfoQueryResult |
requestInfo(List<ArchiveDataSpecification> specs)
Start einer Archivinformationsanfrage an das Archivsystem. |
private void |
requestInfoResponse(Data data)
Diese Methode wird aufgerufen, wenn eine Antwort auf eine Archiveinformationsanfrage vorliegt. |
private void |
restoreDataResponse(Data data)
|
ArchiveQueryResult |
restorePersistentData(List<ArchiveInformationResult> requiredData)
Diese Methode beauftragt das Archivsystem bestimmten Daten, die sich nicht im direkten Zugriff befinden, von der Sicherung wieder in den direkten Zugriff des Archivsystems zu bringen. |
ArchiveQueryResult |
savePersistentData()
Beauftragt das Archivsystem Archivdaten der Sicherung ArchiveFileSaver zu übergeben. |
private void |
savePersistentDataResponse(Data data)
Diese Methode wird aufgerufen, wenn eine Antwort auf einen Speicherauftrag vorliegt. |
(package private) void |
sendTicketToArchive(ArchiveQueryID archiveRequest,
byte[] ticket)
Diese Klasse wird von der Implementation des StreamDemultixplexerDirector benötigt. |
void |
setReceiveBufferSize(int numberOfBytes)
Die Puffergröße (in Byte) des Empfängers auf einen anderen Wert als den default Wert setzen. |
void |
subscribeReceiver(DatasetReceiverInterface receiver,
SystemObject object,
DataDescription dataDescription,
ReceiveOptions options,
HistoryTypeParameter historyType,
long history)
Die Implementation dieser Methode meldet sich als Empfänger von aktuellen Daten an. |
private void |
subscribeSender()
Diese Methode meldet die Archivapplikation als Sender von Archivanfragen/Tickets/Archivaufgaben an. |
void |
unsubscribeReceiver(DatasetReceiverInterface receiver,
SystemObject object,
DataDescription dataDescription)
Die Implementation dieser Methode meldet einen Empfänger ab, der mit der Methode ArchiveRequestManager.subscribeReceiver(de.bsvrz.dav.daf.main.archive.DatasetReceiverInterface, de.bsvrz.dav.daf.main.config.SystemObject, de.bsvrz.dav.daf.main.DataDescription, de.bsvrz.dav.daf.main.ReceiveOptions, de.bsvrz.dav.daf.main.archive.HistoryTypeParameter, long) angemeldet wurde. |
private void |
unsubscribeSender()
Diese Methode meldet den StreamedArchiveRequester als Sender von Archivanfragen/Tickets ab. |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
private final ClientDavInterface _connection
private byte _state
private final Byte _lockState
synchronized()
benötigt, es sperrt den Zugriff auf die Variable _state.
private int _indexOfRequest
private final Map _requests
private int _receiveBufferSize
setReceiveBufferSize(int)
gesetzt werden.
private final SystemObject _archiveSystem
private final Date _timeOutArchiveRequest
private static Debug _debug
private StreamedArchiveRequester.ClientSender _clientSender
private DataDescription _dataDescriptionSender
private final short _defaultSimulationVariant
private final SubscriptionArchiveOnlineDataManager _subscriptionArchiveOnlineDataManager
private final List<ArchiveAvailabilityListener> _listener
Constructor Detail |
---|
public StreamedArchiveRequester(ClientDavInterface archiveConnection, int timeOutArchiveRequest, SystemObject archiveSystem, short defaultSimulationVariant)
archiveConnection
- Eine Verbindung auf der Datensätze verschickt werden sollenarchiveSystem
- Das Archiv, für das die Datensätze bestimmt sindMethod Detail |
---|
public ArchiveDataQueryResult request(ArchiveQueryPriority priority, List<ArchiveDataSpecification> specs) throws IllegalStateException
request
in interface ArchiveRequestManager
priority
- Mit welcher Priorität soll die Anfrage beantwortet werden (hohe, mittlere, niedrige Priorität)specs
- Eine Liste von Objekten, die alle Informationen enthalten, die zur Bearbeitung der Archivanfrage nötig sind. Für jedes Objekt der Liste wird
ein Stream bereitgestellt, der die geforderten Informationen enthält.Wird eine leere Liste übergeben, wird das Objekt, das die Antwort auf
diese Anfrage enthält, ein Array mit Streams zurückgegbene, das ebenfalls leer ist.
specs
leer, ist das Array, das die Streams
darstellt, ebenfalls leer.
IllegalStateException
- Das Archiv, an das die Anfrage gestellt wurde, kann nicht erreicht werden, die Anfrage wird verworfen.public ArchiveDataQueryResult request(ArchiveQueryPriority priority, ArchiveDataSpecification spec) throws IllegalStateException
request
in interface ArchiveRequestManager
priority
- Mit welcher Priorität soll die Anfrage beantwortet werden (hohe, mittlere, niedrige Priorität)spec
- Ein Objekt, das alle Informationen enthält, die zur Bearbeitung der Archivanfrage nötig sind.
IllegalStateException
- Das Archiv, an das die Anfrage gestellt wurde, kann nicht erreicht werden, die Anfrage wird verworfen.public void setReceiveBufferSize(int numberOfBytes)
setReceiveBufferSize
in interface ArchiveRequestManager
numberOfBytes
- private Query getQuery(int indexOfQuery, SystemObject archiveReference)
int
identifiziert. Dieses
int wird dann intern in ein Integer
umgewandelt.
indexOfQuery
- Index der ArchivanfragearchiveReference
- Von welchem Archiv kommt die Antwort
void removeRequest(Object key)
key
- key, der zu einem Archivauftrag (delete, restore, save, Archivinformationsanfrage, Archivanfrage) gehört, der entfernt werden sollpublic void dataReceiver(Data data)
data
- Datensatz eines Archivsprivate void intitiateArchiveQueryResponse(Data data)
data
- Datensatzvoid sendTicketToArchive(ArchiveQueryID archiveRequest, byte[] ticket) throws DataNotSubscribedException, SendSubscriptionNotConfirmed
archiveRequest
- Mit diesem Objekt kann die Archivanfrage eindeutig identifiziert werdenticket
- Ein byte-Array, das kodiert das Ticket für den StreamMultiplexer der Senderapplikation enthält
DataNotSubscribedException
- Es sollen Daten ohne Anmeldung auf die Daten verschickt werden
SendSubscriptionNotConfirmed
- Es liegt keine positive Sendesteuerung vom Datenverteiler für die zu versendenden Daten vorvoid archiveDataResponse(Data data)
data
- Nutzdaten, die vom Archiv geschickt wurdenvoid createArchivRequestResultData(ArchiveQueryID archiveRequest, int messageType, byte[] dataArray) throws DataNotSubscribedException, SendSubscriptionNotConfirmed, IllegalStateException
archiveRequest
- Ein Object, das den Index der Anfrage und eine Referenz auf die anfragende Applikation enthältmessageType
- Von welchem Typ ist das PaketdataArray
- Hier können zusätzliche Daten codiert werden
DataNotSubscribedException
- Senden von Datensätzen ohne entsprechende Sendeanmeldung
SendSubscriptionNotConfirmed
- Es liegt keine positive Sendesteuerung vom Datenverteiler für die zu versendenden Daten vor
IllegalStateException
- Die Verbindng zum Archive wurde abgebrochen, gleichzeitig wird versucht Datenpakete an das Archiv zu verschickenprivate void connectionLost()
private boolean isConnectionOk(Date timeOut) throws InterruptedException
timeOut
- Zeitpunkt, bis zu dem gewartet wird, um eine Verbindung aufzubauen
InterruptedException
private void unsubscribeSender()
private void subscribeSender()
public ArchiveInfoQueryResult requestInfo(ArchiveDataSpecification spec)
requestInfo
in interface ArchiveRequestManager
spec
- Spezifikation der Archivdaten zu denen Information gewünscht werden.
public void subscribeReceiver(DatasetReceiverInterface receiver, SystemObject object, DataDescription dataDescription, ReceiveOptions options, HistoryTypeParameter historyType, long history)
ArchiveRequestManager
subscribeReceiver
in interface ArchiveRequestManager
receiver
- Objekt, das Methoden zur Verfügung stellt um den Strom aus historischen und aktuellen Daten
entgegen zu nehmenobject
- System-Objekt für die die spezifizierten Daten anzumelden sinddataDescription
- Beschreibende Informationen zu den anzumeldenden Datenoptions
- Für die Anmeldung zu verwendende OptionenhistoryType
- HistoryTypeParameter.TIME
= Der Parameter history
bezieht sich auf
einen Zeitraum, der vor den aktuellen Daten liegen soll (in ms);
HistoryTypeParameter.INDEX
= Der Parameter history
bezieht sich auf
die Anzahl Datensätze, die mindestens vor den aktuellen Daten liegen sollenhistory
- Zeitraum der Archivdaten in Millisekunden, die vor den ersten aktuellen Datensätzen liegenpublic void unsubscribeReceiver(DatasetReceiverInterface receiver, SystemObject object, DataDescription dataDescription)
ArchiveRequestManager
ArchiveRequestManager.subscribeReceiver(de.bsvrz.dav.daf.main.archive.DatasetReceiverInterface, de.bsvrz.dav.daf.main.config.SystemObject, de.bsvrz.dav.daf.main.DataDescription, de.bsvrz.dav.daf.main.ReceiveOptions, de.bsvrz.dav.daf.main.archive.HistoryTypeParameter, long)
angemeldet wurde.
unsubscribeReceiver
in interface ArchiveRequestManager
object
- System-Objekt für die die spezifizierten Daten angemeldet wurdendataDescription
- Beschreibende Informationen zu den angemeldeten Datenpublic ArchiveInfoQueryResult requestInfo(List<ArchiveDataSpecification> specs)
requestInfo
in interface ArchiveRequestManager
specs
- Liste mit Spezifikationen der Archivdaten zu denen Information gewünscht werden
private void requestInfoResponse(Data data)
data
- Archivantwort auf einen Archivinformationsanfragepublic ArchiveQueryResult savePersistentData()
ArchiveRequestManager
ArchiveFileSaver
zu übergeben.
Eine Applikation ruft diese Methode auf, um alle Archivdaten, die gesichert werden können, zu sichern. Eine
Implementierung dieser Methode sollte ohne zu blockieren ein Objekt zurückliefern über das asynchron auf das
Ergebnis der Anfrage zugegriffen werden kann.
savePersistentData
in interface ArchiveRequestManager
private void savePersistentDataResponse(Data data)
data
- Archivantwort auf Speicherauftragpublic ArchiveQueryResult requestData(Collection<ArchiveInformationResult> requiredData, Collection<SystemObject> requestedArchives)
ArchiveRequestManager
requestData
in interface ArchiveRequestManager
requiredData
- Datenidentifikation(en), die nachgefordert werden sollen. Jede Datenidentifikation
speichert zusätlich den Zeitbereich, in dem Daten zu dieser Datenidentifikation angefordert
werden soll. Es muss mindestens eine Datenidentifikation vorhanden sein.requestedArchives
- Archivsystem(e), bei denen Daten angefordert werden. Ist diese Liste leer werden alle
Archivsystem angefragt, die beim automatischen Nachfordern angefragt werden.
public ArchiveQueryResult requestData(long startTime, long endTime, Collection<SystemObject> requestedArchives)
ArchiveRequestManager
requestData
in interface ArchiveRequestManager
startTime
- Startzeitpunkt, ab dem Daten nachgefordert werdenendTime
- Endzeitpunkt, bis zu dem Daten nachgefordert werdenrequestedArchives
- Archivsysteme die angefragt werden. Ist die Liste leer werden alle Archivsysteme angefragt,
die beim automatischen Nachfordern angefragt werden
private void requestDataResponse(Data data)
data
- Antwort auf den Auftrag zum nachfordern von Datenpublic ArchiveQueryResult restorePersistentData(List<ArchiveInformationResult> requiredData)
restorePersistentData
in interface ArchiveRequestManager
requiredData
- Zeitbereiche, die wieder in den direkten Zugriff des Archivsystems gebracht werden sollen
private void restoreDataResponse(Data data)
public ArchiveQueryResult deleteDataSimulationVariant(short simulationVariant)
deleteDataSimulationVariant
in interface ArchiveRequestManager
simulationVariant
- Simulationsvariante von der alle Daten aus dem Archivsystem entfernt werden sollen
private void deletePersistentDataResponse(Data data)
data
- Archivantwort auf Speicherauftragpublic ArchiveQueryResult increaseDeleteTime(List<ArchiveInformationResult> requiredData, long timePeriod)
ArchiveRequestManager
increaseDeleteTime
in interface ArchiveRequestManager
requiredData
- Zeitbereiche, die länger im direkten Zugriff des Archivsystems bleiben sollentimePeriod
- Zeitspanne, die die ausgewählten Daten länger im direkten Zugriff des Archivsystem bleiben
sollen (in ms)
private void increaseDeleteTimeResponse(Data data)
public ArchiveQueryResult deleteData(List<ArchiveInformationResult> dataDisposedToDelete, boolean deleteImmediately)
ArchiveRequestManager
ArchiveRequestManager.increaseDeleteTime(java.util.List, long)
festgelegten Wert zu löschen. Das Löschen der Zeitbereiche wird dabei in
zwei Varianten unterteilt. In der ersten Variante werden die Zeitbereiche umgehend aus dem direkten Zugriff des
Archivsystems entfernt. In der zweiten Variante werden die Zeitbereiche nur als "zu löschend" markiert, sobald das
"automatische Löschen" des Archivsystems angstoßen wird (dies geschieht zyklisch), werden die Zeitbereiche
entfernt.
Bei allen Löschoperationen, die durch diesen Methodenaufruf ausgelöst werden, muss darauf geachtete werden, dass der
Vorhaltezeitraum der Zeitbereiche abgelaufen sein muss und das die Zeitbereiche gesichert wurden, falls diese
gesichert werden sollten. Wird gegen eine diese Forderungen verstossen, wird der angegebene Zeitbereich nicht
gelöscht.
deleteData
in interface ArchiveRequestManager
dataDisposedToDelete
- Zeitbereich(e), die gelöscht werden sollendeleteImmediately
- true = Variante 1, die Zeitbereiche werden umgehend aus dem direkten Zugriff des
Archivsystems entfernt; false = Variante 2, die Zeitbereiche werden nur als "zu
löschend" markiert und später aus dem direkten Zugriff des Archivsystems entfernt
private void deleteDataResponse(Data data)
public ArchiveQueryResult archiveFileSaverAlignment(int volumeIdTypB)
ArchiveRequestManager
ArchiveFileSaver
abzugleichen. Dies kann nötig werden, wenn die eindeutigen Identifizierungen
der Speichermedien von Typ B durch die Sicherung geändert wurden (Beispiel: Die Daten wurden vorher auf CD
gespeichert, nun werden die Daten auf DVD gespeichert und die alten Datenbestände auf DVD umkopiert, somit fallen
mehrere CD´s auf eine DVD und die eindeutigen Identifizierungen der CD´s sind nutzlos. Die eindeutigen
Identifizierungen der CD´s wurde aber vom Archivsystem gespeichert und müssen folglich abgeglichen werden).
archiveFileSaverAlignment
in interface ArchiveRequestManager
volumeIdTypB
- Eindeutige Identifikation eines Speichermediums Typ B
public boolean isArchiveAvailable()
ArchiveRequestManager
isArchiveAvailable
in interface ArchiveRequestManager
public void addArchiveAvailabilityListener(ArchiveAvailabilityListener listener)
ArchiveRequestManager
listener
wird benachrichtigt sobald sich die Erreichbarkeit des Archivsystems
über den Datenverteiler ändert.
addArchiveAvailabilityListener
in interface ArchiveRequestManager
listener
- Objekt, das benutzt wird um Änderungen der Erreichbarkeit des Archivsystems über den Datenverteiler
anzuzeigenpublic void removeArchiveAvailabilityListener(ArchiveAvailabilityListener listener)
ArchiveRequestManager
ArchiveRequestManager.addArchiveAvailabilityListener(de.bsvrz.dav.daf.main.archive.ArchiveAvailabilityListener)
übergeben wurde, wird nicht mehr benachrichtigt sobald
sich die Erreichbarkeit des Archivsystems über den Datenverteiler ändert.
removeArchiveAvailabilityListener
in interface ArchiveRequestManager
listener
- Objekt, das nicht mehr benachrichtigt werden soll, wenn sich die Erreichbarkeit des Archivsystems
über den Datenverteiler ändertprivate void adviseListener()
private void archiveFileSaverAlignmentResponse(Data data)
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |