org.jgroups.blocks
Class ConnectionTable

java.lang.Object
  extended byorg.jgroups.blocks.ConnectionTable
All Implemented Interfaces:
java.lang.Runnable
Direct Known Subclasses:
ConnectionTableNIO

public class ConnectionTable
extends java.lang.Object
implements java.lang.Runnable

Manages incoming and outgoing TCP connections. For each outgoing message to destination P, if there is not yet a connection for P, one will be created. Subsequent outgoing messages will use this connection. For incoming messages, one server socket is created at startup. For each new incoming client connecting, a new thread from a thread pool is allocated and listens for incoming messages until the socket is closed by the peer.
Sockets/threads with no activity will be killed after some time.

Incoming messages from any of the sockets can be received by setting the message listener.

Author:
Bela Ban

Nested Class Summary
static interface ConnectionTable.ConnectionListener
          Used to be notified about connection establishment and teardown.
static interface ConnectionTable.Receiver
          Used for message reception.
 
Field Summary
protected  org.apache.commons.logging.Log log
           
 
Constructor Summary
ConnectionTable(ConnectionTable.Receiver r, java.net.InetAddress bind_addr, java.net.InetAddress external_addr, int srv_port, int max_port)
          Create a ConnectionTable
ConnectionTable(ConnectionTable.Receiver r, java.net.InetAddress bind_addr, java.net.InetAddress external_addr, int srv_port, int max_port, long reaper_interval, long conn_expire_time)
          ConnectionTable including a connection reaper.
ConnectionTable(java.net.InetAddress bind_addr, int srv_port)
           
ConnectionTable(int srv_port)
          Regular ConnectionTable without expiration of idle connections
ConnectionTable(int srv_port, long reaper_interval, long conn_expire_time)
          ConnectionTable including a connection reaper.
 
Method Summary
 void addConnectionListener(ConnectionTable.ConnectionListener l)
           
protected  java.net.ServerSocket createServerSocket(int start_port, int end_port)
          Finds first available port starting at start_port and returns server socket.
 Address getLocalAddress()
           
 int getNumConnections()
           
 int getReceiveBufferSize()
           
 int getSendBufferSize()
           
 int getSocketConnectionTimeout()
           
 boolean getUseSendQueues()
           
protected  void init()
           
 void receive(Address sender, byte[] data, int offset, int length)
          Calls the receiver callback.
 void remove(Address addr)
          Remove addrfrom connection table.
 void removeConnectionListener(ConnectionTable.ConnectionListener l)
           
 void run()
          Acceptor thread.
 void send(Address dest, byte[] data, int offset, int length)
           
 void setReceiveBufferSize(int recv_buf_size)
           
 void setReceiver(ConnectionTable.Receiver r)
           
 void setSendBufferSize(int send_buf_size)
           
 void setSocketConnectionTimeout(int sock_conn_timeout)
           
 void setUseSendQueues(boolean flag)
           
 void start()
           
 void stop()
          Closes all open sockets, the server socket and all threads waiting for incoming messages
 java.lang.String toString()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

log

protected final org.apache.commons.logging.Log log
Constructor Detail

ConnectionTable

public ConnectionTable(int srv_port)
                throws java.lang.Exception
Regular ConnectionTable without expiration of idle connections

Parameters:
srv_port - The port on which the server will listen. If this port is reserved, the next free port will be taken (incrementing srv_port).

ConnectionTable

public ConnectionTable(java.net.InetAddress bind_addr,
                       int srv_port)
                throws java.lang.Exception

ConnectionTable

public ConnectionTable(int srv_port,
                       long reaper_interval,
                       long conn_expire_time)
                throws java.lang.Exception
ConnectionTable including a connection reaper. Connections that have been idle for more than conn_expire_time milliseconds will be closed and removed from the connection table. On next access they will be re-created.

