janus.net
Class ServerBase

java.lang.Object
  extended by janus.net.ServerBase
All Implemented Interfaces:
Runnable
Direct Known Subclasses:
FileTransferServer, ProxyServer, TestServer

public class ServerBase
extends Object
implements Runnable

Diese Klasse bildet die Basis fü Janus/TCP-basierte Server Den einzelnenden TCP/IP-Nachrichten werden Methoden zugeordnet, die die abgeleiteten Klassen implementieren können. Die Basisklasse implementiert einen Echo-Server

See Also:
ServerLoop

Field Summary
protected  ServerConnection conn
          Connection
protected  boolean debug
          Debugging aktiv?
protected  PrintWriter debugStream
          PrintWriter für Debugging
protected  ExceptionListener exceptionListener
          Der Exception Listener
protected  String name
          Name dieses Servers
protected  boolean replyPending
          Wurde eine Antwort gesendet?
protected  Set serverSet
          Map mit allen gleichartigen Threads
protected  int success_hi
          Oberer Grenzwert für erfolgreiche Transaktion
protected  int success_lo
          Unterer Grenzwert für erfolgreiche Transaktion
protected  Thread thread
          Server-Thread
protected  int transaction_type
          Transaktionstyp
protected  String ums_alias
          Ziel-Alias für UMS-Nachricht
protected  byte[] ums_buffer
          Datenpuffer fuer UMS-Nachrichten
protected  int ums_length
          Länge der UMS-Nachricht bzw. der Antwort
static int UMS_MAXLENGTH
          Maximallänge einer UMS-Nachricht
protected  int ums_reply_len
          Maximallänge der UMS-Antwort
protected  String ums_terminal
          Ziel-Terminal für UMS-Nachricht
protected  Connection umsConn
          UMS-Connection
protected  Thread umsThread
          UMS-Server-Thread
protected  Object userObject
          Beliebiges User-Objekt.
 
Constructor Summary
ServerBase()
          Konstruktor ohne Argumente (für ServerLoop)
 
Method Summary
protected  void beginTransaction()
          Starte eine Transaktion.
protected  void endTransaction()
          Beende eine Transaktion (Commit).
 ServerConnection getConnection()
          Rückgabe der Verbindung
 PrintWriter getDebugStream()
          Rückgabe des DebugStream
 String getName()
          Rückgabe des Namens
protected  void getNextUms()
          Lese die nächste UMS-Nachricht aus externer Quelle.
 Connection getUmsConnection()
          Rückgabe der UMS-Verbindung
 Object getUserObject()
          Rückgabe des User-Objects
protected  void handleAccept()
          Baue eine UMS-Verbindung zum Client auf.
protected  void handleAwaitIo()
          Verarbeite eine eingehende AWAITIO-Nachricht.
protected  void handleCancel()
          breche einen ausstehenden I/O ab Die Methode sollte überschrieben werden.
protected  void handleData()
          Verarbeite eine eingehende Daten-Nachricht.
protected  void handleExit()
          Behandle das Ende des Servers.
protected  void handleInit()
          Initialisierung.
protected  void handleMessage(int message_tag)
          Verarbeite eine eingehende Message.
protected  void handleTransaction()
          Transaktions-Behandlung.
protected  void handleUms()
          Behandle eine Antwort vom UMS-Client.
protected  void handleUmsException(Throwable t)
          Behandle eine Exception beim Senden der UMS-Nachricht.
 boolean isDebug()
          Rückgabe des Debug-Status
protected  void logException(Throwable t)
          Logging von Exceptions
protected  void rollbackTransaction()
          Breche eine Transaktion ab (Rollback).
 void run()
          Thread-Code
protected  void sendAck()
          Sende positive Quittung
protected  void sendAck(String text)
          Sende positive Quittung
protected  void sendError(int error_code, int subsystem, int subsystem_error, int extended_error, int error_class, String text)
          Fehlerantwort
protected  void sendError(int error_code, String text)
          Fehlerantwort
 void sendError(String text)
          Fehlerantwort
 void sendReply(byte[] buffer, int offset, int len)
          Antwort an Client.
 void sendReply(MessageElement reply)
          Antwort an Client.
 void sendReply(MessageElement reply, int len)
          Antwort an Client.
 void setConnection(ServerConnection conn)
          Setzen der Verbindung
 boolean setDebug(boolean debug)
          Setzen des Debug-Status
 void setDebugStream(PrintWriter stream)
          Setzen des debugStream und debugStatus
 void setDebugStream(String file)
          Setzen des debugStream und debugStatus
 void setExceptionListener(ExceptionListener exceptionListener)
          Setze den ExceptionListener für das Loggig
 void setName(String name)
          Setzen des Namens
 void setUserObject(Object userObject)
          Setzen des User-Objects
 void stop()
          Halte die Server- und UMS-Threads an.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

