de.bsvrz.sys.funclib.losb.kernsoftware
Class SimpleSender

java.lang.Object
  extended by de.bsvrz.sys.funclib.losb.kernsoftware.SimpleSender

public class SimpleSender
extends java.lang.Object

Klasse die das Senden immer unter Berücksichtigung der Sendesteuerung durchführt. Nach dem Senden der Daten meldet sich der Sender sofort beim Datenverteiler ab. Falls keine Exception geworfen wird, und sent dennoch false ist, dann gibt es keinen Abnehmer für die Daten.
WICHTIG
Wenn versucht wird, etwas ohne angemeldeten Empfänger Quelle zu senden, dann wird (korrekterweise) ein Fehler gemeldet. Problematisch wird es, wenn sofort danach eine Quellen-/Empfängeranmeldung durchgeführt und das Senden wiederholt wird. Dies führt zu einem Fehler, da die Sendesteuerung das Senden immer noch nicht gestattet. Daher sollte eine Pause zwischen zwei Sendeversuchen liegen. (Siehe JUnit-Tests).

Version:
$Revision: 1.1 $ / $Date: 2008/01/22 16:55:52 $ / ($Author: yvonnes $)
Author:
beck et al. projects GmbH, Martin Hilgers
See Also:
SubscriptionManager

Field Summary
 java.lang.String errorMsg
          Mit null oder einer Fehlermeldung belegt.
 java.lang.Object lock
          Wird als Synchronisationspunkt verwendet.
 boolean sent
          Wird nach dem Senden gesetzt.
 
Constructor Summary
SimpleSender(ClientDavInterface dav, SystemObject receiver, DataDescription dataDescription, Data data, boolean source)
          Erzeugt den Sender und sendet die Daten.
 
Method Summary
 void dataRequest(SystemObject object, DataDescription dataDescription, byte state)
          Sendesteuerung.
 boolean isRequestSupported(SystemObject object, DataDescription dataDescription)
          Sendesteuerung ist erwünscht.
static SimpleSender send(ClientDavInterface dav, SystemObject receiver, DataDescription dataDescription, Data data)
          Erzeugt einen Sender und sendet die Daten als einfacher Sender.
static boolean sendWait(ClientDavInterface dav, SystemObject receiver, DataDescription dataDescription, Data data, long timeout)
          Erzeugt einen Sender und sendet die Daten als einfacher Sender.
static SimpleSender source(ClientDavInterface dav, SystemObject receiver, DataDescription dataDescription, Data data)
          Erzeugt einen Sender und sendet die Daten als Quelle.
static boolean sourceWait(ClientDavInterface dav, SystemObject receiver, DataDescription dataDescription, Data data, long timeout)
          Erzeugt einen Sender und sendet die Daten als einfache Quelle.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

lock

public java.lang.Object lock
Wird als Synchronisationspunkt verwendet. Wird von Sender mit sent.notifyAll() geweckt, nachdem die Daten gesendet wurden.


sent

public boolean sent
Wird nach dem Senden gesetzt. True, falls das Senden erfolgreich durchgeführt wurde. False sonst. Falls keine Exception geworfen wird, und sent dennoch false ist, dann gibt es keinen Abnehmer für die Daten.


errorMsg

public java.lang.String errorMsg
Mit null oder einer Fehlermeldung belegt.

Constructor Detail

SimpleSender

public SimpleSender(ClientDavInterface dav,
                    SystemObject receiver,
                    DataDescription dataDescription,
                    Data data,
                    boolean source)
             throws SenderException
Erzeugt den Sender und sendet die Daten.

Parameters:
dav - Verbindung zum Datenverteiler
receiver - Empfänger der Daten
dataDescription - DataDescription der zu versendenden Daten
data - Daten, die versendet werden sollen
source - True wenn die Daten als Quelle versendet werden sollen. Ist source == false meldet sich SimpleSender als einfacher Sender an.
Throws:
SenderException - Falls es bei der Sendeanmeldung zu einem Fehler kommt.
Method Detail

send

public static SimpleSender send(ClientDavInterface dav,
                                SystemObject receiver,
                                DataDescription dataDescription,
                                Data data)
                         throws SenderException
Erzeugt einen Sender und sendet die Daten als einfacher Sender. Alternativ kann auch ein neues Objekt erzeugt werden SimpleSender(ClientDavInterface, SystemObject, DataDescription, Data, boolean) - das hat den gleichen Effekt.

