org.jboss.remoting.transport.socket
Class ServerThread

java.lang.Object
  extended by java.lang.Thread
      extended by org.jboss.remoting.transport.socket.ServerThread
All Implemented Interfaces:
java.lang.Runnable

public class ServerThread
extends java.lang.Thread

This Thread object hold a single Socket connection to a client and is kept alive until a timeout happens, or it is aged out of the SocketServerInvoker's LRU cache.

There is also a separate thread pool that is used if the client disconnects. This thread/object is re-used in that scenario and that scenario only.

This is a customization of the same ServerThread class used witht the PookedInvoker. The custimization was made to allow for remoting marshaller/unmarshaller.

Version:
$Revision: 5020 $
Author:
Bill Burke, Tom Elrod, Ovidiu Feodorov

Nested Class Summary
static class ServerThread.AcknowledgeFailure
           
static class ServerThread.EvictionException
           
 
Nested classes/interfaces inherited from class java.lang.Thread
java.lang.Thread.State, java.lang.Thread.UncaughtExceptionHandler
 
Field Summary
protected  LRUPool clientpool
           
static java.lang.String CONTINUE_AFTER_TIMEOUT
          Key used to determine if thread should return to threadpool after SocketTimeoutException
protected  long enteredEvictable
           
static java.lang.String EVICTABILITY_TIMEOUT
          Used to configure period during which ServerThread is not evictable on first invocation even when in evictable state.
static int EVICTABILITY_TIMEOUT_DEFAULT
           
protected  boolean evictable
           
protected  java.lang.Object evictionLock
           
protected  SocketServerInvoker invoker
           
protected  Marshaller marshaller
           
protected  boolean performVersioning
           
protected  boolean running
           
protected  java.lang.Class serverSocketClass
           
protected  java.lang.String serverSocketClassName
           
protected  boolean shutdown
           
protected  SocketWrapper socketWrapper
           
protected  java.util.LinkedList threadpool
           
protected  UnMarshaller unmarshaller
           
protected  int version
           
 
Fields inherited from class java.lang.Thread
MAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITY
 
Constructor Summary
ServerThread(java.net.Socket socket, SocketServerInvoker invoker, LRUPool clientpool, java.util.LinkedList threadpool, int timeout, java.lang.String serverSocketClassName)
           
 
Method Summary
protected  void acknowledge(SocketWrapper socketWrapper)
           
protected  void completeInvocation(SocketWrapper socketWrapper, java.io.InputStream inputStream, java.io.OutputStream outputStream, boolean performVersioning, int version)
           
protected  void dorun()
          This is needed because Object*Streams leak
 boolean evict()
          If this ServerThread is in acknowledge() or readVersion(), evict() will close the socket so that thread returns itself to threadpool.
 boolean getCheckingConnection()
          Indicates if server will check with client (via an ACK) to see if is still there.
 long getLastRequestTimestamp()
           
static int nextID()
           
protected  void processInvocation(SocketWrapper socketWrapper, java.io.InputStream inputStream, java.io.OutputStream outputStream)
           
 void run()
           
 void shouldCheckConnection(boolean checkConnection)
          Sets if server thread should check connection before continue to process on next invocation request.
 void shutdown()
           
 java.lang.String toString()
          This method is intended to be used when need to unblock I/O read, which the thread will automatically loop back to do after processing a request.
protected  java.lang.Object versionedRead(java.io.InputStream inputStream, ServerInvoker invoker, java.lang.ClassLoader classLoader, int version)
           
 void wakeup(java.net.Socket socket, int timeout, SocketServerInvoker invoker)
           
 
Methods inherited from class java.lang.Thread
activeCount, checkAccess, countStackFrames, currentThread, destroy, dumpStack, enumerate, getAllStackTraces, getContextClassLoader, getDefaultUncaughtExceptionHandler, getId, getName, getPriority, getStackTrace, getState, getThreadGroup, getUncaughtExceptionHandler, holdsLock, interrupt, interrupted, isAlive, isDaemon, isInterrupted, join, join, join, resume, setContextClassLoader, setDaemon, setDefaultUncaughtExceptionHandler, setName, setPriority, setUncaughtExceptionHandler, sleep, sleep, start, stop, stop, suspend, yield
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

