Class ArchiveManager
- All Implemented Interfaces:
de.bsvrz.dav.daf.main.ApplicationCloseActionHandler
public class ArchiveManager
extends de.bsvrz.sys.funclib.losb.DAVAppBase
-
Nested Class Summary
Nested classes/interfaces inherited from class de.bsvrz.sys.funclib.losb.DAVAppBase
de.bsvrz.sys.funclib.losb.DAVAppBase.DisconnectHandler
-
Field Summary
Fields Modifier and Type Field Description static long
DATAINDEX_OFFSET
static boolean
ONLY_DATA
Nur für Testzwecke; falls wahr, werden nur Datensätze mit Daten archiviert.static java.lang.String
P_CHECK_PERS_DIR_ALL
static java.lang.String
P_CHECK_PERS_DIR_DIR
static java.lang.String
P_CHECK_PERS_DIR_HDR
static java.lang.String
P_REMOTE_CONTROL_DEFAULT
static java.lang.String
P_REMOTE_CONTROL_NORC
Fields inherited from class de.bsvrz.sys.funclib.losb.DAVAppBase
applicationLabel, applicationName, argList, logger
-
Constructor Summary
Constructors Constructor Description ArchiveManager(java.lang.String[] args)
-
Method Summary
Modifier and Type Method Description void
archiveIsReady()
Wird von ArchiveConfig ausgeführt, wenn alle Daten initial angemeldet wurden.static long
archiveTime()
void
connectToDavQuit()
int
decreaseArchiveQueryCountForApplication(de.bsvrz.dav.daf.main.config.SystemObject application)
ArchivConfig
getArchivConfig()
de.bsvrz.dav.daf.main.config.ConfigurationObject
getArchiveObject()
Gibt das Archiv-Objekt vom Typ typ.archiv zurückint
getArchiveQueryCountForApplication(de.bsvrz.dav.daf.main.config.SystemObject application)
DataIdentTree
getDataIdentTree()
de.bsvrz.dav.daf.main.config.DataModel
getDataModel()
long
getIndexCacheMaxCount()
int
getIndexCacheMaxSize()
InQueuesMgr
getInQueuesMgr()
int
getMaximumQueriesPerApplication()
int
getNumBackupThreads()
Anzahl Threads fürs Sichernint
getNumCheckPersistenceThreads()
Anzahl Threads für Persistenz-Prüfung und Wiederherstellungint
getNumCloseIndexThreads()
Anzahl Threads fürs Index-Schließen beim Beendenint
getNumDeleteThreads()
Anzahl Threads fürs Löschenint
getNumOfArchQueuesOnline()
Anzahl Online-Archivqueues/Bufferjava.util.List<java.lang.String>
getOriginalCommandLineArguments()
PersistenceManager
getPersMgr()
SimulationManager
getSimulationMgr()
TaskScheduler
getTaskScheduler()
int
increaseArchiveQueryCountForApplication(de.bsvrz.dav.daf.main.config.SystemObject application)
boolean
isUsingDynamicDeletionTime()
SyncKey<IdDataIdentification>
lockIndex(IdDataIdentification dataIdentification)
Muss immer vor Zugriffen auf den kritischen Bereich (die Indexe oder Container) der Datenidentifikation aufgerufen werden.SyncKey<IdDataIdentification>
lockIndex(IdDataIdentification dataIdentification, java.time.Duration timeout)
Muss immer vor Zugriffen auf den kritischen Bereich (die Indexe oder Container) der Datenidentifikation aufgerufen werden.static void
main(java.lang.String[] args)
Startpunkt des Archivsystems.void
quit()
Faehrt das ArS herunter und beendet die VM.void
quitError(java.lang.String msg)
Faehrt das ArS mit einer Fehlermeldung herunter und beendet die VM.void
quitErrorNoExit(java.lang.String msg)
Faehrt das ArS mit einer Fehlermeldung herunter.void
quitNoExit()
Faehrt das ArS herunter ohne die VM zu beenden (dies ist bei Fernsteuerung des ArS aus JUnit-Tests notwendig).void
run()
void
setIndexCacheMaxCount(long indexCacheMaxCount)
void
setIndexCacheMaxSize(int indexCacheMaxSize)
static void
setSystemTimeOffset(long offsetSeconds)
Verstellt die Systemzeit um offset Sekunden.boolean
wasTerminated()
Methods inherited from class de.bsvrz.sys.funclib.losb.DAVAppBase
close, connectToDav, disconnectFromDav, enableExplicitApplicationReadyMessage, getAsp, getAsp, getAtg, getAtg, getConfigAuth, getDavCon, getDD, getObj, getObj, isExplicitApplicationReadyMessage, reconnectHandler, setDisconnectHandler
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Field Details
-
DATAINDEX_OFFSET
public static long DATAINDEX_OFFSET -
ONLY_DATA
public static boolean ONLY_DATANur für Testzwecke; falls wahr, werden nur Datensätze mit Daten archiviert. Es gibt dann keine Datensätze folgender Art: "keine Quelle", "keine Daten", "pot. Datenlücke". Manche Testverfahren werden einfacher, wenn ausschliesslich Datensätze archiviert werden, die auch gesendet wurden. -
P_CHECK_PERS_DIR_DIR
public static final java.lang.String P_CHECK_PERS_DIR_DIR- See Also:
- Constant Field Values
-
P_CHECK_PERS_DIR_HDR
public static final java.lang.String P_CHECK_PERS_DIR_HDR- See Also:
- Constant Field Values
-
P_CHECK_PERS_DIR_ALL
public static final java.lang.String P_CHECK_PERS_DIR_ALL- See Also:
- Constant Field Values
-
P_REMOTE_CONTROL_NORC
public static final java.lang.String P_REMOTE_CONTROL_NORC- See Also:
- Constant Field Values
-
P_REMOTE_CONTROL_DEFAULT
public static final java.lang.String P_REMOTE_CONTROL_DEFAULT- See Also:
- Constant Field Values
-
-
Constructor Details
-
ArchiveManager
public ArchiveManager(java.lang.String[] args) throws java.lang.Exception- Throws:
java.lang.Exception
-
-
Method Details
-
getArchiveObject
public final de.bsvrz.dav.daf.main.config.ConfigurationObject getArchiveObject()Gibt das Archiv-Objekt vom Typ typ.archiv zurück- Returns:
- das Archiv-Objekt
-
getDataModel
@Nullable public de.bsvrz.dav.daf.main.config.DataModel getDataModel()- Overrides:
getDataModel
in classde.bsvrz.sys.funclib.losb.DAVAppBase
-
wasTerminated
public boolean wasTerminated() -
archiveTime
public static long archiveTime()- Returns:
- aktuelle Systemzeit (die zu Testzwecken mit einem Offset versehen werden kann)
-
setSystemTimeOffset
public static void setSystemTimeOffset(long offsetSeconds)Verstellt die Systemzeit um offset Sekunden. NUR FÜR TESTZWECKE!!!- Parameters:
offsetSeconds
- Spanne in Sekunden
-
run
public void run() throws java.lang.Exception- Throws:
java.lang.Exception
-
connectToDavQuit
public void connectToDavQuit() -
quit
public void quit()Faehrt das ArS herunter und beendet die VM. -
quitNoExit
public void quitNoExit()Faehrt das ArS herunter ohne die VM zu beenden (dies ist bei Fernsteuerung des ArS aus JUnit-Tests notwendig). -
quitError
public void quitError(java.lang.String msg)Faehrt das ArS mit einer Fehlermeldung herunter und beendet die VM. -
quitErrorNoExit
public void quitErrorNoExit(java.lang.String msg)Faehrt das ArS mit einer Fehlermeldung herunter. -
main
public static void main(java.lang.String[] args)Startpunkt des Archivsystems.- Parameters:
args
- Kommandozeilenparameter
-
getArchivConfig
-
getDataIdentTree
-
getInQueuesMgr
-
getPersMgr
-
getTaskScheduler
-
getSimulationMgr
- Returns:
- Liefert den SimulationsManager.
-
getMaximumQueriesPerApplication
public int getMaximumQueriesPerApplication() -
getOriginalCommandLineArguments
public java.util.List<java.lang.String> getOriginalCommandLineArguments()- Returns:
- Liefert die original Command Line Argumente als unmodifiableList von String Objekten.
-
increaseArchiveQueryCountForApplication
public int increaseArchiveQueryCountForApplication(de.bsvrz.dav.daf.main.config.SystemObject application) -
decreaseArchiveQueryCountForApplication
public int decreaseArchiveQueryCountForApplication(de.bsvrz.dav.daf.main.config.SystemObject application) -
getArchiveQueryCountForApplication
public int getArchiveQueryCountForApplication(de.bsvrz.dav.daf.main.config.SystemObject application) -
getNumCloseIndexThreads
public int getNumCloseIndexThreads()Anzahl Threads fürs Index-Schließen beim Beenden- Returns:
- Vom Benutzer vorgegebener Wert
-
getNumCheckPersistenceThreads
public int getNumCheckPersistenceThreads()Anzahl Threads für Persistenz-Prüfung und Wiederherstellung- Returns:
- Vom Benutzer vorgegebener Wert
-
getNumOfArchQueuesOnline
public int getNumOfArchQueuesOnline()Anzahl Online-Archivqueues/Buffer- Returns:
- Vom Benutzer vorgegebener Wert
-
getNumDeleteThreads
public int getNumDeleteThreads()Anzahl Threads fürs Löschen- Returns:
- Vom Benutzer vorgegebener Wert
-
getNumBackupThreads
public int getNumBackupThreads()Anzahl Threads fürs Sichern- Returns:
- Vom Benutzer vorgegebener Wert
-
archiveIsReady
public void archiveIsReady()Wird von ArchiveConfig ausgeführt, wenn alle Daten initial angemeldet wurden. -
getIndexCacheMaxCount
public long getIndexCacheMaxCount() -
setIndexCacheMaxCount
public void setIndexCacheMaxCount(long indexCacheMaxCount) -
getIndexCacheMaxSize
public int getIndexCacheMaxSize() -
setIndexCacheMaxSize
public void setIndexCacheMaxSize(int indexCacheMaxSize) -
isUsingDynamicDeletionTime
public boolean isUsingDynamicDeletionTime() -
lockIndex
public SyncKey<IdDataIdentification> lockIndex(IdDataIdentification dataIdentification) throws SynchronizationFailedExceptionMuss immer vor Zugriffen auf den kritischen Bereich (die Indexe oder Container) der Datenidentifikation aufgerufen werden.Wenn ein anderer Task sich im kritischen Bereich befindet, blockiert diese Methode bis der kritische Bereich wieder frei ist.
Da der Index-Bereich möglicherweise von vielen Tasks benutzt wird und auch Zugriffe beim Archivieren von Daten erfolgen sollte der Bereich so schnell wie möglich wieder verlassen werden. Es ist zwingend erforderlich, das zurückgegebene Lock-Objekt nach Benutzung zu schließen, sonst können andere Threads blockiert werden.
Beispiel-Code:
try(SyncKey<IdDataIdentification> lock = archMgr.lockIndex(din.getDataIdentification())) { // Tue was mit den Indexen }
Das zurückgegebene
SyncKey
-Objekt verhält sich wie einReentrantLock
, es ist also möglich, ein zweites Lock zu erhalten wenn bereits ein Lock geholt wurde.Dieser Funktionsaufruf ist äquivalent zu
getPersMgr().lockIndex(...);
.- Parameters:
dataIdentification
- Datenidentifikation- Returns:
- Lock
- Throws:
SynchronizationFailedException
- Synchronisierung ist fehlgeschlagen (Unterbrochen beim Warten)
-
lockIndex
public SyncKey<IdDataIdentification> lockIndex(IdDataIdentification dataIdentification, java.time.Duration timeout) throws SynchronizationFailedExceptionMuss immer vor Zugriffen auf den kritischen Bereich (die Indexe oder Container) der Datenidentifikation aufgerufen werden.Wenn ein anderer Task sich im kritischen Bereich befindet, blockiert diese Methode bis der kritische Bereich wieder frei ist.
Da der Index-Bereich möglicherweise von vielen Tasks benutzt wird und auch Zugriffe beim Archivieren von Daten erfolgen sollte der Bereich so schnell wie möglich wieder verlassen werden. Es ist zwingend erforderlich, das zurückgegebene Lock-Objekt nach Benutzung zu schließen, sonst können andere Threads blockiert werden.
Beispiel-Code:
try(SyncKey<IdDataIdentification> lock = archMgr.lockIndex(din.getDataIdentification())) { // Tue was mit den Indexen }
Das zurückgegebene
SyncKey
-Objekt verhält sich wie einReentrantLock
, es ist also möglich, ein zweites Lock zu erhalten wenn bereits ein Lock geholt wurde.Dieser Funktionsaufruf ist äquivalent zu
getPersMgr().lockIndex(...);
.- Parameters:
dataIdentification
- Datenidentifikationtimeout
- Maximale Wartezeit- Returns:
- Lock
- Throws:
SynchronizationFailedException
- Synchronisierung ist fehlgeschlagen (Timeout oder Unterbrochen beim Warten)
-