Você está na página 1de 7

Arquitectura

El siguiente diagrama ilustra cómo el cliente opera en un cajero


automático que es en realidad un ATMProxy que se comunica a través
de la red al servidor y envía la llamada a la ATMImplementation.

U
sted será el desarrollo de una distribución de Cajeros Automáticos
(ATM). El cajero automático se encuentra alojado en un proceso
diferente a la aplicación cliente. El cliente se conectará al servidor
mediante la creación de redes de Java y se comunica con el
servidor mediante un protocolo que va a definir. También se
utilizan las interfaces de Java para añadir un poco de sofisticación
a su invocaciones remotas.

Requisitos funcionales

El cajero automático simular un mundo cajero real.

El cajero automático debe ser compatible con las siguientes


operaciones:

 depósito: añadir una cierta cantidad de dólares para la balanza


por cuenta
 retirada: deducir una cierta cantidad de dólares de saldo de la
cuenta
 consulta de saldo: recibe balanza por cuenta corriente
oceso.

ATM

Esta es la atmósfera real que tiene una referencia a una instancia de


una cuenta de clase y manipula su _balance. Un ejemplo de
ATMImplementation se ejecutará en el servidor.

Desafortunadamente, el cliente no podrá hacer referencia directamente


a este objeto. Por lo tanto crear un proxy de cliente, ATMProxy, que
también implementa la interfaz de la atmósfera:

public class ATMProxy implementa ATM

La aplicación de los métodos de interfaz en ATMProxy realmente no


manipular los datos de la cuenta. En su lugar, el proxy se conecta
al servidor que ejecuta el verdadero cajero automático y por cada
llamada que se envía un mensaje a través de la red de su interés en que
el servidor realice el trabajo.

El cajero automático simular un mundo cajero real.

El cajero automático debe ser compatible con las siguientes


operaciones:

 depósito: añadir una cierta cantidad de dólares para la balanza


por cuenta

El proceso del servidor se pondrá en marcha, crear una instancia


ATMImplementation, a continuación, abrir un socket y esperar a que
las solicitudes entrantes. Cuando llega una petición al servidor enviará
al método ATMImplementation adecuada y la respuesta si es
necesario.

Asignación

Todas las clases deben estar en el paquete:


cs425.lab1

ATM

Cree el siguiente interfaz ATM:

pública interfaz ATM {


depósito public void (float cantidad) lanza
ATMException;
public void retirar (float cantidad) lanza
ATMException;
pública getBalance Float () throws
ATMException;
)

ATMImplementation

Desarrollar un ATMImplementation clase que implementa la interfaz


de la atmósfera. Por ahora el ATMImplementation puede tener una
sola cuenta. Todas las transacciones en cajeros automáticos en el acto
de balance de esa cuenta.

ATMImplementation clase pública implementa ATM

Cuenta

La Cuenta de la clase debe ser el mínimo necesario para mantener la


información de estado que los modelos de una cuenta bancaria. De
hecho, basta con una envoltura alrededor de un primitivo tipo adecuado
que representa el saldo de la cuenta. El constructor de
ATMImplementation debe crear un objeto de cuenta con el
constructor por defecto y almacenar una referencia a él.

ATMProxy

Ahora, el cliente quiere hacer llamadas en el cajero automático, tal vez


retirar un poco de dinero o control del equilibrio, pero, en realidad el
cliente no puede obtener una referencia a la ATMImplementation. En
su lugar, funcionará en un ATMProxy que implementa la interfaz de la
atmósfera. Por lo que el cliente se refiere, la instancia de un cajero
automático. No le importa que el ATMProxy realmente se conecta a un
proceso de servidor remoto y los delegados de los métodos de cajeros
automáticos a la ATMImplementation remoto.

Desarrollar una clase ATMProxy que implementa la interfaz de la


atmósfera.

public class ATMProxy implementa ATM

El proxy en realidad no tienen ninguna cuenta de datos como parte de


