Class FrontEnd

java.lang.Object
  |
  +--FrontEnd

public class FrontEnd
extends java.lang.Object

Rappresenta il FrontEnd in veste di servitore di Client. Genera un thread FrontEndThread per ogni singola connessione con un Client.

Author:
Matteo Albini, Mauro Barbieri

Field Summary
private static boolean DEBUG
          Flag per abilitare stampe di debugging su standard output e standard error.
 MultipartTimestamp fe_ts
          Multipart timestamp del FE.
 int FT_COUNT
          Numero di Replica Manager a cui un messaggio deve essere postato prima di considerare l'operazione di posting eseguita con successo.
 java.net.InetAddress hostname
          Indirizzo del Replica Manager a cui si connette per primo.
 rmTable hostsReplicaManager
          Indirizzi dei Replica Manager noti al Front End, ciascuno con il numero di connessioni correntemente aperte dai Client.
private  java.io.ObjectInputStream inRmStream
          Stream di input per la comunicazione con il RM da cui ricevere le risposte ai comandi iniziali NUM e LOOKUP.
 boolean LOCAL
          Se true, ogni FrontEndThread creato tenta la prima connessione con il Replica Manager passato nella linea di comando.
 int LOOKUP_T
          Numero minimo di indirizzi di Replica Manager potenzialmente disponibili che un FrontEndThread accetta senza invocare comandi di lookup.
private  java.io.ObjectOutputStream outRmStream
          Stream di output per la comunicazione con il RM a cui inviare i comandi iniziali NUM e LOOKUP.
 int POLITICA_SCELTA_RM
          Indica la politica con cui un FrontEndThread sceglie un nuovo RM a fronte della caduta di quello corrente.
 int PORT
          Numero di porta per la comunicazione con i Client.
 int RM_PORT
          Numero di porta dei Replica Manager.
private  java.net.Socket rmSocket
          Socket per la connessione con il RM a cui inviare i comandi iniziali NUM e LOOKUP.
private  java.net.ServerSocket serverSocket
          Socket di ascolto delle connessioni con i Client.
 int TIME_OUT
          Indica il tempo in millisecondi oltre il quale un FrontEndThread in attesa di una risposta da un Replica Manager considera sconveniente continuare ad attendere.
 
Constructor Summary
FrontEnd()
           
 
Method Summary
private  void chiudiConnessione()
          Chiude la connessione verso il Replica Manager usato per i comandi iniziali NUM e LOOKUP.
private static void erroreArgs()
          Stampa sullo standard output una stringa che illustra i possibili argomenti validi per la linea di comando e fa terminare la JVM.
private  void lookupAction()
          Richiede al Replica Manager indicato da linea di comando, gli host degli altri Replica Manager ad esso noti.
static void main(java.lang.String[] args)
          Parametri della riga di comando dell'applicazione FrontEnd :
java FrontEnd hostname [-option value]...
E' obbligatorio un argomento:
hostname : hostname del Replica Manager a cui
il FE si connette per primo.
private  int numAction()
          Si connette al RM di cui conosce l'indirizzo ed invia il comando NUM per sapere quanti RM sono presenti nel sistema.
 
Methods inherited from class java.lang.Object
, clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
 

Field Detail

hostname

public java.net.InetAddress hostname
Indirizzo del Replica Manager a cui si connette per primo.

RM_PORT

public int RM_PORT
Numero di porta dei Replica Manager. Il valore di default e' 54950.

PORT

public int PORT
Numero di porta per la comunicazione con i Client. Il valore di default e' 55348.

FT_COUNT

public int FT_COUNT
Numero di Replica Manager a cui un messaggio deve essere postato prima di considerare l'operazione di posting eseguita con successo. Il valore deve essere maggiore di zero. Settando valori maggiori di uno si ottengono operazioni di posting che resistono alla caduta dei Replica Manager (fault tolerance). Il valore di default e' 1 (no fault tolerance).

POLITICA_SCELTA_RM

public int POLITICA_SCELTA_RM
Indica la politica con cui un FrontEndThread sceglie un nuovo RM a fronte della caduta di quello corrente. Valori possibili:
	1: basata sull'ordine mantenuto nella rmTable del Front End; 
2: random;
3: secondo criteri di valutazione del carico dei servitori noti.
Il valore di default e' 1.

LOCAL

public boolean LOCAL
Se true, ogni FrontEndThread creato tenta la prima connessione con il Replica Manager passato nella linea di comando. Se false e' utilizzata la politica settata nella variabile POLITICA_SCELTA_RM.

TIME_OUT

