2.17.2: 2011-06-17

net.sf.basedb.core.signal
Class SocketSignalReceiver

java.lang.Object
  extended by net.sf.basedb.core.signal.AbstractSignalReceiver
      extended by net.sf.basedb.core.signal.SocketSignalReceiver
All Implemented Interfaces:
SignalReceiver
Direct Known Subclasses:
AgentSignalReceiver

public class SocketSignalReceiver
extends AbstractSignalReceiver

A signal receiver implementation that listens on a socket for incoming signals. Accordingly, this receiver supports sending signals between different virtual machines running on different servers. The initialisation string for this class should be of the format:

port=xx&proxy=host:port&forward=xx&allow=ip-address&allow=ip-address...

where:

Version:
2.6
Author:
nicklas
Last modified
$Date: 2008-09-11 22:09:17 +0200 (Thu, 11 Sep 2008) $

Nested Class Summary
private  class SocketSignalReceiver.ListenerThread
          This class is used for listening to the specified socket for incoming connections.
 
Field Summary
private  Set<InetAddress> allow
           
private  boolean allowAll
           
private  boolean allowForward
           
private  InetAddress ip
           
private  Thread listener
           
private static Logger logger
          Log signals processing.
private  int port
           
private  String proxy
           
 
Constructor Summary
SocketSignalReceiver()
          Create a new socket signal receiver.
 
Method Summary
 void close(int wait)
          Close this receiver and the socket it is listening on.
protected  boolean forwardSignalMessageIfNeeded(String message)
          If the message has forwarding information, forward the message to the other host.
protected  String getGlobalSignalId(SignalHandler handler)
          Override ID generation so we can add proxy information if needed.
 Class<? extends SignalTransporter> getSignalTransporterClass()
          Get the signal transporter class that should be used to send signals to this receiver.
 void init(String params)
          Initialise the receiver.
protected  boolean isAllowedHost(InetAddress remoteHost)
          Checks if the specified remote host is allowed to send signals to this receiver.
protected  void listenOnSocket()
          Start listening for incoming signals.
protected  void parseInitParameters(String params)
          Parse the initialisation parameters.
protected  void processSignalMessage(String message)
          Process the incoming message.
 
Methods inherited from class net.sf.basedb.core.signal.AbstractSignalReceiver
getLocalSignalHandlerId, getReceiverId, getSignalHandler, registerSignalHandler, sendToAll, sendToAll, unregisterSignalHandler
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

logger

private static final Logger logger
Log signals processing.


ip

private InetAddress ip

listener

private Thread listener

port

private int port

proxy

private String proxy

allowForward

private boolean allowForward

allow

private Set<InetAddress> allow

allowAll

private boolean allowAll
Constructor Detail

SocketSignalReceiver

public SocketSignalReceiver()
Create a new socket signal receiver. Before it can be used it must be initialised with init(String).

Method Detail

init

public void init(String params)
Initialise the receiver. The given parameter should be the port number the receiver should listen on. If the parameter can't be parsed as a numeric value, a random free port will be used. This method will open the socket and start a separate thread that listens for incoming signals.

Specified by:
init in interface SignalReceiver
Overrides:
init in class AbstractSignalReceiver
Parameters:
params - The ID of the signal receiver, needed if the default ID generation should be used

getSignalTransporterClass

public Class<? extends SignalTransporter> getSignalTransporterClass()
Description copied from interface: SignalReceiver
Get the signal transporter class that should be used to send signals to this receiver.

Returns:
SocketSignalTransporter

close

public void close(int wait)
Close this receiver and the socket it is listening on.

Specified by:
close in interface SignalReceiver
Overrides:
close in class AbstractSignalReceiver
Parameters:
wait - Number of milliseconds to wait for registered jobs to abort, use a negative value to disable notification, and 0 to disable waiting

getGlobalSignalId

protected String getGlobalSignalId(SignalHandler handler)
Override ID generation so we can add proxy information if needed.

Overrides:
getGlobalSignalId in class AbstractSignalReceiver
Parameters:
handler - The signal handler to generate the ID for
Returns:
The signal handler ID

processSignalMessage

protected void processSignalMessage(String message)
Process the incoming message. This class will check if the message contains any forwarding information. If so, the message will be forwarde to the new destination. Otherwise, the message will be processed as normal.

Overrides:
processSignalMessage in class AbstractSignalReceiver
Parameters:
message - The message to process, the format of the message must be compatible with the message that AbstractSignalTransporter.generateSignalMessage(Signal) generates

parseInitParameters

protected void parseInitParameters(String params)
Parse the initialisation parameters. Called from the init(String) method.

Parameters:
params - Parameter string passed to init(String) method

listenOnSocket

protected void listenOnSocket()
Start listening for incoming signals.


forwardSignalMessageIfNeeded

protected boolean forwardSignalMessageIfNeeded(String message)
If the message has forwarding information, forward the message to the other host.

Returns:
TRUE if the message was forwarded, FALSE otherwise

isAllowedHost

protected boolean isAllowedHost(InetAddress remoteHost)
Checks if the specified remote host is allowed to send signals to this receiver.

Parameters:
remoteHost - The remote host that is sending the signal
Returns:
TRUE if the host is allowed, FALSE otherwise

2.17.2: 2011-06-17