su estado. Simplemente envía cada método de la interfaz de la
atmósfera a la ATMImplementation remoto. La representación tendrá
que hacer una conexión de socket al proceso del servidor se describe a
continuación. Una vez que una conexión de socket se hace, el proxy
tiene la entrada y salida de flujos de la toma. Para enviar un mensaje al
servidor, el proxy escribe solicitudes de salida de la secuencia de salida.
Es posible que desee ajustar el flujo de salida de base con una corriente
contenedor de conveniencia como java.io.PrintWriter. Del
mismo modo, el proxy lee las respuestas entrantes de la secuencia de
entrada que también puede ser envuelto en otra corriente como
java.io.BufferedReader.

Para comunicarse con el servidor en el que tendrá que definir un


protocolo. El protocolo permite el proxy para indicar al servidor lo que
quiere el servidor que hacer. Y mientras el servidor está procesando esta
petición, el proxy tiene que esperar por su respuesta. Considere la
posibilidad de un simple basados en el protocolo de cadena que incluye
el método a ejecutar y una representación String de los parámetros para
este método. Luego haga que el proxy de escribir los mensajes de
cadena directamente en el flujo de salida obtenidos a partir de la toma.

Servidor

Desarrollar un servidor de clase que será la sede del objeto


ATMImplementation. Server.main () debe aceptar un número
de puerto como un parámetro de línea de comandos. Este puerto es el
puerto en el que el servidor escuchará las peticiones de los clientes.

Por ejemplo:

C:> java \ cs425.lab1.Server 7777

diría el servidor para crear un ServerSocket en el puerto 7777.


Server.main deben crear instancias de un ATMImplementation y
comenzar a escuchar las solicitudes. Para preparar las solicitudes, el
servidor debe crear un ServerSocket y luego empezar a aceptar
conexiones entrantes en el que ServerSocket. Cuando se recibe una
solicitud del cliente, el servidor debe leer en el mensaje de entrada
del flujo de entrada del zócalo, interpretar la petición basada en el
protocolo definido arriba y luego enviar la petición al método apropiado
de su objeto ATMImplementation. Si se requiere una respuesta , el
servidor debe formar el mensaje de respuesta correspondiente y
enviar de nuevo a la persona que llama más la toma de corriente de la
salida.

Cliente

Para impulsar su sistema, crear la clase de cliente siguientes e incluyen


esta clase exacta con su presentación:

paquete cs425.lab1;
public class Cliente {
public static void main (String [] args) {
try {
/ / Analizar la línea de comando
argumentos
String host = args [0];
int puerto = Integer.parseInt (args
[1]);
atm ATM = ATMProxy nueva (host,
puerto);
/ / Obtiene el saldo de la cuenta
inicial
System.out.println ("Balance" +
atm.getBalance ());
/ / Hace Rs. 1.000 de depósito y
obtener nuevo equilibrio
System.out.println ("Depósito:
1000");
atm.deposit (1000);
System.out.println ("Balance" +
atm.getBalance ());
/ / Hace Rs. 250 retirada y recibe
nuevo equilibrio
System.out.println ("Retiro: 250");
atm.withdraw (250);
System.out.println ("Balance" +
atm.getBalance ());
/ / Hace Rs. 750 retirada y recibe
nuevo equilibrio
System.out.println ("Retiro: 750");
atm.withdraw (750);
System.out.println ("Balance" +
atm.getBalance ());
} Catch (ae ATMException) {
System.out.println ("Se produjo una
excepción durante la comunicación con el cajero
automático");
ae.printStackTrace ();
)
)
)

Cuando se invoca este cliente, especifique el host y el puerto del


proceso del servidor como argumentos de línea de comandos. Por
ejemplo:

C: \ java cs425.lab1.Client localhost> 7777

Demostración

Para demostrar su sistema, tendrá que iniciar dos procesos distintos.

En primer lugar el arranque del servidor que especifica un número de


puerto a escuchar.

C:> java \ cs425.lab1.Server 7777

Una vez que el servidor está activo y en ejecución, inicie el cliente


especifica el host y el puerto del proceso del servidor.

C: \ java cs425.lab1.Client localhost> 7777


Usted debe ver la siguiente salida desde el cliente:

Balance: 0.0
Depósito: 1000
Balance: 1000.0
Retirar: 250
Balance: 750,0
Retirar: 750
Balance: 0.0