public int TIME_OUT
Indica il tempo in millisecondi oltre il quale un FrontEndThread in attesa di una risposta da un Replica Manager considera sconveniente continuare ad attendere. Scaduto tale intervallo di tempo si rivolge ad un altro Replica Manager. Un valore nullo comporta un'attesa infinita. Il valore di default e' 0.

LOOKUP_T

public int LOOKUP_T
Numero minimo di indirizzi di Replica Manager potenzialmente disponibili che un FrontEndThread accetta senza invocare comandi di lookup. Il valore di default e' 0 (nessuna lookup).
See Also:
FrontEndThread, FrontEndThread.lookupAction(), Comando.LOOKUP

fe_ts

public MultipartTimestamp fe_ts
Multipart timestamp del FE.

serverSocket

private java.net.ServerSocket serverSocket
Socket di ascolto delle connessioni con i Client.

hostsReplicaManager

public rmTable hostsReplicaManager
Indirizzi dei Replica Manager noti al Front End, ciascuno con il numero di connessioni correntemente aperte dai Client. Tale struttura dati è accessibile in maniera sincronizzata da tutti i thread lanciati dal FrontEnd. Inizializzata in lookupAction.

rmSocket

private java.net.Socket rmSocket
Socket per la connessione con il RM a cui inviare i comandi iniziali NUM e LOOKUP.
See Also:
Comando.NUM, Comando.LOOKUP

outRmStream

private java.io.ObjectOutputStream outRmStream
Stream di output per la comunicazione con il RM a cui inviare i comandi iniziali NUM e LOOKUP.
See Also:
Comando.NUM, Comando.LOOKUP

inRmStream

private java.io.ObjectInputStream inRmStream
Stream di input per la comunicazione con il RM da cui ricevere le risposte ai comandi iniziali NUM e LOOKUP.
See Also:
Comando.NUM, Comando.LOOKUP

DEBUG

private static final boolean DEBUG
Flag per abilitare stampe di debugging su standard output e standard error.
Constructor Detail

FrontEnd

public FrontEnd()
Method Detail

numAction

private int numAction()
Si connette al RM di cui conosce l'indirizzo ed invia il comando NUM per sapere quanti RM sono presenti nel sistema.
Returns:
numero di RM presenti nel sistema.

lookupAction

private void lookupAction()
Richiede al Replica Manager indicato da linea di comando, gli host degli altri Replica Manager ad esso noti. Tali host vengono memorizzati in hostsReplicaManager.

chiudiConnessione

private void chiudiConnessione()
Chiude la connessione verso il Replica Manager usato per i comandi iniziali NUM e LOOKUP.

main

public static void main(java.lang.String[] args)
Parametri della riga di comando dell'applicazione FrontEnd :
 
java FrontEnd hostname [-option value]...
E' obbligatorio un argomento:
hostname : hostname del Replica Manager a cui
il FE si connette per primo.
Opzioni possibili e valori corrispondenti :
-rmport num : numero di porta del Replica Manager.
Valore di default 54950.
-feport num : numero di porta su cui si pone in ascolto
il FE. Valore di default 55348.
-ftcount num : numero di Replica Manager a cui un messaggio
deve essere postato prima di considerare
l'operazione di posting eseguita con successo.
Settando valori maggiori di uno si ottengono
operazioni di posting che resistono alla caduta
dei Replica Manager (fault tolerance).
Il valore di default e' 1 (no fault tolerance).
-p num : indica la politica con cui un FrontEndThread
sceglie un nuovo RM a fronte della caduta di quello
corrente.
Valori possibili:
1: basata sull'ordine mantenuto nella rmTable
del Front End;
2: random;
3: secondo criteri di valutazione del carico
dei servitori noti.
Il valore di default e' 1.
-nl : per ogni nuovo Client, il Front End tenta la
connessione con un Replica Manager scelto in base
alla politica settata mediante l'ozione -p.
-t num : indica il tempo in millisecondi oltre il quale un
FrontEndThread in attesa di una risposta
da un Replica Manager considera sconveniente
continuare ad attendere. Scaduto tale intervallo
di tempo si rivolge ad un altro Replica Manager.
Un valore nullo comporta un'attesa infinita.
Il valore di default e' 0.
-s num : numero minimo di indirizzi di Replica Manager
potenzialmente disponibili che un FrontEndThread
accetta senza invocare comandi di lookup.
Il valore di default e' 0 (nessuna lookup).

erroreArgs

private static void erroreArgs()
Stampa sullo standard output una stringa che illustra i possibili argomenti validi per la linea di comando e fa terminare la JVM.