En esta versión del proyecto Red Ferroviaria se distribuye el código en varios
procesadores.
El procesador NodoInfraestructura ejecuta el código relativo a los elementos situados
en tierra (infraestructura) (RedFerroviaria, Tunel, TramoFerroviario y
CentroRegulación).
Hay un procesador NodoTren por cada uno de los trenes que circulan que ejecuta el
código relativo al control de su marcha (Tren). La interacción entre los trenes y la
infraestructura se realiza utilizando el paradigma Proxy-Servant, y la comunicación
entre estos se realiza utilizando sockets.
port [2000]
port [2040] Rojo
port [2050] Azul
n <<Internet>>1
port [2010]
port [2020] Rojo
port [2030] Azul
Procodis’11: VI- Sockets Laura Barros
2
Punto de partida I
Partimos de la aplicación RedFerroviariaLockJava, a la que
hemos cambiado su estructura para poder ser distribuida en
varios procesadores.
El código se ha separado en dos particiones (paquetes):
El paquete infraestructura: contiene las clases que se instancian en el
procesador NodoInfraestructura.
El paquete equipoMovil: contiene las clases que se embarcan en el
procesador NodoTren.
Procodis’11: VI- Sockets Laura Barros
3
Punto de partida II
Las modificaciones que se han hecho respecto de RedFerroviariaLockJava son:
Finalización de la actividad de los trenes: El método entro() de la
clase CentroRegulación retorna un booleano. Lo obtiene el tren
cuando se accede al CentroRegulación para anunciar que entra en el
centro de regulación.
si es true :actividad del tren debe finalizar definitivamente.
si es false: el tren debe continuar.
Proxys y Servants: La conexión de cada tren con las clases de la
infraestructura se ha realizado a través de parejas complementarias
Proxy-servant.
La clase Tren tiene instancias de las clases: RedFerroviariaProxy,
Cada *Proxy ofrece localmente al tren, el conjunto de operaciones que
éste requiere del objeto que representa
(RedFerroviaria,TramoFerroviario, Tunel, CentroRegulacion).
Procodis’11: VI- Sockets Laura Barros
4
Punto de partida III
...y Servants:
La clase RedFerroviaria tiene agregada una instancia de la clase
RedFerroviariaServant.
La clase Tunel tiene agregado una instancia de la clase TunelServant.
La clase CentroRegulacion tiene agregado una instancia de la clase
CentroRegulacionServant.
La clase TramoFerroviario tiene agregado una instancia de la clase
TramoFerroviarioServant.
Los *Servant ejecutan por delegación en el elemento al que pertenecen
los requerimientos que se reciben de los trenes (a través de los proxies).
¿Cómo interacciona un tren con un elemento de la infraestructura?
1.
Invoca un método del correspondiente *Proxy que es local.
2. El *Proxy , a través de un socket, se comunica con el
correspondiente *Servant.
3. El *Servant ejecuta la interacción con el elemento.
Procodis’11: VI- Sockets Laura Barros
5
Punto de partida III
Las interacciones que los trenes realizan sobre los elementos de la infraestructura
pueden ser de dos tipos:
No bloqueantes: No implica ningún bloqueo prolongado del thread del tren. Ejemplos
de este tipo de interacción son:
salgo():void de la clase Tunel
esPosicionLibre(posición,tramo):boolean de la clase TramoFerroviario.
:Tren
:TramoFerroviarioProxy
:TramoFerroviarioServant
:RedFerroviaria
esPosicionLibre()
socket [2000]
sendMsj (esPosicionLibre)
sendMsj (return esPosicionLibre)
esPosicionLibre()
Procodis’11: VI- Sockets Laura Barros
6
Punto de partida IV
Bloqueantes: El thread del tren se suspende hasta que en el elemento de la
infraestructura se alcanza el estado que responde. Estas son:
entro():boolean de la clase Tunel.
entro(tramo):void de la clase CentroRegulacion.
:Tren
:TunelProxy
:TunelServant
:Tunel
entro()
Toma el lock de
TunelProxy
Suspendido en
read() de socket
sockets [port 2010]
sendMsj (entro())
:Agente
Suspendidoen lock
de Tunel
entro()
notify()
sendMsj (return entro())
notify()
Procodis’11: VI- Sockets Laura Barros
salgo()
7
Arquitectura de la aplicación I
Clases incluidas en la partición infraestructura:
Las clases RedFerroviaria, TramoFerroviario y Tunel son básicamente
iguales a las utilizadas en la aplicación RedFerroviariaLockJava.
La clase CentroRegulación es también la misma, salvo que incorpora el
mecanismo de finalización de los trenes. Los cambios son:
Atributo nuevo:
terminado:boolean=false => Vale True si la actividad de los trenes
debe finalizar.
Métodos nuevos:
termina() => Establece que la actividad de los trenes del tramo
ferroviario debe finalizar.
entro():boolean =>
Bloquea el thread entrante hasta que llegue la hora de salida de tren.
Retorna true si la actividad del tren que invoca debe terminar.
Procodis’11: VI- Sockets Laura Barros
8
Centro de Regulacion
/*Un tren informa de que entra en el centro de regulación. */
public synchronized boolean entro(){
}
/**
* Se establece que la actividad de los trenes del tramo debe concluir.
*/
public void termina(){
}
terminado=true;
Procodis’11: VI- Sockets Laura Barros
9
Arquitectura de la aplicación II
Procodis’11: VI- Sockets Laura Barros
10
Nuevas Clases I
Clase RedFerroviariaServant:
Servant que ejecuta los metodos de la RedFerroviaria que requiere cualquier
tren a través del *Proxy complementario utilizando el socket que se establece
entre ellos.
Recibe por el socket de puerto 2000 como mensajes los métodos que los trenes
realizan sobre la RedFerroviaria.
Invoca el método requerido en RedFerroviaria.
Retorna el resultado.
Constructor:
RedFerroviariaServant(laRed:RedFerroviaria)=> Recibe como
parámetro la referencia a la RedFerroviaria de la que es servant.
Atributos:
laRed:RedFerroviaria => Referencia a la RedFerroviaria sobre el
que opera. Se establece en su constructor
<<final>>PORT:int=2000 => Puerto del socket por el que el
*Servant queda a la espera de recibir mensajes de los *Proxies
complementarios. Es constante [2000]
ServerSocket serv => Server que atiende los requerimientos que
recibe de los *Proxies complementarios por su puerto.
Procodis’11: VI- Sockets Laura Barros
11
Nuevas Clases II
Clase TunelServant:
Servant que ejecuta los métodos del Tunel que requiere cualquier tren a través
del *Proxy complementario utilizando el socket que se establece entre ellos.
Recibe por el socket de puerto 2010 como mensajes las invocaciones de los
métodos que los trenes realizan sobre el Tunel.
Invoca por el método requerido en Tunel.
Retorna el resultado.
TunelServant(elTunel:Tunel)=> Recibe como parámetro la referencia
al Tunel del que es servant.
elTunel:Tunel => Referencia el Tunel sobre el que opera. Se
establece en su constructor.
<<final>>PORT:int=2010 => Puerto del socket por el que el
*Servant queda a la espera de recibir mensajes de los *Proxies
complementarios. Es constante [2010]
ServerSocket serv => Server que atiende los requerimientos que
recibe de los *Proxies complementarios por su puerto.
Constructor:
Atributos:
Procodis’11: VI- Sockets Laura Barros
12
Nuevas Clases III
Clase CentroRegulacionServant:
Servant que ejecuta los métodos del CentroRegulacion que requiere cualquier tren a
través del *Proxy complementario utilizando el socket que se establece entre ellos.
Recibe por el socket de puertos 2020 (tramo Rojo) y 2030 (tramo Azul) como mensajes
los métodos que los trenes realizan sobre el correspondiente CentroRegulacion.
Invoca el método requerido en CentroRegulacion.
Retorna el resultado.
Constructor:
CentroRegulacionServant(elCentroRegulacion:CentroRegulacion,
port:int)=> Recibe como parámetro la referencia al CentroRegulación del
que es servant, y el puerto (2020 - tramo Rojo ,2030 - tramo Azul).
Atributos:
elCentroRegulacion:CentroRegulacion => Referencia el
CentroRegulacion sobre el que opera. Se establece en su constructor.
<<final>>PORT:int => Puerto del socket por el que el *Servant queda a la
espera de recibir mensajes de los *Proxies complementarios. Se establece
en el constructor. Puede tomar los valores [2020] tramo rojo y [2030] tramo
azul.
ServerSocket serv => Server que atiende los requerimientos que recibe de
los *Proxies complementarios por su puerto.
Procodis’11: VI- Sockets Laura Barros
13
Nuevas Clases IV
Clase TramoFerroviarioServant:
Servant que ejecuta los métodos del TramoFerroviario que requiere cualquier tren a
través del *Proxy complementario utilizando el socket que se establece entre ellos.
Recibe por el socket de puertos 2040 (tramo Rojo) y 2050 (tramo Azul) como mensajes
los métodos que los trenes realizan sobre e
Links de descarga
http://lwp-l.com/pdf1046
Comentarios de: PROGRAMACION CONCURRENTE Y DISTRIBUIDA - VI.2: Red Ferroviaria ConSocket (0)
Comentarios de: PROGRAMACION CONCURRENTE Y DISTRIBUIDA - VI.2: Red Ferroviaria ConSocket (0)
No hay comentarios