conn

protected ServerConnection conn
Connection


debug

protected boolean debug
Debugging aktiv?


debugStream

protected PrintWriter debugStream
PrintWriter für Debugging


exceptionListener

protected ExceptionListener exceptionListener
Der Exception Listener


name

protected String name
Name dieses Servers


replyPending

protected boolean replyPending
Wurde eine Antwort gesendet?


serverSet

protected Set serverSet
Map mit allen gleichartigen Threads

See Also:
ServerLoop

success_hi

protected int success_hi
Oberer Grenzwert für erfolgreiche Transaktion


success_lo

protected int success_lo
Unterer Grenzwert für erfolgreiche Transaktion


thread

protected Thread thread
Server-Thread


transaction_type

protected int transaction_type
Transaktionstyp


ums_alias

protected String ums_alias
Ziel-Alias für UMS-Nachricht


ums_buffer

protected byte[] ums_buffer
Datenpuffer fuer UMS-Nachrichten


ums_length

protected int ums_length
Länge der UMS-Nachricht bzw. der Antwort


UMS_MAXLENGTH

public static final int UMS_MAXLENGTH
Maximallänge einer UMS-Nachricht

See Also:
Constant Field Values

ums_reply_len

protected int ums_reply_len
Maximallänge der UMS-Antwort


ums_terminal

protected String ums_terminal
Ziel-Terminal für UMS-Nachricht


umsConn

protected Connection umsConn
UMS-Connection


umsThread

protected Thread umsThread
UMS-Server-Thread


userObject

protected Object userObject
Beliebiges User-Objekt. Kann von Implementierungen für Konfigurationsdaten genutzt werden.

See Also:
ServerLoop.setUserObject(java.lang.Object)
Constructor Detail

ServerBase

public ServerBase()
Konstruktor ohne Argumente (für ServerLoop)

Method Detail

beginTransaction

protected void beginTransaction()
                         throws Exception
Starte eine Transaktion. Leere Implementierung, sollte überschrieben werden.

Throws:
Exception

endTransaction

protected void endTransaction()
                       throws Exception
Beende eine Transaktion (Commit). Leere Implementierung, sollte überschrieben werden.

Throws:
Exception

getConnection

public ServerConnection getConnection()
Rückgabe der Verbindung


getDebugStream

public PrintWriter getDebugStream()
Rückgabe des DebugStream


getName

public String getName()
Rückgabe des Namens


getNextUms

protected void getNextUms()
Lese die nächste UMS-Nachricht aus externer Quelle. Leere Implementierung, kann überschrieben werden. Die Daten müssen in ums_buffer, ums_length, ums_terminal und ums_alias abgelegt werden. Die Methode sollte blockieren bis Daten da sind.


getUmsConnection

public Connection getUmsConnection()
Rückgabe der UMS-Verbindung


getUserObject

public Object getUserObject()
Rückgabe des User-Objects


handleAccept

protected void handleAccept()
                     throws Exception
Baue eine UMS-Verbindung zum Client auf. Der Server sollte die Methoden getNextUms() handleUms() und handleUmsException(java.lang.Throwable) implementieren

Throws:
Exception
See Also:
Connection.acceptNew()

handleAwaitIo

protected void handleAwaitIo()
                      throws Exception
Verarbeite eine eingehende AWAITIO-Nachricht. Die Methode sollte überschrieben werden. Diese Implmentierung wirft eine Exception mit dem Fehler CommException.BAD_PARAMETER. Die Connection enthält die Daten und Flags.

Throws:
Exception
See Also:
ServerConnection

handleCancel

protected void handleCancel()
                     throws Exception
breche einen ausstehenden I/O ab Die Methode sollte überschrieben werden. Diese Implmentierung wirft eine Exception mit dem Fehler CommException.BAD_PARAMETER. Die Connection enthält die Daten und Flags.

Throws:
Exception
See Also:
ServerConnection

handleData

protected void handleData()
                   throws Exception
Verarbeite eine eingehende Daten-Nachricht. Die Methode sollte überschrieben werden. Diese Implementation tut nichts. Die Connection enthält die Daten und Flags.

Throws:
Exception
See Also:
ServerConnection

handleExit

protected void handleExit()
Behandle das Ende des Servers. Leere-Implementierung, sollte überschrieben werden.


handleInit

protected void handleInit()
                   throws Exception
Initialisierung. Sendet den Namen zurück, kann überschrieben werden.

Throws:
Exception

handleMessage

protected void handleMessage(int message_tag)
                      throws Exception
Verarbeite eine eingehende Message. Diese Implementierung verteilt die Nachrichten auf die einzelnen Handler.

