Jigsaw server:

/*
 * Le serveur :
 */
  /*
   * Interface.
   */
  l'interface du demon est w3c/jigsaw/daemon/ServerHandler.java

  public String getIdentifier();
  public void errlog(String msg) ;
  public void log(String msg) ;
  public void trace(String msg);
  public InetAddress getInetAddress();

  public w3c.jigsaw.resources.ContainerResource getConfigResource();
     Restaure un etat

  public ServerHandler clone(ServerHandlerManager shm
             , String identifier
	     , ObservableProperties props)
	  throws ServerHandlerInitException;
     Copie un demon  (fork)

  public void initialize(ServerHandlerManager shm
             , String id
             , ObservableProperties props)
          throws ServerHandlerInitException;
     Initialise un demon

  public void shutdown();
     Arrete un demon et tous ses freres

  /*
   * Implementation.
   */
  l'implementation du demon est w3c/jigsaw/http/httpd.java
  un paquet de ressources:
    - version
    - serveur ID
    - hostname
    - repertoire de config
    - repertoire des fichiers exportes
    - port
    - traces
    - keep-alive
    - KA timeout
    - priorite des threads
    - buffer size
    - debug
    - Security manager
    - logger
    - shuffler path
    - store
    - root ressource
    - ...
  une hashtable contenant les serveurs.
  les variables contenant les ressources

  public boolean propertyChanged (String name)
      recharge une variable de la base.

  private void initializeServerSocket()
      initialise une instance de la classe
      w3c.jigsaw.http.socket.SocketClientFactory
      et demarre un thread httpd

  private void initializeProperties()
      initialize a partir des properties l'etat du serveur

  un paquet de fonctions pour lire l'etat du demon

  protected synchronized void cleanup(boolean restart)
      sauvegarde l'etat dans la base
      remet l'etat a zero
      si restart, reinitialise

  public synchronized void shutdown ()
     sauvegarde l'etat et tue la socket courante

  public synchronized void restart ()
     recree une nouvelle socket

  des fonctions de logging

  public void run ()
     demarre le serveur:
       + prompte
       + recupere une socket (java.net.ServerSocket)
       + while (la socket est pas fermee) {
	     fait un accept() dessus
	     setTcpNoDelay() sur la socket resultante
	     ensuite lance factory.handleConnection(socket);
	 }
    factory est un ClientFactory, e.g 
                         jigsaw/http/socket/SocketClientFactory
                      ou jigsaw/http/mux/MuxClientFactory
      
  public Reply perform(Request request)
          throws HTTPException, ClientException
      grosso-modo :
         1/ fait un lookup sur le root pour l'objet demande
	 2/ regarde si le root fournit un Reply,
	    si oui le renvoie
         3/ sinon applique les filtres entrants
	    si un des filtres fournit une Reply l'envoyer.
	 4/ effectue la requete
	    request.setFilters
	    request.setTargetResource
	    reply = target.perform(request);
	 5/ applique les filtres de sortie
	    si un des filtres fournit une Reply l'envoyer

  public void initialize (ServerHandlerManager shm
          , String identifier
	  , ObservableProperties props)
	   throws ServerHandlerInitException
      initialise un serveur
      apelle toute les routines d'initialisation
      demarre le thread
     
  public ServerHandler clone(ServerHandlerManager shm
           , String id
	   , ObservableProperties props)
        throws ServerHandlerInitException
	lance clone()
	reninitialise l'etat du clone
	demarre le clone.

  public static void main (String args[])
        permet de lancer comme une appli.


/*
 * Le ClientFactory, kesako ...
 */
