public class ArchivConfig extends QueueTask<ArchivConfig.Notification>
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 RepeatingTask
und RingBuffer
implementiert, da sie einen von der Kernsoftware zur Verfuegung gestellten Mechanismus zur Parameteruebernahme verwendet.
Modifier and Type | Class and Description |
---|---|
class |
ArchivConfig.EndOfParamListener
Spezielle Klasse, mit der man auf das Ende der Übernahme der nächsten Archiveinstellungen warten kann.
|
static class |
ArchivConfig.Notification |
private class |
ArchivConfig.SimParamTask |
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. |
Modifier and Type | Field and Description |
---|---|
private static java.lang.String |
ARS_PARAM_ASP_PID |
private static java.lang.String |
ARS_PARAM_ATG_PID |
private static java.lang.String |
DEFAULT_PARAMS_FILE |
private java.util.List<ArchivConfig.EndOfParamListener> |
endOfParamListeners
Listeners die benachrichtigt werden, wenn eine Parametrierung beendet ist.
|
private EndOfSettingsListener |
eofSettingsLstnr |
private boolean |
gotFirstPrintParam |
private InQueuesMgr |
inQueuesMgr |
private boolean |
isReady
Gibt an, ob schon eine Applikationsfertigmeldung versendet wurde
|
private boolean |
noAnswer |
private static long |
PARAM_TIMEOUT
Bei Ausgeben der Parametrierung wird diese Zeitspanne auf den Parameter-Datensatz gewartet
|
private java.io.FileOutputStream |
paramDumpStream |
private boolean |
paramsAvailable |
private boolean |
printParams |
private SettingsManager |
settingsMgr |
private ArchivConfig.SimParamTask |
simParamWorker
Hilfs-Task, der Simulations-parametrierungen übernimmt
|
private ArchivConfig.SubscrMarker |
subscrMarker |
private int |
totalDIDs |
private UpdateListener |
updateSettingsLstnr |
TERMINATE_TASK
_debug, _shouldTerminate, archMgr, didTree, INDEX_MEMORY_SIZE, persMgr
Constructor and Description |
---|
ArchivConfig(ArchiveManager aMgr) |
Modifier and Type | Method and Description |
---|---|
private void |
closeParamDumpStream(java.io.FileOutputStream ds) |
ArchivConfig.EndOfParamListener |
createEndOfParamListener()
Erzeugt einen Listener der benachrichtigt wird, wenn ein Parametrierungszyklus durchlaufen ist.
|
private java.io.FileOutputStream |
createParamDumpStream(java.io.File dumpFile) |
private SettingsManager |
createSettingsMgr() |
private boolean |
getBool(Data data,
java.lang.String key) |
void |
join()
Wartet auf das Beenden des Threads nach der Terminierung.
|
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(java.io.File dumpFile)
Gibt die Parametrierung auf dem uebergebenen Stream aus.
|
private void |
printParam(java.io.OutputStream dumpStream,
java.lang.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 |
setSimConfigQueue(java.util.concurrent.BlockingQueue<java.lang.Object> queue) |
void |
startSubscribeArchiveParams(InQueuesMgr iqMgr,
DataIdentTree dTree)
Initialisiert den Thread und startet durch
restartSubscribeArchiveParams() die Uebernahme der Archivparametrierung. |
private java.lang.String |
subscrAck(SystemObject so,
AttributeGroup atg,
Aspect asp,
int sv,
DataIdentNode din,
ArchivConfig.SubscrMarker sm)
Meldet die Quittungs an.
|
void |
terminateTask()
Terminiert den Task, indem die
#run() -Methode unterbrochen wird, sofern sie im Wartezustand ist und nicht gerade einen Auftrag bearbeitet. |
private java.lang.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.
|
protected void |
work(ArchivConfig.Notification step) |
execute
addTaskStepListener, cleanUp, getArchMgr, getName, getObjectsFromDav, getState, isAlive, isTerminated, removeTaskStepListener, setName, shouldTerminate, start, suspendTaskIfNecessary, taskStepDone
private static final java.lang.String ARS_PARAM_ATG_PID
private static final java.lang.String ARS_PARAM_ASP_PID
private static final java.lang.String DEFAULT_PARAMS_FILE
private static final long PARAM_TIMEOUT
Bei Ausgeben der Parametrierung wird diese Zeitspanne auf den Parameter-Datensatz gewartet
private boolean paramsAvailable
private InQueuesMgr inQueuesMgr
private int totalDIDs
private SettingsManager settingsMgr
private EndOfSettingsListener eofSettingsLstnr
private UpdateListener updateSettingsLstnr
private ArchivConfig.SubscrMarker subscrMarker
private java.io.FileOutputStream paramDumpStream
private boolean printParams
private boolean noAnswer
private boolean gotFirstPrintParam
private final java.util.List<ArchivConfig.EndOfParamListener> endOfParamListeners
Listeners die benachrichtigt werden, wenn eine Parametrierung beendet ist. Diese Liste wird nach jedem Durchlauf geleert.
private boolean isReady
Gibt an, ob schon eine Applikationsfertigmeldung versendet wurde
private ArchivConfig.SimParamTask simParamWorker
Hilfs-Task, der Simulations-parametrierungen übernimmt
public ArchivConfig(ArchiveManager aMgr)
public void setSimConfigQueue(java.util.concurrent.BlockingQueue<java.lang.Object> queue)
private SettingsManager createSettingsMgr()
protected void work(ArchivConfig.Notification step) throws java.lang.InterruptedException
work
in class QueueTask<ArchivConfig.Notification>
java.lang.InterruptedException
public void terminateTask()
QueueTask
Terminiert den Task, indem die #run()
-Methode unterbrochen wird, sofern sie im Wartezustand ist und nicht gerade einen Auftrag bearbeitet. Andernfalls wird der Task vor dem naechsten Zyklus beendet.
terminateTask
in class QueueTask<ArchivConfig.Notification>
public void join() throws java.lang.InterruptedException
Task
Wartet auf das Beenden des Threads nach der Terminierung.
private void processSimParams(ResultData rd) throws java.lang.InterruptedException
Meldet Daten einer Simulation zum Archivieren (und Quittieren) an. rd
muss vom Typ SimulationResultData
sein, sonst wird keine Anmeldung vorgenommen.
rd
- Spezifikation der anzumeldenden Daten. Muss vom Typ SimulationResultData
sein.java.lang.InterruptedException
private void processParams() throws java.lang.InterruptedException
java.lang.InterruptedException
public ArchivConfig.EndOfParamListener createEndOfParamListener()
Erzeugt einen Listener der benachrichtigt wird, wenn ein Parametrierungszyklus durchlaufen ist.
public void startSubscribeArchiveParams(InQueuesMgr iqMgr, DataIdentTree dTree)
Initialisiert den Thread und startet durch restartSubscribeArchiveParams()
die Uebernahme der Archivparametrierung.
iqMgr
- Empfaenger der DatenanmeldungdTree
- Baum, in den die Datenidentifikationen zusammen mit der Parametrierung eingetragen werdenpublic void restartSubscribeArchiveParams()
Startet die Uebernahme der Archivparametrierung und meldet die zu archivierenden Datenidentifikation an. Diese Methode wird auch nach einem Verbindungsabbruch zum DAV aufgerufen.
public void unsubscribeArchiveParams()
Beendet den SettingsManager und meldet die Parametrierung des Archivsystems ab.
private void unsubscribeArchiveData(int simVar)
Meldet die zu archivierenden Daten der angegebenen Simulationsvariante ab.
simVar
- Simulationsvariante. Falls < 0 werden alle zu archivierenden Daten abgemeldetpublic void unsubscribeArchiveData()
Meldet alle zu archivierenden Daten ab
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 Datensätze 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 Datensätze der Simulation nicht mehr quittiert werden.
private void unsubscribeArchiveDataAck(int simVar)
Meldet die Quittierungsaspekte der genannte Simulationsvariante ab. Dies muss nach unsubscribeArchiveData()
geschehen, damit die Datensätze, die noch in der Queue sind, nach der Archivierung quittiert werden koennen.
public void unsubscribeArchiveDataAck()
Meldet alle Quittierungsaspekte ab. Dies muss nach unsubscribeArchiveData()
geschehen, damit die Datensätze, die noch in der Queue sind, nach der Archivierung quittiert werden koennen.
public void printArchiveParams(java.io.File dumpFile) throws java.lang.Exception
Gibt die Parametrierung auf dem uebergebenen Stream aus.
dumpFile
- Ausgabestream. Falls null, wird auf stdout ausgegebenjava.lang.InterruptedException
java.lang.Exception
private java.io.FileOutputStream createParamDumpStream(java.io.File dumpFile)
private void closeParamDumpStream(java.io.FileOutputStream ds)
private java.lang.String unsubscrAck(SystemObject so, AttributeGroup atg, int sv, long qAspId)
private java.lang.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).
so
- Systemobjektatg
- Attributgruppesv
- SimVardin
- DataIdentnodeprivate void processSubscriptions() throws java.lang.InterruptedException
Diese Methode arbeitet den ArchivConfig.SubscrMarker
ab, der in den Callback-Methoden des SettingsManager
gefuellt wurde. Es werden gemaess Parametrierung alle An- und Abmeldungen für die Datensätze als auch für die Quittungen durchgefuehrt. Die DataIdentNode
s wurden bereits mit der aktuellen Parametrierung besetzt.
java.lang.InterruptedException
private void prepareReparam(DataIdentification did, Data newD)
Vermerkt einen DataIdentNode als reparametriert.
did
- DataIdentNodenewD
- Neue Parameterdatenprivate 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.
did
- DatenidentifikationnewD
- Neue Parameterdatenprivate void prepareUnparam(DataIdentification did)
Vermerkt einen DataIdentNode als nicht mehr parametriert.
did
- Datenidentifikationprivate void printParam(java.io.OutputStream dumpStream, java.lang.String separatorLine, DataIdentification did, Data data)
Schreibt die empfangene Parametrierung auf den übergebenen Ausgabestrom oder auf stdout.
dumpStream
- Ausgabestrom. Falls null, wird auf stdout geschrieben.separatorLine
- Zeile, die zwischen Datensätzen eingefügt wird (\n wird angehängt).did
- Datenidentifikationdata
- Parametrierungprivate boolean getBool(Data data, java.lang.String key)