org.enhydra.servlet.connectionMethods.EnhydraDirector
Class EnhydraDirectorConnectionMethod

java.lang.Object
  extended byorg.enhydra.servlet.connectionMethods.EnhydraDirector.EnhydraDirectorConnectionMethod
All Implemented Interfaces:
org.apache.catalina.Connector, org.apache.catalina.Lifecycle, javax.management.MBeanRegistration, java.lang.Runnable

public class EnhydraDirectorConnectionMethod
extends java.lang.Object
implements org.apache.catalina.Connector, org.apache.catalina.Lifecycle, javax.management.MBeanRegistration, 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.4 $
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.
protected  org.apache.catalina.Container container
          The Container used for processing requests received by this Connector.
static int DEFAULT_CLIENT_TIMEOUT
           
static int DEFAULT_NUM_THREADS
           
static int DEFAULT_QUEUE_SIZE
           
static int DEFAULT_THREAD_TIMEOUT
           
protected  java.lang.String domain
           
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  org.apache.catalina.util.LifecycleSupport lifecycle
          The lifecycle event support for this component.
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.
protected  javax.management.MBeanServer mserver
           
static java.lang.String NUM_THREADS
           
protected  int numWaiting
          The total number EnhydraDirectorHandler threads (active and waiting).
protected  javax.management.ObjectName oname
           
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
           
 
Fields inherited from interface org.apache.catalina.Lifecycle
AFTER_START_EVENT, AFTER_STOP_EVENT, BEFORE_START_EVENT, BEFORE_STOP_EVENT, START_EVENT, STOP_EVENT
 
Constructor Summary
EnhydraDirectorConnectionMethod()
           
 
Method Summary
 void addLifecycleListener(org.apache.catalina.LifecycleListener listener)
          Add a lifecycle event listener to this component.
 org.apache.catalina.Request createRequest()
          Create (or allocate) and return a Request object suitable for specifying the contents of a Request to the responsible Container.
 org.apache.catalina.Response createResponse()
          Create (or allocate) and return a Response object suitable for receiving the contents of a Response from the responsible Container.
 void destroy()
          Shut down the connection method.
 boolean equivalent(EnhydraDirectorConnectionMethod compareObject)
          Compares the port number to determine equivalency
 org.apache.catalina.LifecycleListener[] findLifecycleListeners()
          Get the lifecycle listeners associated with this lifecycle.
 java.lang.String getAddress()
          Return the bind IP address for this Connector.
 java.lang.String getAuthKey()
          Get the authentication key for this connection.
 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.Container getContainer()
          Return the Container used for processing requests received by this Connector.
 boolean getDebug()
           
 java.lang.String getDomain()
           
 boolean getEnableLookups()
          Return the "enable DNS lookups" flag.
