de.bsvrz.ars.ars.mgmt
Class ArchivConfig

java.lang.Object
  extended by java.lang.Thread
      extended by de.bsvrz.ars.ars.mgmt.tasks.Task
          extended by de.bsvrz.ars.ars.mgmt.ArchivConfig
All Implemented Interfaces:
SuspendableTask, Runnable

public class ArchivConfig
extends Task

Konfiguration des Archivsystems. Die Klasse ist als Thread implementiert, damit die Anmeldungen nicht im Thread des Datenverteilers (in den Callback-Methoden des SettingsManager) laufen muessen. Stattdessen wird ein einfacher Ping-Pong-Mechnanismus implementiert, mit dem die Parameter abgearbeitet werden, sobald der EndOfSettingsListener aufgerufen wurde. Das Ende eines Parametrierungszyklus kann durch createEndOfParamListener() abgewartet werden.

In einem Parametrierungszyklus werden alle An-/Abmeldungen von zu archivierenden Datenidentifikationen und Quittierungs-Datenidentifikationen vorgenommen.

Diese Klasse ist als einzige nicht mit Hilfe von Task und RingBuffer implementiert, da sie einen von der Kernsoftware zur Verfuegung gestellten Mechanismus zur Parameteruebernahme verwendet.

Author:
beck et al. projects GmbH, Alexander Schmidt

Nested Class Summary
 class ArchivConfig.EndOfParamListener
          Spezielle Klasse, mit der man auf das Ende der Übernahme der nächsten Archiveinstellungen warten kann.
static class ArchivConfig.SubscrMarker
          Mit dieser Klasse wird während der Parameterübernahme in den Callback-Methoden vermerkt für welche Datenidentifikation (= DataIdentNode) was parametriert wurde.
 
Nested classes/interfaces inherited from class java.lang.Thread
Thread.State, Thread.UncaughtExceptionHandler
 
Field Summary
private static String ARS_PARAM_ASP_PID
           
private static String ARS_PARAM_ATG_PID
           
private static String DEFAULT_PARAMS_FILE
           
private  List<ArchivConfig.EndOfParamListener> endOfParamListeners
          Listeners die benachrichtigt werden, wenn eine Parametrierung beendet ist.
private  EndOfSettingsListener eofSettingsLstnr
           
private  boolean gotFirstPrintParam
           
private  InQueuesMgr inQueuesMgr
           
private  boolean isTerminated
           
private  boolean noAnswer
           
private static long PARAM_TIMEOUT
          Bei Ausgeben der Parametrierung wird diese Zeitspanne auf den Parameter-Datensatz gewartet
private  FileOutputStream paramDumpStream
           
private  boolean paramsAvailable
           
private  boolean printParams
           
private  SettingsManager settingsMgr
           
private  boolean shallTerminate
           
private  RingBuffer<ResultData> simParamQueue
           
private  ArchivConfig.SubscrMarker subscrMarker
           
private  Object terminationMutex
           
private  int totalDIDs
           
private  UpdateListener updateSettingsLstnr
           
 
Fields inherited from class de.bsvrz.ars.ars.mgmt.tasks.Task
archMgr, didTree, INDEX_MEMORY_SIZE, logger, persMgr, ringOfDeathListener, taskStepListeners
 
Fields inherited from class java.lang.Thread
MAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITY
 
Constructor Summary
ArchivConfig(ArchiveManager aMgr)
           
 
Method Summary
private  void closeParamDumpStream(FileOutputStream ds)
           
 ArchivConfig.EndOfParamListener createEndOfParamListener()
          Erzeugt einen Listener der benachrichtigt wird, wenn ein Parametrierungszyklus durchlaufen ist.
private  FileOutputStream createParamDumpStream(File dumpFile)
           
private  SettingsManager createSettingsMgr()
           
private  boolean getBool(Data data, String key)
           
private  void prepareNewParam(DataIdentification did, Data newD)
          Vermerkt einen DataIdentNode als neu parametriert.
private  void prepareReparam(DataIdentification did, Data newD)
          Vermerkt einen DataIdentNode als reparametriert.
private  void prepareUnparam(DataIdentification did)
          Vermerkt einen DataIdentNode als nicht mehr parametriert.
 void printArchiveParams(File dumpFile)
          Gibt die Parametrierung auf dem uebergebenen Stream aus.
private  void printParam(OutputStream dumpStream, String separatorLine, DataIdentification did, Data data)
          Schreibt die empfangene Parametrierung auf den übergebenen Ausgabestrom oder auf stdout.
private  void processParams()
           
private  void processSimParams(ResultData rd)
          Meldet Daten einer Simulation zum Archivieren (und Quittieren) an.
private  void processSubscriptions()
          Diese Methode arbeitet den ArchivConfig.SubscrMarker ab, der in den Callback-Methoden des SettingsManager gefuellt wurde.
 void restartSubscribeArchiveParams()
          Startet die Uebernahme der Archivparametrierung und meldet die zu archivierenden Datenidentifikation an.
 void run()
           
 void setSimConfigQueue(RingBuffer<ResultData> queue)
           
 void startSubscribeArchiveParams(InQueuesMgr iqMgr, DataIdentTree dTree)
          Initialisiert den Thread und startet durch restartSubscribeArchiveParams() die Uebernahme der Archivparametrierung.
