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.Thread
Klasse 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>
_buffer
Ringpuffer in dem die Ausgangsdatensätze abgelegt werden.protected ProtocolRequestResult
_bufferResult
Informationen über das Ergebnis der Datensammlungprotected de.bsvrz.dav.daf.main.ClientDavInterface
_connection
Verbindung zum Dateverteilerprotected IMDSBuilder
_dataSetBuilder
Objekt dass die Ausgangsdatensätze erzeugt.protected de.bsvrz.sys.funclib.debug.Debug
_debug
Debug Ausgaben.protected boolean
_done
Zeigt 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>>
_periods
Abzufragende Zeitbereiche.protected ProcessingInformation
_processingInformation
Informationen zur Datenaufbereitungprotected java.util.Hashtable<RealElement,ValueProvider>
_realElements
Zuordnung: Reale Elemente -> Wertebeschafferprotected java.util.Hashtable<TempAttributeDescription,TempAttribut>
_tempElements
Zuordnung: Temporäre Attribute -> Wertebeschaffer für temporäre Attributeprotected static int
INITIAL_RINGBUFFER_SIZE
Initialisierung 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 void
abort()
Beendet die Datensammlung.abstract boolean
applyAggregations(java.util.List<BaseDataSet> baseData)
Führt die Aggregierungen durch.IntermediateDataSet
applyPostFilter(java.util.List<BaseDataSet> baseData, byte status, long winnerTimeStamp, int currentInterval)
Ruft den Nachfilter für nicht-aggregierte Daten auf.protected boolean
getInsertEmpty()
Zeigt an ob ein leerer Datensatz eingefügt werden soll.de.bsvrz.sys.funclib.losb.datk.ProtocolType
getProtocolType()
Zeigt an, ob ein Änderungsprotokoll erstellt wird.ProtocolRequestResult
getResult()
Zeigt ob die Datensammlung erfolgreich war.java.lang.String
getScriptName()
Liefert die Bezeichnung des Skripts zur Verwendung in Fehlerausgaben.RealAttributeDescription
getTimeStampOrigin(TempAttributeDescription tad)
Liefert das Attribut zurück, das den Zeitstempel des temporären Attributsfestlegt.protected int
getWinners(ValueProvider[] elements, java.util.List<ValueProvider> winners)
Legt die Elemente mit dem kleinsten Datenzeitstempel in einer Liste ab.abstract boolean
hasData()
Zeigt an ob Daten abgeholt werden können.abstract void
init()
Erzeugt die Abbildungen: Elemente -> Wertebeschaffer.boolean
isAbort()
protected boolean
isAggregate()
abstract boolean
isDone()
Zeigt ob der Buffer noch weitere Daten liefern wird.protected abstract boolean
isDoneCollecting()
Zeigt an ob mit das Abfragen aller Daten abgeschlossen wurde.protected abstract boolean
isListAggregation()
Werden nicht aggregierte Daten versendet?protected void
nextInterval(long endOfInterval)
Ist direkt nachdem alle Daten einer Datenart eines Intevalls gesammelt wurden aufzurufen.protected void
notifyProcessor()
Benachrichtigt das Objekt das die Datenaufbereitung durchführt.protected abstract void
processNewData(ValueProvider[] elements, java.util.ArrayList<ValueProvider> winners)
Bereitet aus den Ergebnisdatensätzen die Ergebnisdaten auf.void
run()
Erstellt die Ausgangsdatensätze.protected void
setAggregate(boolean aggregate)
protected void
setDone()
Wird aufgerufen wenn die Datensammlung beendet werden soll ist oder abgebrochen wird.protected void
setTempAttributes()
Legt einen Eintrag für jedes temporären Attribut in_tempElements
an.int
size()
abstract void
storeAggregatedData(byte status)
Falls Aggregationsdatensätze vorhanden sind, werden sie in den Ausgangspuffer gelegt.void
storeDataSet(IntermediateDataSet intermediateData)
Speichert den Ausgangsdatensatz im Ausgangspuffer_buffer
.IntermediateDataSet
take()
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.FailureException
Startet 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.InterruptedException
Erzeugt die Abbildungen: Elemente -> Wertebeschaffer. Meldet sich für jede benötigten Datenidentifikation beim Datenverteiler an. Füllt die Hashtables_realElements
und_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_tempElements
an.
-
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:
run
in interfacejava.lang.Runnable
- Overrides:
run
in 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:
true
fallsListe
eine der ausgewählten die Aggregationsanwendungen ist.
-
storeDataSet
public void storeDataSet(IntermediateDataSet intermediateData)
Speichert den Ausgangsdatensatz im Ausgangspuffer_buffer
. Benachrichtigt den Datenaufbereiter_processor
falls 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()
true
liefert.- 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.InterruptedException
Zeigt an ob mit das Abfragen aller Daten abgeschlossen wurde. D.h. es wirdtrue
zurückgegeben, sobald alle Daten abgefragt wurden.isDone()
muss jedoch noch nichtfalse
zurückliefern! Wird vonrun()
jedesmal aufgerufen, bevor ein neuer Ausgangsdatensatz erstellt wird.- Returns:
true
falls 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:
true
falls 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_done
true
zurückliefern.
-
isDone
public abstract boolean isDone()
Zeigt ob der Buffer noch weitere Daten liefern wird.- Returns:
true
falls 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:
true
falls 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.
null
wenn 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:
true
falls 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:
true
falls 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
-
-