protected  EnhydraDirectorConnection getEnhydraDirectorConnection()
           
 org.apache.catalina.net.ServerSocketFactory getFactory()
          Return the server socket factory used by this Container.
 java.lang.String getInfo()
          Return descriptive information about this Connector implementation.
 org.apache.tomcat.util.http.mapper.Mapper getMapper()
          Return the mapper.
 org.apache.coyote.tomcat5.MapperListener getMapperListener()
          Return the mapper.
 int getNumThreads()
          Gets the maximum number of handler threads associated with this connection method.
 javax.management.ObjectName getObjectName()
           
 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.
 int getRedirectPort()
          Return the port number to which a request should be redirected if it comes in on a non-SSL port and is subject to a security constraint with a transport guarantee that requires SSL.
 java.lang.String getScheme()
          Return the scheme that will be assigned to requests received through this connector.
 boolean getSecure()
          Return the secure connection flag that will be assigned to requests received through this connector.
 org.apache.catalina.Service getService()
          Returns the Service with which we are associated.
 boolean getSessionAffinity()
          getSessionAffinity() and setSessionAffinity().
 int getThreadTimeout()
          Gets the thread timeout associated with this connection method.
 void initialize()
           
 void pause()
           
 void postDeregister()
           
 void postRegister(java.lang.Boolean registrationDone)
           
 void preDeregister()
           
 javax.management.ObjectName preRegister(javax.management.MBeanServer server, javax.management.ObjectName name)
           
 void removeLifecycleListener(org.apache.catalina.LifecycleListener listener)
          Remove a lifecycle event listener from this component.
 void resume()
           
 void run()
          Runs the EnhydraDirectorConnectionMethod.
 void setAddress(java.lang.String address)
          Set the bind IP address for this Connector.
 void setAuthKey(java.lang.String authKey)
          Set the authentication key for this connection.
 void setBindAddress(java.lang.String addr)
          Sets the current Bind address, if any.
 void setClientTimeout(int clientTimeout)
           
 void setContainer(org.apache.catalina.Container container)
          Set the Container used for processing requests received by this Connector.
 void setDebug(boolean debug)
           
 void setEnableLookups(boolean enableLookups)
          Set the "enable DNS lookups" flag.
 void setFactory(org.apache.catalina.net.ServerSocketFactory factory)
          Set the server socket factory used by this Container.
 void setNumThreads(int numThreads)
           
 void setPort(int port)
           
 void setPrefixHint(java.lang.String hint)
           
 void setQueueSize(int queueSize)
           
 void setRedirectPort(int redirectPort)
          Set the redirect port number.
 void setScheme(java.lang.String scheme)
          Set the scheme that will be assigned to requests received through this connector.
 void setSecure(boolean secure)
          Set the secure connection flag that will be assigned to requests received through this connector.
 void setService(org.apache.catalina.Service service)
          Set the Service with which we are associated.
 void setSessionAffinity(boolean sessionAffinity)
           
 void setThreadTimeout(int threadTimeout)
           
 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).


container

protected org.apache.catalina.Container container
The Container used for processing requests received by this Connector.


lifecycle

protected org.apache.catalina.util.LifecycleSupport lifecycle
The lifecycle event support for this component.


domain

protected java.lang.String domain

oname

protected javax.management.ObjectName oname

mserver

protected javax.management.MBeanServer mserver
Constructor Detail

EnhydraDirectorConnectionMethod

public EnhydraDirectorConnectionMethod()
Method Detail

getService

public org.apache.catalina.Service getService()
Returns the Service with which we are associated.

Specified by:
getService in interface org.apache.catalina.Connector

setService

public void setService(org.apache.catalina.Service service)
Set the Service with which we are associated.

Specified by:
setService in interface org.apache.catalina.Connector

initialize

public void initialize()
Specified by:
initialize in interface org.apache.catalina.Connector

getAddress

public java.lang.String getAddress()
Return the bind IP address for this Connector.


setAddress

public void setAddress(java.lang.String address)
Set the bind IP address for this Connector.

Parameters:
address - The bind IP address

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.

getMapper

public org.apache.tomcat.util.http.mapper.Mapper getMapper()
Return the mapper.


getMapperListener

public org.apache.coyote.tomcat5.MapperListener getMapperListener()
Return the mapper.


getDebug

public boolean getDebug()

setDebug

public void setDebug(boolean debug)

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)

getThreadTimeout

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

Returns:
threadTimeout.

setThreadTimeout

public void setThreadTimeout(int threadTimeout)

getContainer

public org.apache.catalina.Container getContainer()
Return the Container used for processing requests received by this Connector.

Specified by:
getContainer in interface org.apache.catalina.Connector

setContainer

public void setContainer(org.apache.catalina.Container container)
Set the Container used for processing requests received by this Connector.

Specified by:
setContainer in interface org.apache.catalina.Connector
Parameters:
container - The new Container to use

getEnableLookups

public boolean getEnableLookups()
Return the "enable DNS lookups" flag.

Specified by:
getEnableLookups in interface org.apache.catalina.Connector

setEnableLookups

public void setEnableLookups(boolean enableLookups)
Set the "enable DNS lookups" flag.

Specified by:
setEnableLookups in interface org.apache.catalina.Connector
Parameters:
enableLookups - The new "enable DNS lookups" flag value

getFactory

public org.apache.catalina.net.ServerSocketFactory getFactory()
Return the server socket factory used by this Container.

Specified by:
getFactory in interface org.apache.catalina.Connector

setFactory

