de.bsvrz.ars.ars.mgmt.tasks
Class SingleClientSenderTask

java.lang.Object
  extended by java.lang.Thread
      extended by de.bsvrz.ars.ars.mgmt.tasks.Task
          extended by de.bsvrz.ars.ars.mgmt.tasks.SingleTask
              extended by de.bsvrz.ars.ars.mgmt.tasks.SingleClientSenderTask
All Implemented Interfaces:
SuspendableTask, ClientSenderInterface, Runnable
Direct Known Subclasses:
BackupTask, DeleteSimVarTask, HeaderRestoreTask, LZVTask, RequestGapTask, RestoreTask

public abstract class SingleClientSenderTask
extends SingleTask
implements ClientSenderInterface

Diese Klasse ist die Basis-Klasse aller Single-Tasks, die mit dem DAV kommunizieren.

Author:
beck et al. projects GmbH, Christian Wied

Nested Class Summary
 
Nested classes/interfaces inherited from class java.lang.Thread
Thread.State, Thread.UncaughtExceptionHandler
 
Field Summary
protected static AttributeGroup atgQuery
          Attributgruppe der Archiv-Anfrage und -Antwort.
protected static DataDescription ddResponse
          DataDescription der Archiv-Antwort.
protected  Deserializer deserializer
           
protected  SystemObject queryAppObj
          Applikations-Objekt des Absenders der Archiv-Anfrage.
protected  int queryIdx
          Anfrage-Index der anfragenden Applikation zur Archiv-Anfrage.
private  ByteArrayOutputStream resultStream
           
static int SENDCONTROL_TIMEOUT
          Zeit in Millisekunden, die auf eine positive Sendesteuerung gewartet wird
private  boolean sendingAllowed
          Aktueller Zustand der Sendesteuerung.
private  Serializer serializer
           
protected  int serializerVersion
          Serialisiererversion der anfragenden Applikation, mit der auch die Antwort erstellt werden muss.
protected  Object syncObj
          Spezielles Objekt zur Synchronisiserung.
 
Fields inherited from class de.bsvrz.ars.ars.mgmt.tasks.Task
archMgr, didTree, INDEX_MEMORY_SIZE, isTerminated, logger, persMgr, ringOfDeathListener, taskStepListeners
 
Fields inherited from class java.lang.Thread
MAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITY
 
Fields inherited from interface de.bsvrz.dav.daf.main.ClientSenderInterface
START_SENDING, STOP_SENDING, STOP_SENDING_NO_RIGHTS, STOP_SENDING_NOT_A_VALID_SUBSCRIPTION
 
Constructor Summary
SingleClientSenderTask(ArchiveManager archiveMgr, RingOfDeathListener rodl, RingBuffer<ResultData> inputData)
          Erzeugt einen neuen SingleClientSenderTask.
 
Method Summary
 void dataRequest(SystemObject object, DataDescription dataDescription, byte state)
           
private  int getMessageTypeResult()
           
static void getObjectsFromDAV(ClientDavInterface davCon)
          In dieser Methode werden alle notwendigen Objekte von DAV geladen.
protected  void init(Data data)
          Initialisiert den Task fuer eine neue Archivanfrage.
 boolean isRequestSupported(SystemObject object, DataDescription dataDescription)
           
protected  ArchiveDataSpecification[] parseArchiveDataSpec(Deserializer ds, ResultData resultData)
           
protected  void sendErrorResponse(int messageTypeResult, String errorMessage)
           
protected  void sendErrorResponse(String errorMessage)
           
private  void sendResponse(boolean success, String msg)
           
private  void sendResponse(int messageTypeResult, boolean success, String msg)
           
protected  void sendSuccessResponse()
           
protected  void sendSuccessResponse(int messageTypeResult)
           
protected  void subscribeSender()
          Meldet den Task als Sender fuer Archiv-Antworten an das angegebene Empfaenger-Applikations-Objekt an.
protected  void unsubscribeSender()
          Meldet den Task als Sender fuer Archiv-Antworten an das angegebene Empfaenger-Applikations-Objekt ab.
 
Methods inherited from class de.bsvrz.ars.ars.mgmt.tasks.SingleTask
run, work
 
Methods inherited from class de.bsvrz.ars.ars.mgmt.tasks.Task
addTaskStepListener, getArchMgr, isTaskTerminated, removeTaskStepListener, suspendTaskIfNecessary, terminateTask
 
