org.enhydra.servlet.connectionMethods.EnhydraDirector
Class EnhydraDirectorConnectionMethod

java.lang.Object
  extended byorg.enhydra.servlet.connectionMethods.EnhydraDirector.EnhydraDirectorConnectionMethod
All Implemented Interfaces:
java.lang.Runnable

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

The Enhydra connection method.

Receives and handles requests using the Enhydra Protocol. The protocol is loosely based on the proposed Apache JServ 2.1 protocol, which uses a packet transmission scheme to allow a more rich set of communcation features between web servers and Enhydra. These features include:

Round robin load balancing.

Persistent connections.

Connection Pools.

Callbacks to the front-end web server.

Version:
$Revision: 1.10 $
Author:
John Marco, Milin Radivoj
See Also:
org.enhydra.servlet.connectionMethods.StandardConnectionMethod

Field Summary
static java.lang.String AUTH_KEY
           
protected  java.lang.String authKey
          The authentication key for this connection.
protected  int backlog
          The backlog parameter for the server socket.
static java.lang.String BIND_ADDR
           
protected  java.lang.String bindAddress
          IP address to bind to.
static java.lang.String CLIENT_TIMEOUT
           
protected  int clientTimeout
          The maximum time for a thread to keep a socket connection to the client for.
protected  java.lang.String cmType
           
protected  CircularQueue connections
          The queue for incoming connections.
static int DEFAULT_CLIENT_TIMEOUT
           
static int DEFAULT_NUM_THREADS
           
static int DEFAULT_QUEUE_SIZE
           
static int DEFAULT_THREAD_TIMEOUT
           
static java.lang.String ENHYDRADIRECTOR
           
static java.lang.String errorHtml
          Return this HTML if an unexpected exception is thrown.
protected  java.lang.ThreadGroup handlers
          The thread group for EnhydraDirectorHandler threads.
protected  java.net.ServerSocket listenerSocket
          The server socket.
protected  java.util.Vector liveThreads
          A list of references to all EnhydraDirectorHandler threads (active and waiting).
protected  int maxHandlers
          The maximum number of EnhydraDirectorHandler threads.
protected  int maxQueue
          The maximum size of the connection queue.
static java.lang.String NUM_THREADS
           
protected  int numWaiting
          The total number EnhydraDirectorHandler threads (active and waiting).
protected  int port
          The port number for this connection method instance to bind to.
static java.lang.String PORT
           
static java.lang.String PREFIX_HINT
           