EVICTABILITY_TIMEOUT

public static final java.lang.String EVICTABILITY_TIMEOUT
Used to configure period during which ServerThread is not evictable on first invocation even when in evictable state.

See Also:
Constant Field Values

EVICTABILITY_TIMEOUT_DEFAULT

public static final int EVICTABILITY_TIMEOUT_DEFAULT
See Also:
Constant Field Values

CONTINUE_AFTER_TIMEOUT

public static final java.lang.String CONTINUE_AFTER_TIMEOUT
Key used to determine if thread should return to threadpool after SocketTimeoutException

See Also:
Constant Field Values

running

protected volatile boolean running

shutdown

protected volatile boolean shutdown

evictable

protected boolean evictable

enteredEvictable

protected long enteredEvictable

evictionLock

protected java.lang.Object evictionLock

clientpool

protected LRUPool clientpool

threadpool

protected java.util.LinkedList threadpool

serverSocketClassName

protected java.lang.String serverSocketClassName

serverSocketClass

protected java.lang.Class serverSocketClass

invoker

protected SocketServerInvoker invoker

socketWrapper

protected SocketWrapper socketWrapper

marshaller

protected Marshaller marshaller

unmarshaller

protected UnMarshaller unmarshaller

version

protected int version

performVersioning

protected boolean performVersioning
Constructor Detail

ServerThread

public ServerThread(java.net.Socket socket,
                    SocketServerInvoker invoker,
                    LRUPool clientpool,
                    java.util.LinkedList threadpool,
                    int timeout,
                    java.lang.String serverSocketClassName)
             throws java.lang.Exception
Throws:
java.lang.Exception
Method Detail

nextID

public static int nextID()

run

public void run()
Specified by:
run in interface java.lang.Runnable
Overrides:
run in class java.lang.Thread

wakeup

public void wakeup(java.net.Socket socket,
                   int timeout,
                   SocketServerInvoker invoker)
            throws java.lang.Exception
Throws:
java.lang.Exception

getLastRequestTimestamp

public long getLastRequestTimestamp()

shutdown

public void shutdown()

shouldCheckConnection

public void shouldCheckConnection(boolean checkConnection)
Sets if server thread should check connection before continue to process on next invocation request. If is set to true, will send an ACK to client to verify client is still connected on same socket.


getCheckingConnection

public boolean getCheckingConnection()
Indicates if server will check with client (via an ACK) to see if is still there.


evict

public boolean evict()
If this ServerThread is in acknowledge() or readVersion(), evict() will close the socket so that thread returns itself to threadpool.

Returns:
true if eviction is possible

toString

public java.lang.String toString()
This method is intended to be used when need to unblock I/O read, which the thread will automatically loop back to do after processing a request.

Overrides:
toString in class java.lang.Thread

dorun

protected void dorun()
This is needed because Object*Streams leak


processInvocation

protected void processInvocation(SocketWrapper socketWrapper,
                                 java.io.InputStream inputStream,
                                 java.io.OutputStream outputStream)
                          throws java.lang.Exception
Throws:
java.lang.Exception

completeInvocation

protected void completeInvocation(SocketWrapper socketWrapper,
                                  java.io.InputStream inputStream,
                                  java.io.OutputStream outputStream,
                                  boolean performVersioning,
                                  int version)
                           throws java.lang.Exception
Throws:
java.lang.Exception

acknowledge

protected void acknowledge(SocketWrapper socketWrapper)
                    throws java.lang.Exception
Throws:
java.lang.Exception

versionedRead

protected java.lang.Object versionedRead(java.io.InputStream inputStream,
                                         ServerInvoker invoker,
                                         java.lang.ClassLoader classLoader,
                                         int version)
                                  throws java.io.IOException,
                                         java.lang.ClassNotFoundException
Throws:
java.io.IOException
java.lang.ClassNotFoundException


Copyright ? 1998-2005 JBoss Inc . All Rights Reserved.