de.bsvrz.kex.kexdav.dataexchange
Class DataTransferPolicy

java.lang.Object
  extended by de.bsvrz.kex.kexdav.dataexchange.DataTransferPolicy
Direct Known Subclasses:
BasicTransferPolicy, ParameterDataTransferPolicy.Policy

public abstract class DataTransferPolicy
extends Object

Eine abstrakte Klasse, die das Verfahren angibt, mit der Daten zwischen 2 Datenverteilern ausgetauscht werden. Diese Klasse ist nicht für die Kopie des Data-Objektes zuständig, darum kümmert sich das KExDaVDataPlugin, mit ihr könnte man stattdessen z.B. verhindern, dass leere Daten übertragen werden oder eine Art Rechteprüfung implementieren. Derzeit wird diese Klasse benutzt, um bei beidseitigen Parameter-Daten-Übertragungen festzustellen, wenn beide Seiten annährend gleichzeitig Parameter senden. Dann wird das lokale System priorisiert und ein unendlichen hin und her-wechseln der Daten verhindert. Siehe dazu ParameterDataTransferPolicy. Außerdem werden die beiden Datenverteilersysteme über den Threadpool entkoppelt, sodass z.B. ein hängenbleiben im sendData() die Empfangsqueue des anderen Datenverteilers nicht blockiert.

Author:
Kappich Systemberatung

Nested Class Summary
private  class DataTransferPolicy.DataAndPipe
           
(package private)  class DataTransferPolicy.DataPackage
           
 
Field Summary
private static Debug _debug
           
private static long _lastWarnTime
           
private  LowLevelDataPipe _lowLevelDataPipe
           
private static UnboundedQueue<DataTransferPolicy.DataAndPipe> _queue
           
 
Constructor Summary
DataTransferPolicy(LowLevelDataPipe lowLevelDataPipe)
          Konstruktor
 
Method Summary
protected abstract  void handleData(DataTransferPolicy.DataPackage dataPackage)
          Template-Methode, die die Daten weiterverarbeiten soll
 void handleData(KExDaVAttributeGroupData sourceData, DataState dataState, long dataTime)
          Wird aufgerufen, wenn Daten eintreffen
protected  void sendData(DataTransferPolicy.DataPackage dataPackage)
          Sendet die Daten an das Zielsystem
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_lowLevelDataPipe

private final LowLevelDataPipe _lowLevelDataPipe

_queue

private static final UnboundedQueue<DataTransferPolicy.DataAndPipe> _queue

_lastWarnTime

private static volatile long _lastWarnTime

_debug

private static final Debug _debug
Constructor Detail

DataTransferPolicy

public DataTransferPolicy(LowLevelDataPipe lowLevelDataPipe)
Konstruktor

Parameters:
lowLevelDataPipe - Zugehöriger Datenkanal, in den die Daten eingespeist werden sollen
Method Detail

handleData

public final void handleData(KExDaVAttributeGroupData sourceData,
                             DataState dataState,
                             long dataTime)
Wird aufgerufen, wenn Daten eintreffen

Parameters:
sourceData - Daten (können null sein)
dataState - Daten-Zustand
dataTime - Daten-Zeit

handleData

protected abstract void handleData(DataTransferPolicy.DataPackage dataPackage)
Template-Methode, die die Daten weiterverarbeiten soll

Parameters:
dataPackage - Datenpaket

sendData

protected final void sendData(DataTransferPolicy.DataPackage dataPackage)
Sendet die Daten an das Zielsystem

Parameters:
dataPackage - Datenpaket