private  String subscrAck(SystemObject so, AttributeGroup atg, Aspect asp, int sv, DataIdentNode din, ArchivConfig.SubscrMarker sm)
          Meldet die Quittungs an.
private  String unsubscrAck(SystemObject so, AttributeGroup atg, int sv, long qAspId)
           
 void unsubscribeArchiveData()
          Meldet alle zu archivierenden Daten ab
private  void unsubscribeArchiveData(int simVar)
          Meldet die zu archivierenden Daten der angegebenen Simulationsvariante ab.
 void unsubscribeArchiveDataAck()
          Meldet alle Quittierungsaspekte ab.
private  void unsubscribeArchiveDataAck(int simVar)
          Meldet die Quittierungsaspekte der genannte Simulationsvariante ab.
 void unsubscribeArchiveParams()
          Beendet den SettingsManager und meldet die Parametrierung des Archivsystems ab.
 void unsubsrcibeSimVarData(int simVar)
          Meldet alle zu einer Simulation gehoerenden Daten (= zu archivierende Daten + Quittungen) ab.
 void waitForTermination()
          Beendet den ArchivConfig-Thread.
 
Methods inherited from class de.bsvrz.ars.ars.mgmt.tasks.Task
addTaskStepListener, getArchMgr, isTaskTerminated, removeTaskStepListener, suspendTaskIfNecessary, terminateTask
 
Methods inherited from class java.lang.Thread
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
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

ARS_PARAM_ATG_PID

private static final String ARS_PARAM_ATG_PID
See Also:
Constant Field Values

ARS_PARAM_ASP_PID

private static final String ARS_PARAM_ASP_PID
See Also:
Constant Field Values

DEFAULT_PARAMS_FILE

private static final String DEFAULT_PARAMS_FILE
See Also:
Constant Field Values

PARAM_TIMEOUT

private static final long PARAM_TIMEOUT
Bei Ausgeben der Parametrierung wird diese Zeitspanne auf den Parameter-Datensatz gewartet

See Also:
Constant Field Values

shallTerminate

private boolean shallTerminate

isTerminated

private boolean isTerminated

terminationMutex

private Object terminationMutex

paramsAvailable

private boolean paramsAvailable

inQueuesMgr

private InQueuesMgr inQueuesMgr

totalDIDs

private int totalDIDs

settingsMgr

private SettingsManager settingsMgr

eofSettingsLstnr

private EndOfSettingsListener eofSettingsLstnr

updateSettingsLstnr

private UpdateListener updateSettingsLstnr

subscrMarker

private ArchivConfig.SubscrMarker subscrMarker

paramDumpStream

private FileOutputStream paramDumpStream

printParams

private boolean printParams

noAnswer

private boolean noAnswer

gotFirstPrintParam

private boolean gotFirstPrintParam

simParamQueue

private RingBuffer<ResultData> simParamQueue

endOfParamListeners

private List<ArchivConfig.EndOfParamListener> endOfParamListeners
Listeners die benachrichtigt werden, wenn eine Parametrierung beendet ist. Diese Liste wird nach jedem Durchlauf geleert.

Constructor Detail

ArchivConfig

public ArchivConfig(ArchiveManager aMgr)
             throws ConfigurationException
Throws:
ConfigurationException
Method Detail

setSimConfigQueue

public void setSimConfigQueue(RingBuffer<ResultData> queue)

createSettingsMgr

private SettingsManager createSettingsMgr()
                                   throws ConfigurationException
Throws:
ConfigurationException

run

public void run()
Specified by:
run in interface Runnable
Overrides:
run in class Thread

processSimParams

private void processSimParams(ResultData rd)
Meldet Daten einer Simulation zum Archivieren (und Quittieren) an. rd muss vom Typ SimulationResultData sein, sonst wird keine Anmeldung vorgenommen.

Parameters:
rd - Spezifikation der anzumeldenden Daten. Muss vom Typ SimulationResultData sein.

processParams

private void processParams()

waitForTermination

public void waitForTermination()
Beendet den ArchivConfig-Thread. Die Methode blockiert (aus Gruenden der Einfachheit), bis der Thread beendet ist.


createEndOfParamListener

public ArchivConfig.EndOfParamListener createEndOfParamListener()
Erzeugt einen Listener der benachrichtigt wird, wenn ein Parametrierungszyklus durchlaufen ist.

Returns:
Listener

startSubscribeArchiveParams

public void startSubscribeArchiveParams(InQueuesMgr iqMgr,
                                        DataIdentTree dTree)
                                 throws ConfigurationException
Initialisiert den Thread und startet durch restartSubscribeArchiveParams() die Uebernahme der Archivparametrierung.

Parameters:
iqMgr - Empfaenger der Datenanmeldung
dTree - Baum, in den die Datenidentifikationen zusammen mit der Parametrierung eingetragen werden
Throws:
ConfigurationException