Parameters:
srv_port - The port on which the server will listen
reaper_interval - Number of milliseconds to wait for reaper between attepts to reap idle connections
conn_expire_time - Number of milliseconds a connection can be idle (no traffic sent or received until it will be reaped

ConnectionTable

public ConnectionTable(ConnectionTable.Receiver r,
                       java.net.InetAddress bind_addr,
                       java.net.InetAddress external_addr,
                       int srv_port,
                       int max_port)
                throws java.lang.Exception
Create a ConnectionTable

Parameters:
r - A reference to a receiver of all messages received by this class. Method receive() will be called.
bind_addr - The host name or IP address of the interface to which the server socket will bind. This is interesting only in multi-homed systems. If bind_addr is null, the server socket will bind to the first available interface (e.g. /dev/hme0 on Solaris or /dev/eth0 on Linux systems).
external_addr - The address which will be broadcast to the group (the externally visible address which this host should be contacted on). If external_addr is null, it will default to the same address that the server socket is bound to.
srv_port - The port to which the server socket will bind to. If this port is reserved, the next free port will be taken (incrementing srv_port).
max_port - The largest port number that the server socket will be bound to. If max_port < srv_port then there is no limit.

ConnectionTable

public ConnectionTable(ConnectionTable.Receiver r,
                       java.net.InetAddress bind_addr,
                       java.net.InetAddress external_addr,
                       int srv_port,
                       int max_port,
                       long reaper_interval,
                       long conn_expire_time)
                throws java.lang.Exception
ConnectionTable including a connection reaper. Connections that have been idle for more than conn_expire_time milliseconds will be closed and removed from the connection table. On next access they will be re-created.

Parameters:
r - The Receiver
bind_addr - The host name or IP address of the interface to which the server socket will bind. This is interesting only in multi-homed systems. If bind_addr is null, the server socket will bind to the first available interface (e.g. /dev/hme0 on Solaris or /dev/eth0 on Linux systems).
external_addr - The address which will be broadcast to the group (the externally visible address which this host should be contacted on). If external_addr is null, it will default to the same address that the server socket is bound to.
srv_port - The port to which the server socket will bind to. If this port is reserved, the next free port will be taken (incrementing srv_port).
max_port - The largest port number that the server socket will be bound to. If max_port < srv_port then there is no limit.
reaper_interval - Number of milliseconds to wait for reaper between attepts to reap idle connections
conn_expire_time - Number of milliseconds a connection can be idle (no traffic sent or received until it will be reaped
Method Detail

setReceiver

public void setReceiver(ConnectionTable.Receiver r)

addConnectionListener

public void addConnectionListener(ConnectionTable.ConnectionListener l)

removeConnectionListener

public void removeConnectionListener(ConnectionTable.ConnectionListener l)

getLocalAddress

public Address getLocalAddress()

getSendBufferSize

public int getSendBufferSize()

setSendBufferSize

public void setSendBufferSize(int send_buf_size)

getReceiveBufferSize

public int getReceiveBufferSize()

setReceiveBufferSize

public void setReceiveBufferSize(int recv_buf_size)

getSocketConnectionTimeout

public int getSocketConnectionTimeout()

setSocketConnectionTimeout

public void setSocketConnectionTimeout(int sock_conn_timeout)

getNumConnections

public int getNumConnections()

getUseSendQueues

public boolean getUseSendQueues()

setUseSendQueues

public void setUseSendQueues(boolean flag)

send

public void send(Address dest,
                 byte[] data,
                 int offset,
                 int length)
          throws java.lang.Exception
Throws:
java.lang.Exception

start

public void start()
           throws java.lang.Exception
Throws:
java.lang.Exception

init

protected void init()
             throws java.lang.Exception
Throws:
java.lang.Exception

stop

public void stop()
Closes all open sockets, the server socket and all threads waiting for incoming messages


remove

public void remove(Address addr)
Remove addrfrom connection table. This is typically triggered when a member is suspected.


run

public void run()
Acceptor thread. Continuously accept new connections. Create a new thread for each new connection and put it in conns. When the thread should stop, it is interrupted by the thread creator.

Specified by:
run in interface java.lang.Runnable

receive

public void receive(Address sender,
                    byte[] data,
                    int offset,
                    int length)
Calls the receiver callback. We serialize access to this method because it may be called concurrently by several Connection handler threads. Therefore the receiver doesn't need to synchronize.


toString

public java.lang.String toString()

createServerSocket

protected java.net.ServerSocket createServerSocket(int start_port,
                                                   int end_port)
                                            throws java.lang.Exception
Finds first available port starting at start_port and returns server socket. Will not bind to port >end_port. Sets srv_port

Throws:
java.lang.Exception


Copyright ? 1998-2005 Bela Ban. All Rights Reserved.