Parameters:
dav - Verbindung zum Datenverteiler
receiver - Empfänger der Daten
dataDescription - DataDescription der zu versendenden Daten
data - Daten, die versendet werden sollen
Returns:
Einfacher Sender.
Throws:
SenderException - Falls es bei der Sendeanmeldung zu einem Fehler kommt.

sendWait

public static boolean sendWait(ClientDavInterface dav,
                               SystemObject receiver,
                               DataDescription dataDescription,
                               Data data,
                               long timeout)
                        throws SenderException
Erzeugt einen Sender und sendet die Daten als einfacher Sender. Die Methode wartet solange, bis die Daten gesendet wurden, oder es zu einem Fehler kam.

Parameters:
dav - Verbindung zum Datenverteiler
receiver - Empfänger der Daten
dataDescription - DataDescription der zu versendenden Daten
data - Daten, die versendet werden sollen
timeout - Maximale Wartezeit in ms. Bei 0 unbegrenzt.
Returns:
true falls das Senden erfolgreich durchgeführt wurde.
Throws:
SenderException - Fehler beim Senden.
java.lang.RuntimeException - Kann bei Fehler geworfen werden.

source

public static SimpleSender source(ClientDavInterface dav,
                                  SystemObject receiver,
                                  DataDescription dataDescription,
                                  Data data)
                           throws SenderException
Erzeugt einen Sender und sendet die Daten als Quelle.

Parameters:
dav - Verbindung zum Datenverteiler
receiver - Empfänger der Daten
dataDescription - DataDescription der zu versendenden Daten
data - Daten, die versendet werden sollen
Returns:
Quelle
Throws:
SenderException - Fehler beim Senden.

sourceWait

public static boolean sourceWait(ClientDavInterface dav,
                                 SystemObject receiver,
                                 DataDescription dataDescription,
                                 Data data,
                                 long timeout)
                          throws SenderException
Erzeugt einen Sender und sendet die Daten als einfache Quelle. Die Methode wartet solange, bis die Daten gesendet wurden, oder es zu einem Fehler kam.

Parameters:
dav - Verbindung zum Datenverteiler
receiver - Empfänger der Daten
dataDescription - DataDescription der zu versendenden Daten
data - Daten, die versendet werden sollen
timeout - Maximale Wartezeit in ms. Bei 0 unbegrenzt.
Returns:
False, falls die Daten wegen negativer Sendesteuerung nicht gesendet wurden.
Throws:
SenderException - Falls es beim Senden zu einem Fehler kommt.
java.lang.RuntimeException - Kann bei Fehler geworfen werden.

dataRequest

public void dataRequest(SystemObject object,
                        DataDescription dataDescription,
                        byte state)
Sendesteuerung. Callback Methode für den Datenverteiler. Wird der Versand von Daten erlaubt, so werden die Daten sofort abgesetzt. Danach meldet sich der Sender unverzüglich ab. Wird der Versand der Daten nicht erlaubt, so werden sie verworfen.

Parameters:
object - Das in der zugehörigen Sendeanmeldung angegebene Objekt, auf das sich die Sendesteuerung bezieht.
dataDescription - Beschreibende Informationen zu den angemeldeten Daten auf die sich die Sendesteuerung bezieht.
state - Status der Sendesteuerung. Kann einen der Werte START_SENDING, STOP_SENDING, STOP_SENDING_NO_RIGHTS, STOP_SENDING_NOT_A_VALID_SUBSCRIPTION enthalten.

isRequestSupported

public boolean isRequestSupported(SystemObject object,
                                  DataDescription dataDescription)
Sendesteuerung ist erwünscht. Wird vom Datenverteiler aufgerufen. Liefert deshalb immer true zurück.

Parameters:
object - Das in der zugehörigen Sendeanmeldung angegebene System-Objekt.
dataDescription - Die in der zugehörigen Sendeanmeldung angegebenen beschreibenden Informationen der angemeldeten Daten.
Returns:
true, falls Sendesteuerungen gewünscht sind, sonst false.
See Also:
ClientSenderInterface#isRequestSupported(SystemObject, DataDescription)


Copyright © 2005-2008 beck et al. projects GmbH All Rights Reserved.