public void setFactory(org.apache.catalina.net.ServerSocketFactory factory)
Set the server socket factory used by this Container.

Specified by:
setFactory in interface org.apache.catalina.Connector
Parameters:
factory - The new server socket factory

getInfo

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

Specified by:
getInfo in interface org.apache.catalina.Connector

getRedirectPort

public int getRedirectPort()
Return the port number to which a request should be redirected if it comes in on a non-SSL port and is subject to a security constraint with a transport guarantee that requires SSL.

Specified by:
getRedirectPort in interface org.apache.catalina.Connector

setRedirectPort

public void setRedirectPort(int redirectPort)
Set the redirect port number.

Specified by:
setRedirectPort in interface org.apache.catalina.Connector
Parameters:
redirectPort - The redirect port number (non-SSL to SSL)

getScheme

public java.lang.String getScheme()
Return the scheme that will be assigned to requests received through this connector. Default value is "http".

Specified by:
getScheme in interface org.apache.catalina.Connector

setScheme

public void setScheme(java.lang.String scheme)
Set the scheme that will be assigned to requests received through this connector.

Specified by:
setScheme in interface org.apache.catalina.Connector
Parameters:
scheme - The new scheme

getSecure

public boolean getSecure()
Return the secure connection flag that will be assigned to requests received through this connector. Default value is "false".

Specified by:
getSecure in interface org.apache.catalina.Connector

setSecure

public void setSecure(boolean secure)
Set the secure connection flag that will be assigned to requests received through this connector.

Specified by:
setSecure in interface org.apache.catalina.Connector
Parameters:
secure - The new secure connection flag

createRequest

public org.apache.catalina.Request createRequest()
Create (or allocate) and return a Request object suitable for specifying the contents of a Request to the responsible Container.

Specified by:
createRequest in interface org.apache.catalina.Connector

createResponse

public org.apache.catalina.Response createResponse()
Create (or allocate) and return a Response object suitable for receiving the contents of a Response from the responsible Container.

Specified by:
createResponse in interface org.apache.catalina.Connector

addLifecycleListener

public void addLifecycleListener(org.apache.catalina.LifecycleListener listener)
Add a lifecycle event listener to this component.

Specified by:
addLifecycleListener in interface org.apache.catalina.Lifecycle
Parameters:
listener - The listener to add

findLifecycleListeners

public org.apache.catalina.LifecycleListener[] findLifecycleListeners()
Get the lifecycle listeners associated with this lifecycle. If this Lifecycle has no listeners registered, a zero-length array is returned.

Specified by:
findLifecycleListeners in interface org.apache.catalina.Lifecycle

removeLifecycleListener

public void removeLifecycleListener(org.apache.catalina.LifecycleListener listener)
Remove a lifecycle event listener from this component.

Specified by:
removeLifecycleListener in interface org.apache.catalina.Lifecycle
Parameters:
listener - The listener to add

start

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

Specified by:
start in interface org.apache.catalina.Lifecycle
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.

Specified by:
stop in interface org.apache.catalina.Lifecycle
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

pause

public void pause()
           throws org.apache.catalina.LifecycleException
Specified by:
pause in interface org.apache.catalina.Connector
Throws:
org.apache.catalina.LifecycleException

resume

public void resume()
            throws org.apache.catalina.LifecycleException
Specified by:
resume in interface org.apache.catalina.Connector
Throws:
org.apache.catalina.LifecycleException

getObjectName

public javax.management.ObjectName getObjectName()

getDomain

public java.lang.String getDomain()

preRegister

public javax.management.ObjectName preRegister(javax.management.MBeanServer server,
                                               javax.management.ObjectName name)
                                        throws java.lang.Exception
Specified by:
preRegister in interface javax.management.MBeanRegistration
Throws:
java.lang.Exception

postRegister

public void postRegister(java.lang.Boolean registrationDone)
Specified by:
postRegister in interface javax.management.MBeanRegistration

preDeregister

public void preDeregister()
                   throws java.lang.Exception
Specified by:
preDeregister in interface javax.management.MBeanRegistration
Throws:
java.lang.Exception

postDeregister

public void postDeregister()
Specified by:
postDeregister in interface javax.management.MBeanRegistration