Package de.bsvrz.pua.prot.processing
Class ProcessingBuffer
- java.lang.Object
-
- java.lang.Thread
-
- de.bsvrz.pua.prot.processing.ProcessingBuffer
-
- All Implemented Interfaces:
java.lang.Runnable
- Direct Known Subclasses:
ArchiveBuffer,OnlineBuffer
public abstract class ProcessingBuffer extends java.lang.ThreadKlasse zum Markieren und Erstellen von Ausgangsdatensätzen. Zum Starten der Datenaufbereitung den Thread mitThread.start()starten. Wenn Datensätze eingehen, wird die Datenaufbereitung benachrichtigt. Ist die Datensammlung abgeschlossen, wird die Datenaufbereitung ein letzes Mal benachrichtigt.
-
-
Field Summary
Fields Modifier and Type Field Description protected de.bsvrz.sys.funclib.losb.ringbuffer.RingBuffer<IntermediateDataSet>_bufferRingpuffer in dem die Ausgangsdatensätze abgelegt werden.protected ProtocolRequestResult_bufferResultInformationen über das Ergebnis der Datensammlungprotected de.bsvrz.dav.daf.main.ClientDavInterface_connectionVerbindung zum Dateverteilerprotected IMDSBuilder_dataSetBuilderObjekt dass die Ausgangsdatensätze erzeugt.protected de.bsvrz.sys.funclib.debug.Debug_debugDebug Ausgaben.protected boolean_doneZeigt an ob alle Daten gesammelt und abgerufen wurden.protected java.util.List<de.bsvrz.sys.funclib.losb.util.Tuple<java.lang.Long,java.lang.Long>>_periodsAbzufragende Zeitbereiche.protected ProcessingInformation_processingInformationInformationen zur Datenaufbereitungprotected java.util.Hashtable<RealElement,ValueProvider>_realElementsZuordnung: Reale Elemente -> Wertebeschafferprotected java.util.Hashtable<TempAttributeDescription,TempAttribut>_tempElementsZuordnung: Temporäre Attribute -> Wertebeschaffer für temporäre Attributeprotected static intINITIAL_RINGBUFFER_SIZEInitialisierung Ringpuffer
-
Constructor Summary
Constructors Constructor Description ProcessingBuffer(de.bsvrz.dav.daf.main.ClientDavInterface connection, ProcessingInterface processor, ProcessingInformation processingInformation, java.util.List<de.bsvrz.sys.funclib.losb.util.Tuple<java.lang.Long,java.lang.Long>> periods, int startPeriodIndex, java.lang.String scriptName)Startet den Buffer.
-
Method Summary
Modifier and Type Method Description voidabort()Beendet die Datensammlung.abstract booleanapplyAggregations(java.util.List<BaseDataSet> baseData)Führt die Aggregierungen durch.IntermediateDataSetapplyPostFilter(java.util.List<BaseDataSet> baseData, byte status, long winnerTimeStamp, int currentInterval)Ruft den Nachfilter für nicht-aggregierte Daten auf.protected booleangetInsertEmpty()Zeigt an ob ein leerer Datensatz eingefügt werden soll.de.bsvrz.sys.funclib.losb.datk.ProtocolTypegetProtocolType()Zeigt an, ob ein Änderungsprotokoll erstellt wird.ProtocolRequestResultgetResult()Zeigt ob die Datensammlung erfolgreich war.java.lang.StringgetScriptName()Liefert die Bezeichnung des Skripts zur Verwendung in Fehlerausgaben.RealAttributeDescriptiongetTimeStampOrigin(TempAttributeDescription tad)Liefert das Attribut zurück, das den Zeitstempel des temporären Attributsfestlegt.protected intgetWinners(ValueProvider[] elements, java.util.List<ValueProvider> winners)Legt die Elemente mit dem kleinsten Datenzeitstempel in einer Liste ab.abstract booleanhasData()Zeigt an ob Daten abgeholt werden können.abstract voidinit()Erzeugt die Abbildungen: Elemente -> Wertebeschaffer.booleanisAbort()protected booleanisAggregate()abstract booleanisDone()Zeigt ob der Buffer noch weitere Daten liefern wird.protected abstract booleanisDoneCollecting()Zeigt an ob mit das Abfragen aller Daten abgeschlossen wurde.protected abstract booleanisListAggregation()Werden nicht aggregierte Daten versendet?protected voidnextInterval(long endOfInterval)Ist direkt nachdem alle Daten einer Datenart eines Intevalls gesammelt wurden aufzurufen.protected voidnotifyProcessor()Benachrichtigt das Objekt das die Datenaufbereitung durchführt.protected abstract voidprocessNewData(ValueProvider[] elements, java.util.ArrayList<ValueProvider> winners)Bereitet aus den Ergebnisdatensätzen die Ergebnisdaten auf.voidrun()Erstellt die Ausgangsdatensätze.protected voidsetAggregate(boolean aggregate)protected voidsetDone()Wird aufgerufen wenn die Datensammlung beendet werden soll ist oder abgebrochen wird.protected voidsetTempAttributes()Legt einen Eintrag für jedes temporären Attribut in_tempElementsan.intsize()abstract voidstoreAggregatedData(byte status)Falls Aggregationsdatensätze vorhanden sind, werden sie in den Ausgangspuffer gelegt.voidstoreDataSet(IntermediateDataSet intermediateData)Speichert den Ausgangsdatensatz im Ausgangspuffer_buffer.IntermediateDataSettake()Liefert einen Ausgangsdatensatz zurück.-
Methods inherited from class java.lang.Thread
activeCount, checkAccess, clone, countStackFrames, currentThread, dumpStack, enumerate, getAllStackTraces, getContextClassLoader, getDefaultUncaughtExceptionHandler, getId, getName, getPriority, getStackTrace, getState, getThreadGroup, getUncaughtExceptionHandler, holdsLock, interrupt, interrupted, isAlive, isDaemon, isInterrupted, join, join, join, onSpinWait, resume, setContextClassLoader, setDaemon, setDefaultUncaughtExceptionHandler, setName, setPriority, setUncaughtExceptionHandler, sleep, sleep, start, stop, suspend, toString, yield
-
-
-
-
Field Detail
-
INITIAL_RINGBUFFER_SIZE
protected static final int INITIAL_RINGBUFFER_SIZE
Initialisierung Ringpuffer- See Also:
- Constant Field Values
-
_processingInformation
protected ProcessingInformation _processingInformation
Informationen zur Datenaufbereitung
-
_bufferResult
protected ProtocolRequestResult _bufferResult
Informationen über das Ergebnis der Datensammlung
-
_connection
protected de.bsvrz.dav.daf.main.ClientDavInterface _connection
Verbindung zum Dateverteiler
-
_debug
protected final de.bsvrz.sys.funclib.debug.Debug _debug
Debug Ausgaben. Nicht static, da der Logger für jeden neuen Thread neu angelegt werden soll!
-
_buffer
protected de.bsvrz.sys.funclib.losb.ringbuffer.RingBuffer<IntermediateDataSet> _buffer
Ringpuffer in dem die Ausgangsdatensätze abgelegt werden. Ausgangsdatensätze sind für den Versand vorbereitete Daten.
-
_realElements
protected java.util.Hashtable<RealElement,ValueProvider> _realElements
Zuordnung: Reale Elemente -> Wertebeschaffer
-
_tempElements
protected java.util.Hashtable<TempAttributeDescription,TempAttribut> _tempElements
Zuordnung: Temporäre Attribute -> Wertebeschaffer für temporäre Attribute
-
_periods
protected final java.util.List<de.bsvrz.sys.funclib.losb.util.Tuple<java.lang.Long,java.lang.Long>> _periods
Abzufragende Zeitbereiche. Einträge dürfen nach der Initialisierung nicht mehr gelöscht werden (und sollten nicht verändert werden, daher wird die Liste im Konstruktor unveränderbar gemacht.
-
_done
protected boolean _done
Zeigt an ob alle Daten gesammelt und abgerufen wurden.
-
_dataSetBuilder
protected IMDSBuilder _dataSetBuilder
Objekt dass die Ausgangsdatensätze erzeugt. Wird inrun()initialisiert.
-
-
Constructor Detail
-
ProcessingBuffer
public ProcessingBuffer(de.bsvrz.dav.daf.main.ClientDavInterface connection, ProcessingInterface processor, ProcessingInformation processingInformation, java.util.List<de.bsvrz.sys.funclib.losb.util.Tuple<java.lang.Long,java.lang.Long>> periods, int startPeriodIndex, java.lang.String scriptName) throws de.bsvrz.sys.funclib.losb.exceptions.FailureExceptionStartet den Buffer.init()sollte unverzüglich nach Erzeugen des Objekts aufgerufen werden.- Parameters:
connection- Verbindung zum Datenverteilerprocessor- Objekt das die Datenaufbereitung durchführt. Wird jedes Mal benachrichtigt, wenn ein Ausgangsdatensatz vorliegt.processingInformation- Informationen zur Datenaufbereitung.periods- Zeitbereiche, in denen der Buffer Daten sammeln soll. Die Zeitbereiche müssen bereits sortiert und zusammengefasst sein! Die Liste wird nicht geändert.startPeriodIndex- StartPeriodIndexscriptName- Bezeichnung des Skripts zur Verwendung in Fehlerausgaben.- Throws:
de.bsvrz.sys.funclib.losb.exceptions.FailureException- Fehler bei der Kommunikation mit der Konfiguration
-
-
Method Detail
-
init
public abstract void init() throws de.bsvrz.sys.funclib.losb.exceptions.FailureException, java.lang.InterruptedExceptionErzeugt die Abbildungen: Elemente -> Wertebeschaffer. Meldet sich für jede benötigten Datenidentifikation beim Datenverteiler an. Füllt die Hashtables_realElementsund_tempElements. Die Objekte, die in diesen Hashtables als 'Values' abgelegt werden, erledigen das Abfragen der Werte selbständig. Sollte sofort nach Erzeugen des Objektes Aufgerufen werden.- Throws:
de.bsvrz.sys.funclib.losb.exceptions.FailureException- Fehler.java.lang.InterruptedException- Thread wird abgebrochen.
-
setTempAttributes
protected void setTempAttributes()
Legt einen Eintrag für jedes temporären Attribut in_tempElementsan.
-
getResult
public ProtocolRequestResult getResult()
Zeigt ob die Datensammlung erfolgreich war.- Returns:
- Objekt mit Informationen über den Ablauf der Datensammlung
-
notifyProcessor
protected void notifyProcessor()
Benachrichtigt das Objekt das die Datenaufbereitung durchführt.
-
take
public IntermediateDataSet take() throws java.lang.InterruptedException
Liefert einen Ausgangsdatensatz zurück. Setzt dabei das 'zeitdauer' Attribut. Liegt keiner vor, kehrt die Methode sofort mit dem Rückgabewert null zurück.- Returns:
- Ausgangsdatensatz und Status oder null, falls keiner vorliegt.
- Throws:
java.lang.InterruptedException- Warten auf Ausgangsdatensatz wurde unterbrochen.
-
run
public void run()
Erstellt die Ausgangsdatensätze. Fängt sämtliche(!) Exceptions ab. Informationen zum Ablauf der Datensammlung können mittelsgetResult()abgefragt werden.- Specified by:
runin interfacejava.lang.Runnable- Overrides:
runin classjava.lang.Thread
-
processNewData
protected abstract void processNewData(ValueProvider[] elements, java.util.ArrayList<ValueProvider> winners) throws de.bsvrz.sys.funclib.losb.exceptions.FailureException, java.lang.InterruptedException
Bereitet aus den Ergebnisdatensätzen die Ergebnisdaten auf.- Parameters:
elements- Liste aller Datenlieferanten.winners- Rückgabe: Liste der Datensätze mit minimalem, nicht aufgefüllten Datenzeitstempel. (Es sollte eine leere ArrayList übergeben werden)- Throws:
de.bsvrz.sys.funclib.losb.exceptions.FailureException- Fehler bei der Aufbereitung.java.lang.InterruptedException- Aufbereitung wurde unterbrochen.
-
isListAggregation
protected abstract boolean isListAggregation()
Werden nicht aggregierte Daten versendet?- Returns:
truefallsListeeine der ausgewählten die Aggregationsanwendungen ist.
-
storeDataSet
public void storeDataSet(IntermediateDataSet intermediateData)
Speichert den Ausgangsdatensatz im Ausgangspuffer_buffer. Benachrichtigt den Datenaufbereiter_processorfalls notwendig.- Parameters:
intermediateData- Ausgangsdatensatz.
-
applyAggregations
public abstract boolean applyAggregations(java.util.List<BaseDataSet> baseData)
Führt die Aggregierungen durch. Die Aggregierungen werden jedoch nur durchgeführt, fallsisAggregate()trueliefert.- Parameters:
baseData- Werte des Ausgangsdatensatz. Einträge können von der Methode geändert werden.- Returns:
true: Der Ausgangsdatensatz soll nachgefiltert und ausgegeben werden.
-
storeAggregatedData
public abstract void storeAggregatedData(byte status)
Falls Aggregationsdatensätze vorhanden sind, werden sie in den Ausgangspuffer gelegt.- Parameters:
status- Status, den der Aggregationsdatensatz erhalten soll.- See Also:
storeDataSet(IntermediateDataSet)
-
applyPostFilter
public IntermediateDataSet applyPostFilter(java.util.List<BaseDataSet> baseData, byte status, long winnerTimeStamp, int currentInterval)
Ruft den Nachfilter für nicht-aggregierte Daten auf.- Parameters:
baseData- Elemente des Ausgangsdatensatz.status- Status, der dem Ausgangsdatensatz zugeordnet werden soll.winnerTimeStamp- Minimaler, nicht aufgefüllter Zeitstempel.currentInterval- CurrentInterval- Returns:
- Durch den Nachfilter bearbeiteter Datensatz.
-
getWinners
protected int getWinners(ValueProvider[] elements, java.util.List<ValueProvider> winners)
Legt die Elemente mit dem kleinsten Datenzeitstempel in einer Liste ab. Setzt teilt den Elementen mit, ob sie zu den "Gewinnern" oder "Verlierern" gehören.- Parameters:
elements- Feld mit realen Elementen, deren Datenzeitstempel überprüft wird.winners- Liste in der die Elemente mit minimalem Datenzeitstempel abgelegt werden. Die Liste wird vorher geleert.- Returns:
- Wert größer 0, falls es ein Element aus dem Spaltenbereich den kleinsten Datenzeitstempel hat. Wert kleiner 0, falls ein Element, das nicht im Spalten-Bereich vorkommt, den kleinsten Datenzeitstempel hat. 0 wird zurückgegeben, wenn kein Element den minimalen Zeitstempel hat.
-
size
public int size()
- Returns:
- Anzahl Ausgangsdatensätze.
-
isDoneCollecting
protected abstract boolean isDoneCollecting() throws de.bsvrz.sys.funclib.losb.exceptions.FailureException, java.lang.InterruptedExceptionZeigt an ob mit das Abfragen aller Daten abgeschlossen wurde. D.h. es wirdtruezurückgegeben, sobald alle Daten abgefragt wurden.isDone()muss jedoch noch nichtfalsezurückliefern! Wird vonrun()jedesmal aufgerufen, bevor ein neuer Ausgangsdatensatz erstellt wird.- Returns:
truefalls alle Daten abgefragt wurden.- Throws:
de.bsvrz.sys.funclib.losb.exceptions.FailureException- Fehler bei der Überprüfungjava.lang.InterruptedException- Warten auf Antwortdatensatz wurde unterbrochen.
-
hasData
public abstract boolean hasData()
Zeigt an ob Daten abgeholt werden können.- Returns:
truefalls Daten mittelstake()abgeholt werden können.
-
setDone
protected void setDone()
Wird aufgerufen wenn die Datensammlung beendet werden soll ist oder abgebrochen wird. Nach dem Aufruf dieser Methode muss_donetruezurückliefern.
-
isDone
public abstract boolean isDone()
Zeigt ob der Buffer noch weitere Daten liefern wird.- Returns:
truefalls noch weitere Daten zu erwarten sind.
-
abort
public void abort()
Beendet die Datensammlung. Ruft dazuValueProvider.abort()für jedes reale Element auf.
-
isAggregate
protected boolean isAggregate()
- Returns:
- Returns the aggregate.
-
setAggregate
protected void setAggregate(boolean aggregate)
- Parameters:
aggregate- The aggregate to set.
-
nextInterval
protected void nextInterval(long endOfInterval)
Ist direkt nachdem alle Daten einer Datenart eines Intevalls gesammelt wurden aufzurufen. Benachricht die Statusberechung und markiert den letzten Ausgangsdatensatz als den letzten des Intervalls.- Parameters:
endOfInterval- Endzeitpunkt des Intervalls, das gerade beendet wurde.- See Also:
IMDSBuilder.nextInterval(long)
-
isAbort
public boolean isAbort()
- Returns:
truefalls die Datenaufbereitung abgebrochen wurde.
-
getTimeStampOrigin
public RealAttributeDescription getTimeStampOrigin(TempAttributeDescription tad)
Liefert das Attribut zurück, das den Zeitstempel des temporären Attributsfestlegt. Diese Methode liefert erst nach AUfruf derinit()Methode gültige Werte!- Parameters:
tad- Temporäres Attribut- Returns:
- Reales Attribut, dessen Zeitstempel auch für das temporäre Attribut gilt.
nullwenn noch kein reales Attribut für das übergebene temporäre Attribut eingetragen wurde.
-
getProtocolType
public de.bsvrz.sys.funclib.losb.datk.ProtocolType getProtocolType()
Zeigt an, ob ein Änderungsprotokoll erstellt wird.- Returns:
truefalls ein Änderungsprotokoll erstellt wird.false, falls ein Zustandsprotokoll erstellt wird.
-
getInsertEmpty
protected boolean getInsertEmpty()
Zeigt an ob ein leerer Datensatz eingefügt werden soll.- Returns:
truefalls ein leerer Datensatz eingefügt werden soll.
-
getScriptName
public java.lang.String getScriptName()
Liefert die Bezeichnung des Skripts zur Verwendung in Fehlerausgaben.- Returns:
- Bezeichnung des Skripts
-
-