    All Packages  Class Hierarchy  This Package  Previous  Next  Index

# Class w3c.jigsaw.http.ClientPool

    java.lang.Object
       |
       +----w3c.jigsaw.http.ClientPool

public class ClientPool
extends Object
implements PropertyMonitoring

The client pool is a kind of client factory. Each time the server gets a new connection, it calls the client pool to bound a client object (newly created or spared) to handle it.

##

AVG_DEAD
AVG_HIGH
AVG_LIGHT
AVG_NORMAL
MAXSPARE_FREE
MAXSPARE_FREE_P
MAXSPARE_IDLE
MAXSPARE_IDLE_P
MAXTHREADS
MAXTHREADS_P
MINSPARE_FREE
MINSPARE_FREE_P
MINSPARE_IDLE

##

addClient(boolean)
  Create a new client for this pool.
clientConnectionFinished(Client)
  Notify that this client has finished with its connection.
clientFinished(Client)
  Notify that this client has been killed.
deleteClient(ClientState)
  Remove this client state from the glohbal client list.
handleConnection(Socket)
  Handle the given connection.
killClients(boolean)
killSomeClients()
notifyIdle(Client)
  The client notifies the pool that it enters idle state.
notifyUse(Client)
  The client notifies the pool that is has been activated.
propertyChanged(String)
  Some property have changed, update our setting.
shutdown(boolean)
  Shutdown the client pool.

##

MINSPARE_FREE_P

      public final static String MINSPARE_FREE_P

MAXSPARE_FREE_P

      public final static String MAXSPARE_FREE_P

MAXSPARE_IDLE_P

      public final static String MAXSPARE_IDLE_P

MAXTHREADS_P

      public final static String MAXTHREADS_P

MINSPARE_FREE

      public final static int MINSPARE_FREE

MAXSPARE_FREE

      public final static int MAXSPARE_FREE

MINSPARE_IDLE

      public final static int MINSPARE_IDLE

MAXSPARE_IDLE

      public final static int MAXSPARE_IDLE

MAXTHREADS

      public final static int MAXTHREADS

AVG_LIGHT

      public final static int AVG_LIGHT

AVG_NORMAL

      public final static int AVG_NORMAL

AVG_HIGH

      public final static int AVG_HIGH

AVG_DEAD

      public final static int AVG_DEAD

##

propertyChanged

      public boolean propertyChanged(String name)

  Some property have changed, update our setting.
  Parameters:
    name - The name of the property that has changed.
  Returns:
    A boolean, true if we updated ourself successfully.

deleteClient

      protected synchronized void deleteClient(ClientState cs)

  Remove this client state from the glohbal client list.
  Parameters:
    cs - The client state to remove from the list.

addClient

      protected synchronized ClientState addClient(boolean free)

  Create a new client for this pool.
  Parameters:
    free - A boolean, if true the client is inserted straight into the free list, otherwise, it is not plugged into any list.
  Returns:
    A ClientState instance, if creation of a new client was allowed, null if no more clients could be created.

clientConnectionFinished

      protected boolean clientConnectionFinished(Client client)

  Notify that this client has finished with its connection. If the pool wants the client to be freed (because it has too many of them), it makes the client kill itself (which will trigger a call to the clientFinished method, were enventual cleanup is performed).
  Parameters:
    client - The client that is done with its connection.

clientFinished

      protected void clientFinished(Client client)

  Notify that this client has been killed.
  Parameters:
    client - The client that has terminate.

notifyUse

      protected void notifyUse(Client client)

  The client notifies the pool that is has been activated. The client state object is updated to unmark the client as idle.

  This method needs not be synchronized, as it affect only the client state, not the client list.

  Parameters:
    client - The activated client.

notifyIdle

      protected boolean notifyIdle(Client client)

  The client notifies the pool that it enters idle state.

  This method needs not be synchronized, as it affect only the client state, not the client list.

  Parameters:
    client - The client that is going to be idle.

killSomeClients

      protected void killSomeClients()

handleConnection

      public void handleConnection(Socket socket)

  Handle the given connection. Find a free client, bind it to the given socket, and run it. If we have reached our maximum allowed number of clients, kill some connections.

  A client enters the LRU list (and become a candidate for kill) only after it has handle one request (or if some timeout expires). This is performed by the first call to `notifyUse` which will silently insert the client into the LRU if it was not there already.

  This client pool does a lot of nice thinigs, but could probably be implemented in a much better way (while keeping the features it has). Contention arond the pool is probably concern number 1 of performances.

  Parameters:
    socket - The connection to handle.

killClients

      protected synchronized void killClients(boolean force)

shutdown

      public void shutdown(boolean force)

  Shutdown the client pool. If force is true, kill all running clients right now, otherwise, wait for them to terminate gracefully, and return when done.
  Parameters:
    force - Should we interrupt running clients.

    All Packages  Class Hierarchy  This Package  Previous  Next  Index