protected  java.lang.String prefixHint
          The URL used on the external (i.e.
static java.lang.String QUEUE_SIZE
           
protected static java.lang.String SERVER_BUSY_MSG
           
static java.lang.String SESSION_AFFINITY
           
protected  boolean sessionAffinity
          The session affinity flag NOTE: This attribute is not settable through the multiserver administration screen.
static java.lang.String THREAD_TIMEOUT
           
protected  int threadTimeout
          The maximum time for an EnhydraDirectorHandler thread to wait for a connection.
static java.lang.String TYPE
           
 
Constructor Summary
EnhydraDirectorConnectionMethod()
           
EnhydraDirectorConnectionMethod(org.apache.coyote.Adapter adapter)
           
 
Method Summary
 void destroy()
          Shut down the connection method.
 boolean equivalent(EnhydraDirectorConnectionMethod compareObject)
          Compares the port number to determine equivalency
 java.lang.String getAuthKey()
          Get the authentication key for this connection.
 int getBacklog()
           
 java.lang.String getBindAddress()
          Gets the current Bind address, if any.
 int getClientTimeout()
          Gets the client timeout associated with this connection method.
protected  java.net.Socket getConnection()
          Returns an socket from the connection queue.
 org.apache.catalina.connector.Connector getConnector()
           
 java.lang.String getDomain()
           
 boolean getEmptySessionPath()
           
protected  EnhydraDirectorConnection getEnhydraDirectorConnection()
           
 java.lang.String getInfo()
          Return descriptive information about this Connector implementation.
 int getNumThreads()
          Gets the maximum number of handler threads associated with this connection method.
 int getPort()
          Gets the port associated with this connection method.
 java.lang.String getPrefixHint()
          getPrefixHint() and setPrefixHint().
 int getQueueSize()
          Gets the maximum queue size associated with this connection method.
 boolean getRebalanceIfSessionExpired()
           
 boolean getSessionAffinity()
          getSessionAffinity() and setSessionAffinity().
 boolean getTcpNoDelay()
           
 int getThreadTimeout()
          Gets the thread timeout associated with this connection method.
 java.lang.String getURIEncoding()
           
 boolean getUseBodyEncodingForURI()
           
 void run()
          Runs the EnhydraDirectorConnectionMethod.
 void setAdapter(org.apache.coyote.Adapter adapter)
           
 void setAuthKey(java.lang.String authKey)
          Set the authentication key for this connection.
 void setBacklog(int i)
           
 void setBindAddress(java.lang.String addr)
          Sets the current Bind address, if any.
 void setClientTimeout(int clientTimeout)
           
 void setConnector(org.apache.catalina.connector.Connector connector)
           
 void setDomain(java.lang.String d)
           
 void setEmptySessionPath(boolean value)
           
 void setNumThreads(int numThreads)
           
 void setPort(int port)
           
 void setPrefixHint(java.lang.String hint)
           
 void setQueueSize(int queueSize)
           
 void setRebalanceIfSessionExpired(boolean value)
           
 void setSessionAffinity(boolean sessionAffinity)
           
 void setTcpNoDelay(boolean b)
           
 void setThreadTimeout(int threadTimeout)
           
 void setURIEncoding(java.lang.String enc)
           
 void setUseBodyEncodingForURI(boolean use)
           
 void start()
          Begin processing requests via this Connector.
 void stop()
          Terminate processing requests via this Connector.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

errorHtml

public static final java.lang.String errorHtml
Return this HTML if an unexpected exception is thrown. Suggested use: response.sendError(HttpServletResponse.SC_SERVER_ERROR, ConnectionMethod.errorHtml);

See Also:
Constant Field Values

SERVER_BUSY_MSG

protected static final java.lang.String SERVER_BUSY_MSG
See Also:
Constant Field Values

ENHYDRADIRECTOR

public static final java.lang.String ENHYDRADIRECTOR
See Also:
Constant Field Values

TYPE

public static final java.lang.String TYPE
See Also:
Constant Field Values

PORT

public static final java.lang.String PORT
See Also:
Constant Field Values

BIND_ADDR

public static final java.lang.String BIND_ADDR
See Also:
Constant Field Values

PREFIX_HINT

public static final java.lang.String PREFIX_HINT
See Also:
Constant Field Values

SESSION_AFFINITY

public static final java.lang.String SESSION_AFFINITY
See Also:
Constant Field Values

AUTH_KEY

public static final java.lang.String AUTH_KEY
See Also:
Constant Field Values

NUM_THREADS

public static final java.lang.String NUM_THREADS
See Also:
Constant Field Values

QUEUE_SIZE

public static final java.lang.String QUEUE_SIZE
See Also:
Constant Field Values

THREAD_TIMEOUT

public static final java.lang.String THREAD_TIMEOUT
See Also:
Constant Field Values

CLIENT_TIMEOUT

public static final java.lang.String CLIENT_TIMEOUT
See Also:
Constant Field Values

DEFAULT_NUM_THREADS

public static final int DEFAULT_NUM_THREADS
See Also:
Constant Field Values

DEFAULT_QUEUE_SIZE

public static final int DEFAULT_QUEUE_SIZE
See Also:
Constant Field Values

DEFAULT_THREAD_TIMEOUT

public static final int DEFAULT_THREAD_TIMEOUT
See Also:
Constant Field Values

DEFAULT_CLIENT_TIMEOUT

public static final int DEFAULT_CLIENT_TIMEOUT
See Also:
Constant Field Values

cmType

protected java.lang.String cmType

port

protected int port
The port number for this connection method instance to bind to.


bindAddress

protected java.lang.String bindAddress
IP address to bind to.


prefixHint

protected java.lang.String prefixHint
The URL used on the external (i.e. Apache) web server to get to this application.


sessionAffinity

protected boolean sessionAffinity
The session affinity flag NOTE: This attribute is not settable through the multiserver administration screen.


authKey

protected java.lang.String authKey
The authentication key for this connection.

If null or an empty string, then no authentication is required.


listenerSocket

protected java.net.ServerSocket listenerSocket
The server socket.


connections

protected CircularQueue connections
The queue for incoming connections.


maxQueue

protected int maxQueue
The maximum size of the connection queue.


handlers

protected java.lang.ThreadGroup handlers
The thread group for EnhydraDirectorHandler threads.


maxHandlers

protected int maxHandlers
The maximum number of EnhydraDirectorHandler threads.


threadTimeout

protected int threadTimeout
The maximum time for an EnhydraDirectorHandler thread to wait for a connection.


clientTimeout

protected int clientTimeout
The maximum time for a thread to keep a socket connection to the client for.


backlog

protected int backlog
The backlog parameter for the server socket.


numWaiting

protected int numWaiting
The total number EnhydraDirectorHandler threads (active and waiting).


liveThreads

protected java.util.Vector liveThreads
A list of references to all EnhydraDirectorHandler threads (active and waiting).

Constructor Detail

EnhydraDirectorConnectionMethod

public EnhydraDirectorConnectionMethod(org.apache.coyote.Adapter adapter)

EnhydraDirectorConnectionMethod

public EnhydraDirectorConnectionMethod()
Method Detail

getTcpNoDelay

public boolean getTcpNoDelay()

setTcpNoDelay

public void setTcpNoDelay(boolean b)

getBacklog

public int getBacklog()

setBacklog

public void setBacklog(int i)

getUseBodyEncodingForURI

public boolean getUseBodyEncodingForURI()

setUseBodyEncodingForURI

public void setUseBodyEncodingForURI(boolean use)

getURIEncoding

public java.lang.String getURIEncoding()

setURIEncoding

public void setURIEncoding(java.lang.String enc)

getConnector

public org.apache.catalina.connector.Connector getConnector()

setConnector

public void setConnector(org.apache.catalina.connector.Connector connector)

getRebalanceIfSessionExpired

public boolean getRebalanceIfSessionExpired()

setRebalanceIfSessionExpired

public void setRebalanceIfSessionExpired(boolean value)

getEmptySessionPath

public boolean getEmptySessionPath()

setEmptySessionPath

public void setEmptySessionPath(boolean value)

run

public void run()
Runs the EnhydraDirectorConnectionMethod.

Specified by:
run in interface java.lang.Runnable

getEnhydraDirectorConnection

protected EnhydraDirectorConnection getEnhydraDirectorConnection()

getConnection

protected java.net.Socket getConnection()
Returns an socket from the connection queue.

Returns:
a reference to the object if successful, null otherwise.

equivalent

public boolean equivalent(EnhydraDirectorConnectionMethod compareObject)
Compares the port number to determine equivalency

Parameters:
compareObject - The object to compare this to
Throws:
ConnectionMethodException - If an error occurs.

setAdapter

public void setAdapter(org.apache.coyote.Adapter adapter)

getPort

public int getPort()
Gets the port associated with this connection method.

Returns:
port number.

setPort

public void setPort(int port)

getBindAddress

public java.lang.String getBindAddress()
Gets the current Bind address, if any.


setBindAddress

public void setBindAddress(java.lang.String addr)
Sets the current Bind address, if any.


getPrefixHint

public java.lang.String getPrefixHint()
getPrefixHint() and setPrefixHint().

Returns:
port number.

setPrefixHint

public void setPrefixHint(java.lang.String hint)

getSessionAffinity

public boolean getSessionAffinity()
getSessionAffinity() and setSessionAffinity().

Returns:
session affinity flag

setSessionAffinity

public void setSessionAffinity(boolean sessionAffinity)

getAuthKey

public java.lang.String getAuthKey()
Get the authentication key for this connection.

Returns null if authentication is not required of clients.

Returns:
The authentication Key, or null if none.

setAuthKey

public void setAuthKey(java.lang.String authKey)
Set the authentication key for this connection.

Set to null if authentication with clients is not needed.

We don't allow auth key of all whitespace because it is most likely the result of accidental data entry in an otherwise blank 'key' field.

Parameters:
authKey - The new authtication key, or null if authentication is not needed.

getNumThreads

public int getNumThreads()
Gets the maximum number of handler threads associated with this connection method.

Returns:
numThreads.

setNumThreads

public void setNumThreads(int numThreads)

getQueueSize

public int getQueueSize()
Gets the maximum queue size associated with this connection method.

Returns:
queueSize.

setQueueSize

public void setQueueSize(int queueSize)

getClientTimeout

public int getClientTimeout()
Gets the client timeout associated with this connection method.

Returns:
clientTimeout.

setClientTimeout

public void setClientTimeout(int clientTimeout)

setDomain

public void setDomain(java.lang.String d)

getDomain

public java.lang.String getDomain()

getThreadTimeout

public int getThreadTimeout()
Gets the thread timeout associated with this connection method.

Returns:
threadTimeout.

setThreadTimeout

public void setThreadTimeout(int threadTimeout)

getInfo

public java.lang.String getInfo()
Return descriptive information about this Connector implementation.


start

public void start()
Begin processing requests via this Connector.

Throws:
org.apache.catalina.LifecycleException - if a fatal startup error occurs

stop

public void stop()
          throws org.apache.catalina.LifecycleException
Terminate processing requests via this Connector.

Throws:
org.apache.catalina.LifecycleException - if a fatal shutdown error occurs

destroy

public void destroy()
             throws java.lang.Exception
Shut down the connection method. Releases the socket, so the port will be free for others to use.

Throws:
ConnectionMethodException - If an error occurs.
java.lang.Exception