POR: PATIÑO EDISSON, PEÑALOZA FERNANDO FERNANDO
Implementar mediante RMI una calculadora que preste su funcionalidad a varios terminales o clientes que lo requieran. Maximizar la utilización de recursos utilizando software implementado en una computadora remota. Compartir los servicios implementados en un servidor a varios clientes que los requieran verificando su concurrencia. Aprender el uso de los objetos y sus respectivos métodos que el paquete de RMI de java proporciona. Manejar los Stub y Skeleton para que la invocación a la función remota sea posible. Manejar la herramienta de java RMI Registry.
RMI es un paquete de JAVA que permite manejar objetos (y sus respectivos métodos) de manera remota, para utilizar los recursos de un servidor de manera transparente para el usuario local. La manera en que RMI (y RPC en general) logra hacer esto, es por medio de lo que se conoce como STUBs. En el caso del STUB servidor, se conoce como SKELETON. Estos Stubs y Skeletons permiten que al momento de ser invocada la función remota esta pueda ser "simulada localmente" Se brinda un mecanismo para la comunicación RMI se caracteriza por la facilidad de su uso en la programación por estar específicamente diseñado para Java; proporciona paso de objetos por referencia, recolección de basura distribuida y paso de tipos arbitrarios. Para la comunicación entre el servidor y el cliente, se trabaja c on interfaces, que deben ser implementadas por el servidor y/o cliente, para que los STUBs puedan realizar la transparencia para ambos. Además esto evita que deba existir una definición local real de la clase remota, vale decir, en el cliente solo debe estar definida la interface, no la clase remota.
Se ejecuta el RMI Registry, en algún lugar de la red. El servidor que desea manejar un objeto, se registra en dicho servidor. El RMI Registry registra el par: OBJETO/SERVIDOR. El cliente que necesita utilizar un determinado objeto, hace una consulta al RMI Registry, quien devuelve el STUB listo para la comunicación.
Implementar mediante RMI un servidor que pueda realizar operaciones matemáticas de manera remota y que varios clientes puedan utilizarla haciendo un llamado. Para el ejercicio se solicita: Operaciones Básicas (Suma, Resta, Multiplicación, División). Matrices (Suma de matrices, Multiplicación de matrices, Transpuesta). Funciones (Evaluacion de funciones, Derivadas, Integrales, Grafica). Conversiones (Binarias a Decimales, Decimales a Octales, Hexadecimales a Decimales).
Lo primero será crear una interfaz la cual debe heredar de la c lase “Remote” y para esto habrá que importar el paquete: “java.rmi.Remote”, una vez creada la interface se deberá incorporar los métodos que tendrá dicha interface, todos los métodos deberán transferir una excepción en caso de que suceda después del método se deberá añadir lo siguiente: throws java.rmi.RemoteException. El siguiente paso será crear una clase la cual implemente la interface creada, se deberá implementar todos los métodos abstractos ahora creamos una clase servidor la cual ofrecerá todos los métodos implementados en el paso anterior, usando Librerías implementamos en el servidor los diferentes métodos que desensamblan los objetos recibidos, verificando mediante los signos la operación solicitada y los parámetros con los que se va a operar. Una vez identificada la operación, se ubica y se coloc an los parámetros en el orden en el que el servidor fue codificado para de esta forma operar y enviar los datos procesados, estos datos se ponen en cola y son enviados en el orden en el que se obtienen y de esta manera el cliente puede ordenarlos como crea convenienete para presentarlos como resultado.
Se creará una interfaz con java para que sea compatible ya que RMI tiene una implementación única para java, en esta interfaz se adecuarán las estructuras tanto para enviar la información como para recibir los datos procesados. Se deberá especificar cual es el tipo de dato a enviar y recibir. Para cada operación se deberá añadir una cláusula para atrapar la excepciones presentadas como se puede notar: public String suma(String a) throws java.rmi.RemoteException; y de esta manera podremos enviar como parámetro los datos a procesar en el servidor y de la misma manera los recibiremos.
Como primer punto debemos verificar que el servidor este corriendo, para que la conexión se pueda realizar normalmente. El servidor cuenta con una ip y un puerto habilitado para la conexión que debe ser conocido por el cliente para realizar las peticiones.
El diseño del cliente implementa ventanas para cada una de las operaciones antes mencionadas.
Las operaciones básicas son resueltas en la siguiente interfaz. Los datos se insertan en el espacio especificado y se los pone de manera de ecuación, estos son enviados c omo parámetros al servidor que es el encargado de desempaquetarlos, verifica el signo enviado que identifica la operación y los valores son tomados como parámetro para realizar la operación, el servidor opera y devuelve el resultado que es presentado en el mismo campo.
En f(x) se debe ingresar una expresión algebraica en la que se va a evaluar, derivar e integrar. Del mismo modo la expresión es enviada al servidor que este a su vez la desempaqueta y toma a todas las x como la variable a tratar, dependiendo de esto se opera y se devuelve de la misma manera el resultado al terminar las operaciones.
Esta Pestaña trabaja con matrices, solicita en primera instancia el número de filas y de columnas de cada una de las matrices, luego genera estas matrices para que posteriormente sean llenadas, una vez terminado eso se envían estas matrices junto a una operación que seleccionemos. El servidor procesa la operación y nos devuelve una serie de valores que son los resultantes, estos son recibidos y ordenados en la interfaz de cliente.
Para realizar la conversión de sistemas numéricos y alfanuméricos la interfaz de cliente solicita el valor a convertir y basta con presionar el tipo de conversión especificado en los botones de la parte inferior de la ventana. Las opciones presentadas so: BinarioDecimal, Octal-Decimal, Hexadecimal-Decimal, Decimal-Binario, Decimal-Octal, Decimal-Hexadecimal.
Realizamos en esta interfaz las distintas funciones trigonométricas, al igual que operaciones entre ellas. Es similar al ingreso de valores de una calculadora en donde todo debe ser agrupado por paréntesis para que se pueda operar. El resultado después de haber clickeado la respuesta aparecerá en el campo inferior.
Esta última interfaz da muestra del poder de RMI ya que debe ser genérica la utilización de un servidor RMI, por lo que se puede llamar a este incluyendo la Ip del servidor que se quiere referenciar, el puerto de acceso que este habilita, la Interfaz, la Clase a la que pertenece, el método especificado o que se quiere realizar, el valor que va a retornar, el valor que recibe y su tipo. Una vez ingresado todo lo especificado anteriormente de manera correcta presionamos calcular y el resultado deberá operarse en el servidor y devolvernos el resultado en el campo de destino.
RMI puede solucionar varios problemas de hardware de poco rendimiento con la utilización de un servidor remoto que realice de manera ágil varias operaciones. RMI centraliza el desempeño de un sistema ya que depende de un servidor para operar. Si un servidor RMI colapsa por alguna razón deja sin funcionamiento a todos aquellos clientes que lo utilicen. RMI resuelve el problema planteado anteriormente pudiendo ser instalada la aplicación en cualquier PC disponible con java o referenciando una o varias operaciones a servidores remotos en lugares distintos y distantes m ediante una red.