Methods inherited from class java.lang.Thread
activeCount, checkAccess, clone, countStackFrames, currentThread, destroy, dumpStack, enumerate, getAllStackTraces, getContextClassLoader, getDefaultUncaughtExceptionHandler, getId, getName, getPriority, getStackTrace, getState, getThreadGroup, getUncaughtExceptionHandler, holdsLock, interrupt, interrupted, isAlive, isDaemon, isInterrupted, join, join, join, resume, setContextClassLoader, setDaemon, setDefaultUncaughtExceptionHandler, setName, setPriority, setUncaughtExceptionHandler, sleep, sleep, start, stop, stop, suspend, toString, yield
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

SENDCONTROL_TIMEOUT

public static final int SENDCONTROL_TIMEOUT
Zeit in Millisekunden, die auf eine positive Sendesteuerung gewartet wird

See Also:
Constant Field Values

sendingAllowed

private boolean sendingAllowed
Aktueller Zustand der Sendesteuerung.


syncObj

protected Object syncObj
Spezielles Objekt zur Synchronisiserung. Immer dieses anstatt this verwenden!


serializerVersion

protected int serializerVersion
Serialisiererversion der anfragenden Applikation, mit der auch die Antwort erstellt werden muss.


atgQuery

protected static AttributeGroup atgQuery
Attributgruppe der Archiv-Anfrage und -Antwort.


ddResponse

protected static DataDescription ddResponse
DataDescription der Archiv-Antwort.


queryAppObj

protected SystemObject queryAppObj
Applikations-Objekt des Absenders der Archiv-Anfrage.


queryIdx

protected int queryIdx
Anfrage-Index der anfragenden Applikation zur Archiv-Anfrage.


resultStream

private ByteArrayOutputStream resultStream

serializer

private Serializer serializer

deserializer

protected Deserializer deserializer
Constructor Detail

SingleClientSenderTask

public SingleClientSenderTask(ArchiveManager archiveMgr,
                              RingOfDeathListener rodl,
                              RingBuffer<ResultData> inputData)
                       throws ConfigurationException
Erzeugt einen neuen SingleClientSenderTask.

Parameters:
archiveMgr - Der Archiv-Manager.
rodl - Der Listener wird benachrichtigt beim Beenden der Task.
inputData - Eingangswarteschlange
Throws:
ConfigurationException
Method Detail

getObjectsFromDAV

public static void getObjectsFromDAV(ClientDavInterface davCon)
                              throws ConfigurationException
In dieser Methode werden alle notwendigen Objekte von DAV geladen.

Parameters:
davCon - Verbindung zum Datenverteiler
Throws:
ConfigurationException

init

protected void init(Data data)
             throws NoSuchVersionException
Initialisiert den Task fuer eine neue Archivanfrage.

Throws:
NoSuchVersionException

sendErrorResponse

protected void sendErrorResponse(String errorMessage)

sendSuccessResponse

protected void sendSuccessResponse()

sendErrorResponse

protected void sendErrorResponse(int messageTypeResult,
                                 String errorMessage)

sendSuccessResponse

protected void sendSuccessResponse(int messageTypeResult)

sendResponse

private void sendResponse(boolean success,
                          String msg)

sendResponse

private void sendResponse(int messageTypeResult,
                          boolean success,
                          String msg)

getMessageTypeResult

private int getMessageTypeResult()

subscribeSender

protected void subscribeSender()
                        throws ConfigurationException,
                               OneSubscriptionPerSendData
Meldet den Task als Sender fuer Archiv-Antworten an das angegebene Empfaenger-Applikations-Objekt an. Registriert den StreamMultiplexer fuer den Empfang von Flusskontroll-Steuerungspaketen.

Throws:
OneSubscriptionPerSendData
ConfigurationException

unsubscribeSender

protected void unsubscribeSender()
Meldet den Task als Sender fuer Archiv-Antworten an das angegebene Empfaenger-Applikations-Objekt ab.


dataRequest

public void dataRequest(SystemObject object,
                        DataDescription dataDescription,
                        byte state)
Specified by:
dataRequest in interface ClientSenderInterface
See Also:
ClientSenderInterface.dataRequest(SystemObject,DataDescription,byte)

isRequestSupported

public boolean isRequestSupported(SystemObject object,
                                  DataDescription dataDescription)
Specified by:
isRequestSupported in interface ClientSenderInterface
See Also:
ClientSenderInterface.isRequestSupported(SystemObject,DataDescription)

parseArchiveDataSpec

protected ArchiveDataSpecification[] parseArchiveDataSpec(Deserializer ds,
                                                          ResultData resultData)
                                                   throws Exception
Throws:
Exception