Class ArchiveManager

java.lang.Object
de.bsvrz.sys.funclib.losb.DAVAppBase
de.bsvrz.ars.ars.mgmt.ArchiveManager
All Implemented Interfaces:
de.bsvrz.dav.daf.main.ApplicationCloseActionHandler

public class ArchiveManager
extends de.bsvrz.sys.funclib.losb.DAVAppBase
Zentrale Archiv-Verwaltung.
  • Field Details

    • DATAINDEX_OFFSET

      public static long DATAINDEX_OFFSET
    • ONLY_DATA

      public static boolean ONLY_DATA
      Nur 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 class de.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

      public ArchivConfig getArchivConfig()
    • getDataIdentTree

      public DataIdentTree getDataIdentTree()
    • getInQueuesMgr

      public InQueuesMgr getInQueuesMgr()
    • getPersMgr

      public PersistenceManager getPersMgr()
    • getTaskScheduler

      public TaskScheduler getTaskScheduler()
    • getSimulationMgr

      public SimulationManager 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 SynchronizationFailedException
      Muss 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 ein ReentrantLock, 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 SynchronizationFailedException
      Muss 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 ein ReentrantLock, 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
      timeout - Maximale Wartezeit
      Returns:
      Lock
      Throws:
      SynchronizationFailedException - Synchronisierung ist fehlgeschlagen (Timeout oder Unterbrochen beim Warten)