Parameters:
message_tag - Nachrichtentyp aus Connection
Throws:
Exception - Beliebige Ausnahme der Handler

handleTransaction

protected void handleTransaction()
                          throws Exception
Transaktions-Behandlung. Diese Implementation bildet die Nachrichten auf beginTransaction(), endTransaction() und rollbackTransaction() ab, die überschrieben werden können.

Throws:
Exception

handleUms

protected void handleUms()
Behandle eine Antwort vom UMS-Client. Leere-Implementierung, sollte überschrieben werden.


handleUmsException

protected void handleUmsException(Throwable t)
                           throws Throwable
Behandle eine Exception beim Senden der UMS-Nachricht. Leere-Implementierung, sollte überschrieben werden. Die Ausnahme wird wieder geworfen und beendet den UMS-Thread.

Throws:
Throwable

isDebug

public boolean isDebug()
Rückgabe des Debug-Status


logException

protected void logException(Throwable t)
Logging von Exceptions

Parameters:
t - Die Exception

rollbackTransaction

protected void rollbackTransaction()
                            throws Exception
Breche eine Transaktion ab (Rollback). Leere Implementierung, sollte überschrieben werden.

Throws:
Exception

run

public void run()
Thread-Code

Specified by:
run in interface Runnable

sendAck

protected void sendAck()
                throws CommException
Sende positive Quittung

Throws:
CommException

sendAck

protected void sendAck(String text)
                throws CommException
Sende positive Quittung

Parameters:
text - Antworttext
Throws:
CommException - Allgemeiner Kommunikationsfehler

sendError

protected void sendError(int error_code,
                         int subsystem,
                         int subsystem_error,
                         int extended_error,
                         int error_class,
                         String text)
                  throws CommException
Fehlerantwort

Parameters:
error_code - Fehlercode
subsystem - Subsystem
subsystem_error - Subsystem-Fehlercode
extended_error - erweiterter Fehlercode qparam error_class Fehlerklasse
text - Fehlermeldung
Throws:
CommException - Allgemeiner Kommunikationsfehler
See Also:
TandemException

sendError

protected void sendError(int error_code,
                         String text)
                  throws CommException
Fehlerantwort

Parameters:
error_code - Fehlercode
text - Fehlermeldung
Throws:
CommException - Allgemeiner Kommunikationsfehler

sendError

public void sendError(String text)
               throws CommException
Fehlerantwort

Parameters:
text - Fehlermeldung
Throws:
CommException - Allgemeiner Kommunikationsfehler

sendReply

public void sendReply(byte[] buffer,
                      int offset,
                      int len)
               throws Exception,
                      CommException
Antwort an Client.

Parameters:
buffer - Antwort-Puffer
offset - Offset innerhalb des Puffers
len - Länge der Antwort
Throws:
CommException - Allgemeiner Kommunikationsfehler
Exception - Fehler in endTransaction()

sendReply

public void sendReply(MessageElement reply)
               throws CommException,
                      Exception
Antwort an Client.

Parameters:
reply - Antwort
Throws:
CommException - Allgemeiner Kommunikationsfehler
Exception - Fehler in endTransaction()

sendReply

public void sendReply(MessageElement reply,
                      int len)
               throws CommException,
                      Exception
Antwort an Client.

Parameters:
reply - Antwort
len - Länge der Antwort
Throws:
CommException - Allgemeiner Kommunikationsfehler
Exception - Fehler in endTransaction()

setConnection

public void setConnection(ServerConnection conn)
Setzen der Verbindung

Parameters:
conn - Verbindung

setDebug

public boolean setDebug(boolean debug)
Setzen des Debug-Status

Parameters:
debug - Debug-Status
Returns:
der vorherige Stand

setDebugStream

public void setDebugStream(PrintWriter stream)
Setzen des debugStream und debugStatus

Parameters:
stream - Ausgabe-Stream für Debugausgaben

setDebugStream

public void setDebugStream(String file)
Setzen des debugStream und debugStatus

Parameters:
file - Dateiname für Debugausgaben

setExceptionListener

public void setExceptionListener(ExceptionListener exceptionListener)
Setze den ExceptionListener für das Loggig

Parameters:
exceptionListener - Der Listener

setName

public void setName(String name)
Setzen des Namens

Parameters:
name - Der Name des Servers

setUserObject

public void setUserObject(Object userObject)
Setzen des User-Objects

Parameters:
userObject - Beliebiges Objekt
See Also:
ServerLoop.setUserObject(java.lang.Object)

stop

public void stop()
Halte die Server- und UMS-Threads an. Dies muss in einem eigenen Thread erfolgen!



Copyright © 2008 MvC Systemsoftware.