restartSubscribeArchiveParams

public void restartSubscribeArchiveParams()
                                   throws ConfigurationException
Startet die Uebernahme der Archivparametrierung und meldet die zu archivierenden Datenidentifikation an. Diese Methode wird auch nach einem Verbindungsabbruch zum DAV aufgerufen.

Throws:
ConfigurationException

unsubscribeArchiveParams

public void unsubscribeArchiveParams()
Beendet den SettingsManager und meldet die Parametrierung des Archivsystems ab.


unsubscribeArchiveData

private void unsubscribeArchiveData(int simVar)
Meldet die zu archivierenden Daten der angegebenen Simulationsvariante ab.

Parameters:
simVar - Simulationsvariante. Falls < 0 werden alle zu archivierenden Daten abgemeldet

unsubscribeArchiveData

public void unsubscribeArchiveData()
Meldet alle zu archivierenden Daten ab


unsubsrcibeSimVarData

public void unsubsrcibeSimVarData(int simVar)
Meldet alle zu einer Simulation gehoerenden Daten (= zu archivierende Daten + Quittungen) ab. Da es nicht auf einfache Weise moeglich ist, festzustellen, wann keine Datensaetze einer bestimmten SimVar mehr in der Archiv-Queue sind, kann man nicht bis dahin warten, bevor die Quittungen abgemeldet werden. Es kann also sein, dass einige Datensaetze der Simulation nicht mehr quittiert werden.


unsubscribeArchiveDataAck

private void unsubscribeArchiveDataAck(int simVar)
Meldet die Quittierungsaspekte der genannte Simulationsvariante ab. Dies muss nach unsubscribeArchiveData() geschehen, damit die Datensaetze, die noch in der Queue sind, nach der Archivierung quittiert werden koennen.


unsubscribeArchiveDataAck

public void unsubscribeArchiveDataAck()
Meldet alle Quittierungsaspekte ab. Dies muss nach unsubscribeArchiveData() geschehen, damit die Datensaetze, die noch in der Queue sind, nach der Archivierung quittiert werden koennen.


printArchiveParams

public void printArchiveParams(File dumpFile)
                        throws Exception
Gibt die Parametrierung auf dem uebergebenen Stream aus.

Parameters:
dumpFile - Ausgabestream. Falls null, wird auf stdout ausgegeben
Throws:
ConfigurationException
InterruptedException
Exception

createParamDumpStream

private FileOutputStream createParamDumpStream(File dumpFile)

closeParamDumpStream

private void closeParamDumpStream(FileOutputStream ds)

unsubscrAck

private String unsubscrAck(SystemObject so,
                           AttributeGroup atg,
                           int sv,
                           long qAspId)

subscrAck

private String subscrAck(SystemObject so,
                         AttributeGroup atg,
                         Aspect asp,
                         int sv,
                         DataIdentNode din,
                         ArchivConfig.SubscrMarker sm)
Meldet die Quittungs an. Falls nicht erfolgreich, wird dies im DataIdentNode vermerkt (durch negative ID-1).

Parameters:
so - Systemobjekt
atg - Attributgruppe
sv - SimVar
din - DataIdentnode
Returns:
Log-Message

processSubscriptions

private void processSubscriptions()
Diese Methode arbeitet den ArchivConfig.SubscrMarker ab, der in den Callback-Methoden des SettingsManager gefuellt wurde. Es werden gemaess Parametrierung alle An- und Abmeldungen fuer die Datensaetze als auch fuer die Quittungen durchgefuehrt. Die DataIdentNodes wurden bereits mit der aktuellen Parametrierung besetzt.


prepareReparam

private void prepareReparam(DataIdentification did,
                            Data newD)
Vermerkt einen DataIdentNode als reparametriert.

Parameters:
did - DataIdentNode
newD - Neue Parameterdaten

prepareNewParam

private void prepareNewParam(DataIdentification did,
                             Data newD)
Vermerkt einen DataIdentNode als neu parametriert. Der Node wird erzeugt, falls er nicht existiert. Dies passiert in der Callback-Methode. Die DataIdentNodes sind also immer vor processParams() angelegt. D.h. sobald dort das erste Datum angemeldet wird, kann es archiviert werden.

Parameters:
did - Datenidentifikation
newD - Neue Parameterdaten

prepareUnparam

private void prepareUnparam(DataIdentification did)
Vermerkt einen DataIdentNode als nicht mehr parametriert.

Parameters:
did - Datenidentifikation

printParam

private void printParam(OutputStream dumpStream,
                        String separatorLine,
                        DataIdentification did,
                        Data data)
Schreibt die empfangene Parametrierung auf den übergebenen Ausgabestrom oder auf stdout.

Parameters:
dumpStream - Ausgabestrom. Falls null, wird auf stdout geschrieben.
separatorLine - Zeile, die zwischen Datensätzen eingefügt wird (\n wird angehängt).
did - Datenidentifikation
data - Parametrierung

getBool

private boolean getBool(Data data,
                        String key)