Class 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 mit Thread.start() starten. Wenn Datensätze eingehen, wird die Datenaufbereitung benachrichtigt. Ist die Datensammlung abgeschlossen, wird die Datenaufbereitung ein letzes Mal benachrichtigt.
    • Nested Class Summary

      • Nested classes/interfaces inherited from class java.lang.Thread

        java.lang.Thread.State, java.lang.Thread.UncaughtExceptionHandler
    • 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
      • Methods inherited from class java.lang.Object

        equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • 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
      • _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 in run() 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 Datenverteiler
        processor - 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 - StartPeriodIndex
        scriptName - 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 mittels getResult() abgefragt werden.
        Specified by:
        run in interface java.lang.Runnable
        Overrides:
        run in class java.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 falls Liste 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, falls isAggregate() 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 wird true zurückgegeben, sobald alle Daten abgefragt wurden. isDone() muss jedoch noch nicht false zurückliefern! Wird von run() 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üfung
        java.lang.InterruptedException - Warten auf Antwortdatensatz wurde unterbrochen.
      • hasData

        public abstract boolean hasData()
        Zeigt an ob Daten abgeholt werden können.
        Returns:
        true falls Daten mittels take() 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 dazu ValueProvider.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 der init() 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:
        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:
        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