file://d:\jvila\docencia\dya05\practicas\dyapracticas.htm

Tamaño: px
Comenzar la demostración a partir de la página:

Download "file://d:\jvila\docencia\dya05\practicas\dyapracticas.htm"

Transcripción

1 MiWeb: Diseño y Aplicaciones de Sistemas Distribuidos Página 1 de 1 Diseño y Aplicaciones de Sistemas Distribuidos Prácticas Enunciado Fich. Apoyo Pr. - Hola Java! pdf zip Pr 2.- Sockets pdf zip Pr 3.- Java - RMI pdf zip Pr 4.- CORBA sobre Java pdf zip Pr 5.- Difusión a grupos pdf zip Pr 6.- Applets pdf zip Pr 7.- Servlets pdf zip Pr 8.- Servicios Web con SOAP pdf zip Pr 9.- Seguridad pdf zip Trabajo Final: La agencia de robots pdf zip Corrector Demo. Otras prácticas: Distributed Objects Engineering (G. Emmerich) ver zip -. Información pública y privada de la MicroWeb.- file:d:\jvila\docencia\dya05\practicas\dyapracticas.htm 21/09/2005

2 DYA - Introducción a Java file:/d:/jvila/docencia/dya05/practicas/hola.htm DYA - Introducción a Java file:/d:/jvila/docencia/dya05/practicas/hola.htm Prácticas de Java Introducción a Java este se ubicará en el subdirectorio %USER%\prj-hola\src\hola IMPORTANTE: el nombre del paquete (hola) ha de coincidir con el del subdirectorio de %USER%\prj-hola\src\hola Objetivo de la práctica El objetivo de esta práctica es conocer el entorno de trabajo, el método de desarrollo de aplicaciones a seguir en cada práctica y la realización de algunas aplicaciones básicas en Java. 2. El entorno de trabajo El entorno de trabajo está formado, básicamente, por: El programa JBuilder 9 Entreprise que es un IDE para desarrollo de programas en Java. Se encuentra disponible para plataformas Windows y Linux. Incluye, entre otras características: La plataforma Java 2 y más concretamente la máquina virtual java 4 (4.1_02-b06) La documentación del API éstandar de la plataforma arriba incluida Un entorno para desarrollo de interfaces gráficas de usuario etc.. 2. La web de la asignatura, que contiene una página de prácticas con: Enunciados de las prácticas. Ficheros de apoyo para cada práctica. Documentación sobre el API estándar de Java Un tutorial de Java que se recoge con el libro "The Java Tutorial: Object Oriented Programming for the Internet" de K. Walrath y M. Campione en HTML. Visite los recursos anteriores y ponga marcadores en su navegador web. 3. Su directorio de trabajo. La estructura del directorio de trabajo es fundamental para el correcto desarrollo de las prácticas. Por tanto se comenzara por este apartado. 3 Directorios, rutas y paquetes En primer lugar es necesario tener una idea clara a la estructura de directorios. Aunque parezca simple, esta es una de las mayores fuentes de problemas en todas las prácticas. Cada usuario deberá tener un directorio de trabajo que se referenciará como %USER%. IMPORTANTE: no utilizar nunca nombres de ruta con "blancos" intercalados (P.e.: Mis Documentos NO!!!) 4. Finalmente, también creará un directorio %USER%\codebase para ubicar las clases resultantes de compilar el código java de todas las prácticas (aquí no hay que crear subdirectorios). La compilación de un proyecto creará automáticamente tantos subdirectorios de %USER%\codebase como paquetes tenga. Así, si el proyecto solo consta del paquete hola se creará un subdirectorio %USER%\codebase\hola. En este subdirectorio habrá un fichero HelloWorld.class. Esta clase será referenciada como hola.helloworld La ventaja de ubicar todas las clases de cualquier práctica en el mismo directorio %USER%\codebase es simplificar la variable de entorno SET CODEBASE=%USER%\codebase% que resulta útil para ejecutar programas java desde el entorno MS-DOS o desde la web. En resumen, el entorno de trabajo se configura así con las siguientes rutas que deberá mantener a lo largo de todas las prácticas: Working path Source path Output path %USER%\prj-hola %USER%\prj-hola\src %USER%\codebase Backup path %USER%\prj-hola\bak Directorio de trabajo. Cuando se referencie un fichero sin ruta, deberá estar en este directorio. Directorio de ficheros fuentes. 4. El método de trabajo básico: Hello world! IMPORTANTE: Contiene un subdirectorio por cada paquete java. El nombre del paquete coincide con el del subdirectorio Directorio donde JBuilder depositará las clases resultantes de compilar el código java. IMPORTANTE: Contiene un subdirectorio por cada paquete java. El nombre del paquete coincide con el del subdirectorio. Los subdirectorios se generan automàticamente. Directorio donde JBuilder ubicará copias de seguridad de los ficheros fuentes. Se genera automàticamente. 2. Para cada práctica se creará un nuevo proyecto en un subdirectorio de %USER%. Por ejemplo, si la práctica se denomina "hola", el subdirectorio se denominará %USER%\prj-hola. Con un sencillo ejemplo (HelloWorld!), recorreremos len esta apartado todos los pasos básicos para la construcción y ejecución de un programa: 4.1 Creación de un proyecto para cada práctica 3. Cada proyecto puede constar de diferentes paquetes cuyos ficheros fuente se ubicarán en subdirectorios de %USER%\prj-hola\src Por ejemplo, si la práctica solo contiene un paquete denominado "hola", package hola; public class HelloWorld {... public class... Abra el entorno JBuilder 2. Cree con el menú File-->NewProject un proyecto de Jbuilder denominado prj-hola.jpx en el directorio %USER%\prj-hola. Configure las Rutas del proyecto tal como se ha descrito en el apartado anterior. Tenga en cuenta, sobre todo, modificar Output path para que todas las clases compiladas se ubiquen en el mismo directorio. 1 of 12 21/09/ :15 2 of 12 21/09/ :15

3 DYA - Introducción a Java file:/d:/jvila/docencia/dya05/practicas/hola.htm DYA - Introducción a Java file:/d:/jvila/docencia/dya05/practicas/hola.htm 3. Cree el paquete hola en el proyecto. Para ello pinche <Project Source> en la ventana de proyecto (izquierda) y seleccione New->Package->hola 2. Estudie el código allí propuesto y REALICE LOS EJERCICIOS PROPUESTOS EN EL MISMO CODIGO 4. Descargue el fichero de apoyo hola.zip de la web de prácticas al directorio %USER%\prj-hola\src\hola y extraiga el fichero HelloWorld.java en este directorio. 5. Incluya en el proyecto el fichero HelloWorld.java del directorio %USER%\prj-hola\src\hola (símbolo "+" en la ventana que muestra el contenido del proyecto). 3. Al editar observe que el entorno está continuamente analizando el código que introduce y: En la ventana inferior izquierda muestra el análisis sintáctico Se abre un menu contextual en el editor que permite completar la línea que esta siendo completada con la opciones posibles. P.e. escriba una nueva línea: import y espere a que el editor le sugiera paquetes a importar. 4.2 Compilación del proyecto 5.3 Compilación, ejecución y depuración del ejemplo Compile el fichero HelloWorld.java utilizando Project-->MakeProject HelloWorld.jpx Compile el ejemplo Objetos. Ahora pueden aparecer errores de compilación. Pulse ALT-ENTER sobre el error para ir a la línea del error y obtener una información mas detallada. 2. Configure el entorno de ejecución de la clase a ejecutar con Run-->Configurations->New. Esta ventana le permite especificar, entre otras cosas: Name: el nombre del entorno -> denomínelo HelloWorld Main class: la clase a ejecutar -> seleccione hola.helloworld VM parameters: parámetros de ejecución de la máquina virtual -> no son necesarios en este ejemplo Application parameters: parámetros de ejecución de la aplicación -> no son necesarios en este ejemplo 3. Ejecute el programa HelloWorld utilizando el menú Run --> Project, o el icono con la flecha verde, o la tecla F9 Seleccione el entorno HelloWorld 2. Para ejecutar el programa, hay que tener en cuenta que este toma 4 argumentos: args[0]...args[3],que si ejecutásemos el programa en una consola deberían proporcionarse como: $ java hola.objetos arg0 arg1 arg2 arg3 Para proporcionar estos argumentos al IDE de Jbuilder, cree un nuevo entorno de ejecución con Run-->Configurations->New: Name: el nombre del entorno -> denomínelo Objetos Main class: la clase a ejecutar -> seleccione hola.objetos VM parameters: parámetros de ejecución de la máquina virtual -> no son necesarios en este ejemplo Application parameters: parámetros de ejecución de la aplicación -> Se abrirá una ventana en la parte inferior con una consola por la que el programa realiza su E/S salida estándar Al terminar la ejecución, o en caso de tener problemas de ejecución, cierre esta ventana pinchando en el icono "X" de esta ventana. Esto terminará el proceso de ejecución del programa java. 5. Ampliando el proyecto y explorando nuevas posibilidades Con el ejemplo "Objetos", comenzaremos a programar en Java y examinaremos algunas propiedades más del entorno. 3. Si aparecen problemas de ejecución, el menú Run ofrece facilidades para depurar un ejemplo, insertando puntos de ruptura (break points), ejecución paso a paso, etc... Ponga un punto de ruptura (tecla F5, Toggle BreakPoint, Run-->Add Breakpoint) en la línea de código que sigue a: System.out.println("Uso: Objetos x y l c"); Ejecute el programa hasta el punto de ruptura 5.1 Inclusión de nuevos ficheros en el proyecto 4. Pruebe algunas otras opciones del menú Ejecutar Extraiga el fichero Objetos.java del fichero de apoyo hola.zip y ubíquelo en el directorio %USER%\prj-hola (si no se añade automáticamente, hágalo con el símbolo "+" en la ventana que muestra el contenido del proyecto) Examine las propiedades del IDE con el menú Herramientas-->Opciones de entorno Incluya en el proyecto el fichero, edítelo, y realice los ejercicios que allí se proponen. 5.2 Edición del fichero y realización de ejercicios Pinche el fichero Objetos.java en la ventana del proyecto y edítelo. Algunas opciones del editor se pueden configurar con Tools-->Editor options 6. Ejecución de programas java desde una consola MS-DOS Los programas Java también pueden ejecutarse desde fuera del entorno JBuilder. Para ello es necesario establecer algunas variables de entorno en el fichero %USER%\mijava.BAT: SET USER=(ponga su directorio de usuario) SET JB=C:\JBUILDER9 SET PATH=%PATH%;%JB%\JDK4\BIN% SET CLASSPATH=.;%USER%\prj-corba\OB.jar\;%USER%\codebase% SET CODEBASE=%USER%\codebase% 3 of 12 21/09/ :15 4 of 12 21/09/ :15

4 DYA - Introducción a Java file:/d:/jvila/docencia/dya05/practicas/hola.htm DYA - Introducción a Java file:/d:/jvila/docencia/dya05/practicas/hola.htm Estas variables indican el directorio (%USER%\codebase)donde se encuentran los ficheros objeto de java (ficheros.class) y el fichero comprimido (%JB%\JAVA\CLASSES.ZIP) donde se encuentran las clases del lenguaje Java. this.y = y; Una vez establecidas estas variables, abra una consola de MS-DOS, ejecute mijava.bat, e invoque el intérprete de Java sobre la clase que desee ejecutar. Tenga en cuenta que el intérprete diferencia entre mayúsculas y minúsculas: > mijava.bat > java NombrePaquete.NombreClase argumento1 argumento2... > java hola.helloworld 7. Continue con otros ejemplos El directorio de la práctica 1 contiene otros ficheros con ejercicios: EntradaSalida.java: Ejemplos de utilización de Streams para la E/S. Consulte la ayuda sobre el API de las clases de Java con el menú Ayuda-->Referencia Java y busque, por ejemplo, la clase BufferedReader. Esta busqueda de ayuda también puede realizarse seleccionando con el ratón BufferedReaderen el texto del programa y apretando F Relojes.java: ejemplos de utilización de Threads y del mecanismo de herencia. Consulte la ayuda sobre el API de las clases de Java con el menú Ayuda-->Referencia Java y busque, por ejemplo, la clase Thread y el interfaz Runnable. CountFile.java: ejemplo de trabajo con ficheros; cuenta los caracteres de un fichero. CopyFile.java: ejemplo de trabajo con ficheros; copia ficheros DataIOTest.java: ejemplo de escritura y lectura de datos numéricos de un fichero. Añada estos ficheros al proyecto, realice los ejercicios propuestos y ejecútelos. 8. Ficheros de apoyo package hola; HelloWorld.java public class HelloWorld { public static void main(string args[]) { System.out.println("Hello world!"); package hola; class Punto { public int x = 0; public int y = 0; public Punto(int x, int y) { this.x = x; Objetos.java class Rectangulo { protected Punto origen; protected int ancho = 0; protected int alto = 0; private static String nombreclase ="Rectangulo"; public Rectangulo(int origenx, int origeny, int ancho, int alto){ origen=new Punto(origenx, origeny); this.ancho=ancho; this.alto=alto; public Rectangulo(Punto p, int ancho, int alto){ origen= p; this.ancho=ancho; this.alto=alto; public Rectangulo(int ancho, int alto){ origen= new Punto(0,0); this.ancho=ancho; this.alto=alto; public Rectangulo(){ origen= new Punto(0,0); this.ancho=0; this.alto=0; public int ancho(){ return ancho; public int alto(){ return alto; public int area(){ return (ancho*alto); public void mover(int arriba, int derecha){ origen.x+=arriba; origen.y+=derecha; public String imprimir() { return "(Origen: {" + Integer.toString(origen.x) + "," + Integer.toString(origen.y) + ", Final: {" + Integer.toString(origen.x+ancho) + "," + Integer.toString(origen.y+alto) + ")"; public static String nombre(){ return nombreclase; protected void finalize() throws Throwable { origen = null; super.finalize(); EJERCICIO: Implemente una clase RectanguloColor basándose en la clase Rectangulo class RectanguloColor extends Rectangulo { EJERCICIO: Ponga aqui los atributos public RectanguloColor(Punto p, int ancho, int alto, int color){ EJERCICIO: Implemente el constructor 5 of 12 21/09/ :15 6 of 12 21/09/ :15

5 DYA - Introducción a Java file:/d:/jvila/docencia/dya05/practicas/hola.htm DYA - Introducción a Java file:/d:/jvila/docencia/dya05/practicas/hola.htm public RectanguloColor(Rectangulo r, int color){ super(r.origen, r.ancho(), r.alto()); this.color=color; public String imprimir() { EJERCICIO: Sobrecargue este método para que "imprima" también el color EJERCICIO: Invoque el método "imprimir" de la superclase EJERCICIO: para simplificar la implementación. class CuadradoColor extends RectanguloColor { public CuadradoColor(Punto p, int lado, int color){ super(p,lado,lado,color); public class Objetos{ static Rectangulo R1 = new Rectangulo(1,1,7,8); static Rectangulo R2 = new Rectangulo(new Punto(2,2),7,8); static Rectangulo R3 ; static RectanguloColor RC; static CuadradoColor C; public static void main(string args[]) throws IOException{ if (args.length < 4){ System.out.println("Uso: Objetos origen-x origen-y ancho alto"); System.exit(1); int[] i = new int[4]; int j = 0; for(j=0; j < i.length; j++) i[j] = Integer.parseInt(args[j]); R3 = new Rectangulo(i[0],i[1],i[2],i[3]); RC= EJERCICIO: Cree una instancia de rectángulo color RC EJERCICIO: que añada a R3 el color. EJERCICIO: Utilice el constructor RectanguloColor(Rectangulo r, int color) System.out.println("Nombre de la clase: " + Rectangulo.nombre()); System.out.println("Nombre de la clase de R3: " + R3.nombre()); System.out.println("Area de R3: " + R3.area()); System.out.println("R3: " + R3.imprimir()); System.out.println("RC: " + RC.imprimir()); EJERCICIO: Invoque el método mover(10,10) sobre R3 EJERCICIO: Invoque el método imprimir sobre R3 y RC y visualicelos por pantalla PREGUNTA: Se ha movido RC? Explique convenientemente este aspecto. C= EJERCICIO: Cree un CuadradoColor con origen el punto (2,2),alto=5,ancho=25 System.out.println("C: " + C.imprimir()); System.out.println("Area de C: " + C.area()); package hola; public class EntradaSalida{ EntradaSalida.java public static void main(string args[]) throws IOException{ int j; byte[] buffer = new byte[80]; String filename, filename2; float f1 = (float) ; float f2 = 0; E/S con InputStream y OutputStream System.out.println("Teclee una cadena"); j = System.in.read(buffer); System.out.print("La cadena: "); System.out.write(buffer,0,j); Convertimos cadena de bytes a cadena de caracteres (2 bytes) String tira = new String(buffer); System.out.println("Otra vez la cadena: " + tira); E/S con BufferedReader y PrintWriter Conveniente con cadenas de caracteres (1 caracter = 2 bytes) BufferedReader stdin = new BufferedReader( new InputStreamReader(System.in)); PrintWriter stdout = new PrintWriter(System.out); E/S con InputStream y OutputStream System.out.println("Teclee un entero"); EJERCICIO: Lea un entero por teclado e imprímalo en pantalla E/S con BufferedReader y PrintWriter Conveniente con cadenas de caracteres (1 caracter = 2 bytes) System.out.println("Teclee un nombre para un fichero"); EJERCICIO: Lea una cadena de teclado y déjela en la variable filename E/S con ficheros y floats en formato numérico EJERCICIO: Escriba un float en el fichero filename (en formato binario) EJERCICIO: Lea el float que ha escrito en el fichero filename EJERCICIO: Escriba el float que ha leido del fichero filename en pantalla AYUDA: Mire el código de un poco mas abajo... Es parecido (pero en formato de texto) E/S con ficheros y floats en formato de texto filename2=filename + ".txt"; System.out.println("Fichero: "+filename2); fout = new DataOutputStream(new FileOutputStream(filename2)); fin = new DataInputStream(new FileInputStream(filename2)); fout.writebytes(new Float(f1).toString()+"\n"); f2= Float.valueOf(fin.readLine()).floatValue(); System.out.println("Escrito y leido el float: " +f2+ " del fichero: " +filename2); catch (IOException e) { 7 of 12 21/09/ :15 8 of 12 21/09/ :15

6 DYA - Introducción a Java file:/d:/jvila/docencia/dya05/practicas/hola.htm DYA - Introducción a Java file:/d:/jvila/docencia/dya05/practicas/hola.htm package hola; System.out.println("Error en E/S"); System.exit(1); import java.text.*; import java.util.*; Relojes.java class Reloj extends Thread { int cuenta=0; public Reloj(String nombre, int cuenta) { super(nombre); this.cuenta=cuenta; public void start() { Date h = new Date(); System.out.println(getName() + "-> " + DateFormat.getTimeInstance(3,Locale.FRANCE).format(h) + " Faltan " + cuenta + " seg. para la alarma"); super.start(); public void run() { for (int i = 1; i <= cuenta; i++) { EJERCICIO: Provoque un retraso de 1000 milisegundos System.out.println(getName() + "Riiinnnng!!!"); public class Relojes { public static void main(string[] args){ EJERCICIO: Cree dos instancias de la clase Reloj package hola; CountFile.java class CountFile { public static void main(string[] args) throws java.io.ioexception, java.io.filenotfoundexception { int count = 0; InputStream is; String filename; if (args.length >= 1) { EJERCICIO: Cree una instancia de FileInputStream, llamada is, para leer del fichero que se especifica como args[0] filename = args[0]; */!= -1) package hola; else { is = System.in; filename = "Input"; while (is./* EJERCICIO: utilice un metodo de FileInputStream para leer un caracter count++; System.out.println(filename + " has " + count + " chars."); CopyFile.java class CopyFile { public static void main(string[] args) throws java.io.ioexception, java.io.filenotfoundexception { byte[] buffer = new byte[256]; int count; if (args.length == 2) { EJERCICIO: Cree una instancia de FileInputStream, llamada is, para leer del fichero que se especifica como args[0] EJERCICIO: Cree una instancia de FileOutputStream, llamada os, para escribir en el fichero que se especifica como args[1] while ((count=is.read(buffer))!= -1) os.write(buffer,0,count); else { System.out.println("Se necesitan dos argumentos"); DataIOTest.java Se trata de escribir en un fichero: Java T-shirt Java Mug Duke Juggling Dolls y luego leerlo y sacarlo por pantalla NOTA: los datos numéricos deben escribirse como "números" y no como cadenas de caracteres. NOTA: los Strings deben escribirse como cadenas de bytes no como cadenas de caracteres (1caracter = 2 bytes) public class DataIOTest { 9 of 12 21/09/ :15 10 of 12 21/09/ :15

7 DYA - Introducción a Java file:/d:/jvila/docencia/dya05/practicas/hola.htm DYA - Práctica de Sockets file:/d:/jvila/docencia/dya05/practicas/sockets.htm public static void main(string[] args) throws IOException { E/S con DataInputStream y DataOutputStream Conveniente con datos numéricos (stream = secuencia de bytes) Aconsejable para ficheros o sockets pero no para teclado y pantalla EJERCICIO: Instancie un objeto de tipo DataOutputStream para escribir en el fichero "invoicetxt" DataOutputStream out = EJERCICIO: Instancie un objeto de tipo DataInputStream para leer del fichero "invoicetxt" DataInputStream in = Los datos son: double[] prices = { 19.99, 9.99, 15.99, 3.99, 4.99 ; int[] units = { 12, 8, 13, 29, 50 ; String[] descs = { "Java T-shirt", "Java Mug", "Duke Juggling Dolls", "Java Pin", "Java Key Chain" ; Un bucle para escribir for (int i = 0; i < prices.length; i ++) { out.writedouble(prices[i]); out.writechar('\t'); out.writeint(units[i]); out.writechar('\t'); out.writebytes(descs[i]); out.writechar('\n'); out.close(); Objetivo Prácticas de Java Servicio de echo en Java con sockets El objetivo de esta práctica es crear y ejecutar una aplicación cliente servidor "echo" basada en sockets TCP estructurándola como si fuera un sistema de objetos distribuidos utilizando el método de "stubs y esqueletos". La práctica pretende demostrar como realizar stubs y esqueletos "a mano". 2. Estructura de la aplicación Un bucle para leer double price; int unit; String desc; double total = 0.0; while (true) { EJERCICIO: leer el primer double del fichero sobre la variable price in.readchar(); throws out the tab EJERCICIO: leer el int siguiente sobre la variable unit in.readchar(); throws out the tab EJERCICIO: leer la cadena siguiente sobre la variable desc System.out.println("You've ordered " + unit + " units of " + desc + " at $" + price); total = total + unit * price; catch (EOFException e) { System.out.println("For a TOTAL of: $" + total); in.close(); while (true){; Esta aplicación consta de tres paquetes: la interfaz, el cliente y el servidor, que se describen a continuación. 2.1 El paquete interfaz (rmi) Consta del siguiente fichero: EchoInt.java :describe el servicio "Echo". Su finalidad es proporcionar a este servicio una interfaz de invocación a objeto remoto, ocultando el hecho de que la comunicación se realiza mediante sockets. Este fichero se encuentra completamente implementado. Visite este código y observe que lo único sorprendente de este código es la propagación de la siguiente excepción de RMI: throws java.rmi.remoteexception : representa cualquier error de comunicación remota. Cualquier excepción de comunicación con sockets debe ser reconvertido a esta excepción. Esto se realiza para mantener una uniformidad de Interfaz con la práctica siguiente. Allí se comprenderá plenamente. 2.2 El paquete servidor (server) Consta, básicamente, de los siguientes ficheros: 2. EchoObject.java : implementa la interfaz EchoInt y proporciona el servicio de "Echo". El servicio consiste en devolver la cadena que se envía, junto con el URL y la hora de la máquina servidora al cabo de 3 segundos (este retraso simula que el servicio tiene un tiempo de cómputo largo y apreciable. Visite este código. EchoServer.java : es el "esqueleto" de un servidor secuencial. Recibe una conexión a través de un socket 11 of 12 21/09/ :15 1 of 8 21/09/ :40

8 DYA - Práctica de Sockets file:/d:/jvila/docencia/dya05/practicas/sockets.htm DYA - Práctica de Sockets file:/d:/jvila/docencia/dya05/practicas/sockets.htm Invoca un objeto EchoObject.java Devuelve la respuesta por el socket Este fichero se encuentra completamente implementado. Visite este código y observe el manejo de sockets. Existe también una segunda versión multihilo de EchoServer.java denominada EchoMultiServer.java que se analizará más adelante. 2.3 El paquete cliente (client) Consta, básicamente, de los siguientes ficheros: EchoObjectStub.java :es el proxy del objeto en el nodo del cliente ("stub" del cliente). Observe que implementa la misma interfaz que el objeto: interfaz EchoInt y, adicionalmente, el método sethostandport, para especificar con que host y port se van a realizar las conexiones. Visite este código y observe que existen EJERCICIOS. 2. Echo.java :es el cliente propiamente dicho. Realiza el bucle: Leer de teclado Invocar el stub Imprimir el resultado por pantalla. Visite este código y observe que existen EJERCICIOS. Existe también una segunda versión de EchoObjectStub.java denominada EchoObjectStub2.java que implemanta una política diferente de de conexión/desconexión con el servidor que se analizará más adelante. 3. Creación de la estructura de directorios y del proyecto Cree el subdirectorio %USER%\prj-sockets 2. Visite la página de prácticas de la Web de la asignatura, descargue en el directorio %USER%\prj-sockets el fichero zip con los ficheros de apoyo a esta práctica y descomprímalo. 3. Observe la estructura de directorios creada con un subdirectorio %USER%\prj-sockets y los tres subdirectorios (rmi, cliente, servidor) de que consta este, uno por cada paquete. 4. Abra el entorno JBuilder 5. Cree el proyecto prj-sockets y configure adecuadamente las rutas, tal como se explica en la práctica de introducción a Java. 6. Observe que los paquetes y ficheros del proyecto han sido automáticamente incluidos. 7. Excluya de momento del proyecto los ficheros EchoMultiServer.java y EchoObjectStub2.java 4. Realización del cliente y el servidor de echo Complete los ejercicios de los ficheros que componen el cliente de echo: EchoObjectStub.java y Echo.java 2. Compile todos los ficheros del proyecto. 5. Ejecución de la aplicación Realice en primer lugar una configuración de ejecución para el cliente y otra para el servidor: Cree una configuración de ejecución para la clase EchoServer, utilizando Run-->Configurations->New, y denomínela server Cree una configuración de ejecución para la clase Echoutilizando Run-->Configurations->New, y denomínela client 2. Ejecute el servidor de echo (configuración server) 3. Ejecute y depure el cliente de echo: (configuración client) 4. Ejecute el cliente de echo en una consola de MS-DOS contra el servidor de echo de su máquina y contra los de las máquinas de sus "vecinos de prácticas". 6. Ampliando el proyecto y explorando nuevas posibilidades En relación con esta práctica se proponen realizar dos ejercicios más avanzados con variantes del stub y del esqueleto: Un servidor de Echo multihilo: es un esqueleto que debe ser capaz de atender peticiones concurrentemente. Observe que el servidor multihilo proporciona la respuesta con tres segundos de retraso con el fin de que pueda observarse que varios hilos pueden ejecutarse concurrentemente. Se proporciona una plantilla de este esqueleto en el fichero EchoMultiServer.java. 2. Un stub de echo con desconexión por timeout: el "stub" anterior abre una conexión al inicio de una invocación y la cierra cuando termina. Se propone sustituir esta política por la siguiente: Cuando termina una petición el stub del cliente programa la desconexión con el servidor para la cabo de 5 segundos. Si el cliente realiza una petición y existe una conexión establecida, se envían los datos al servidor, sino, se abre una nueva conexión y se envían los datos al servidor. Si durante los cinco segundos siguientes a una invocación no llegan nuevas peticiones, se cierra automáticamente la conexión. Se proporciona una plantilla de este stub en en el fichero EchoObjectStub2.java. 7. Ficheros de apoyo package rmi; public interface EchoInt{ EchoInt.java public String echo(string input)throws java.rmi.remoteexception; package server; import java.net.*; import java.text.*; import java.util.*; public class EchoObject implements EchoInt { String myurl="localhost"; EchoObject.java public EchoObject(){ myurl=inetaddress.getlocalhost().gethostname(); catch (UnknownHostException e) { myurl="localhost"; public String echo(string input) throws java.rmi.remoteexception { Date h = new Date(); 2 of 8 21/09/ :40 3 of 8 21/09/ :40

9 DYA - Práctica de Sockets file:/d:/jvila/docencia/dya05/practicas/sockets.htm DYA - Práctica de Sockets file:/d:/jvila/docencia/dya05/practicas/sockets.htm String fecha = DateFormat.getTimeInstance(3,Locale.FRANCE).format(h); String ret = myurl + ":" + fecha + "> " + input; Thread.sleep(3000); ret = ret + " (retrasada 3 segundos)"; catch (InterruptedException e) { return ret; package server; import java.net.*; EchoServer.java class EchoServer { private static EchoObject eo = new EchoObject(); private static String myurl="localhost"; private static ServerSocket serversocket = null; private static Socket clientsocket = null; private static BufferedReader is = null; private static PrintWriter os = null; private static String inputline = new String(); public static void main(string[] args) { myurl=inetaddress.getlocalhost().gethostname(); catch (UnknownHostException e) { System.out.println("Unknown Host :" + e.tostring()); System.exit(1); serversocket = new ServerSocket(7); catch (IOException e) { System.out.println(myURL + ": could not listen on port: 7, " + e.tostring()); System.exit(1); System.out.println(myURL + ": EchoServer listening on port: 7"); boolean listening = true; while(listening){ clientsocket = serversocket.accept(); is = new BufferedReader( new InputStreamReader( clientsocket.getinputstream())); os = new PrintWriter(clientSocket.getOutputStream()); while ((inputline = is.readline())!= null) { os.println(eo.echo(inputline)); os.flush(); os.close(); is.close(); clientsocket.close(); serversocket.close(); package client; catch (IOException e) { System.err.println("Error sending/receiving" + e.getmessage()); e.printstacktrace(); import java.net.*; EchoObjectStub.java public class EchoObjectStub implements EchoInt{ private Socket echosocket = null; private PrintWriter os = null; private BufferedReader is = null; private String host = "localhost"; private int port=7; private String output = "Error"; private boolean connected = false; public void sethostandport(string host, int port) { this.host= host; this.port =port; public String echo(string input)throws java.rmi.remoteexception { connect(); if (echosocket!= null && os!= null && is!= null) { os.println(input); os.flush(); output= is.readline(); catch (IOException e) { System.err.println("I/O failed in reading/writing socket"); disconnect(); return output; private synchronized void connect() throws java.rmi.remoteexception { EJERCICIO: Implemente el método connect private synchronized void disconnect(){ EJERCICIO: Implemente el método disconnect package client; import java.net.*; public class Echo { private static EchoObjectStub ss; Echo.java 4 of 8 21/09/ :40 5 of 8 21/09/ :40

10 DYA - Práctica de Sockets file:/d:/jvila/docencia/dya05/practicas/sockets.htm DYA - Práctica de Sockets file:/d:/jvila/docencia/dya05/practicas/sockets.htm public static void main(string[] args) { if (args.length<2) { System.out.println("Usage: Echo <host> <port#>"); System.exit(1); ss = EJERCICIO: crear una instancia del stub ss.sethostandport(args[0],integer.parseint(args[1])); BufferedReader stdin = new BufferedReader( new InputStreamReader(System.in)); PrintWriter stdout = new PrintWriter(System.out); String input,output; EJERCICIO: el bucle infinito: EJERCICIO: Leer de teclado EJERCICIO: Invocar el stub EJERCICIO: Imprimir por pantalla catch (UnknownHostException e) { System.err.println("Don't know about host: "+ args[0]); catch (IOException e) { System.err.println("I/O failed for connection to: "+args[0]); package server; import java.net.*; EchoMultiServer.java class EchoMultiServer { private static ServerSocket serversocket = null; public static void main(string[] args) { serversocket = new ServerSocket(7); catch (IOException e) { System.out.println("EchoMultiServer: could not listen on port: 7, " + e.tostring()); System.exit(1); System.out.println("EchoMultiServer listening on port: 7"); boolean listening = true; while (listening) { EJERCICIO: aceptar una nueva conexión EJERCICIO: y crear un Thread para que la gestione serversocket.close(); catch (IOException e) { System.err.println("Could not close server socket." + e.getmessage()); class EchoMultiServerThread class EchoMultiServerThread extends Thread { private static EchoObject eo = new EchoObject(); private Socket clientsocket = null; private String myurl = "localhost"; private static BufferedReader is = null; private static PrintWriter os = null; private static String inputline = new String(); EchoMultiServerThread(Socket socket) { super("echomultiserverthread"); clientsocket = socket; is = new BufferedReader(new InputStreamReader( EJERCICIO... )); os = new PrintWriter( EJERCICIO... ); catch (IOException e) { System.err.println("Error sending/receiving" + e.getmessage()); e.printstacktrace(); myurl=inetaddress.getlocalhost().gethostname(); catch (UnknownHostException e) { System.out.println("Unknown Host :" + e.tostring()); System.exit(1); public void run() { while ((inputline = is.readline())!= null) { EJERCICIO: Invocar el objeto EJERCICIO: y devolver la respuesta por el socket package client; os.close(); is.close(); clientsocket.close(); catch (IOException e) { System.err.println("Error sending/receiving" + e.getmessage()); e.printstacktrace(); import java.net.*; EchoObjectStub2.java public class EchoObjectStub implements EchoInt, Runnable { private Socket echosocket = null; private PrintWriter os = null; 6 of 8 21/09/ :40 7 of 8 21/09/ :40

11 DYA - Práctica de Sockets file:/d:/jvila/docencia/dya05/practicas/sockets.htm DYA - Práctica de java-rmi file:/d:/jvila/docencia/dya05/practicas/rmi.htm private BufferedReader is = null; private String host = "localhost"; private int port=7; private String output = "Error"; private boolean connected = false; Prácticas de Java Servicio de echo con Java-RMI private Thread reloj = new Thread(this, "reloj"); private int timeout = 50; private boolean firsttime = true; Objetivo public void sethostandport(string host, int port) { this.host= host; this.port =port; public String echo(string input)throws java.rmi.remoteexception { connect(); if (echosocket!= null && os!= null && is!= null) { os.println(input); os.flush(); output= is.readline(); catch (IOException e) { System.err.println("I/O failed in reading/writing socket"); programdisconnection(); return output; private synchronized void connect() throws java.rmi.remoteexception { EJERCICIO: lo mismo que en EchoObjectStub private synchronized void disconnect(){ EJERCICIO: lo mismo que en EchoObjectStub private synchronized void programdisconnection(){ EJERCICIO: programar un timeout para la cabo de 5 segundos public void run(){ while (true) { EJERCICIO: esperar 5 segundos y desconectar reloj.suspend(); El objetivo de esta práctica es crear y ejecutar una aplicación "echo" basada en java-rmi. La práctica tiene dos partes: En la primera parte, el servidor es un objeto java-rmi con un único método "echo". 2. En la segunda parte, el servidor es una máquina de cómputo genérica, denominada objeto "ComputeEngine", a la que se le pasa por valor (se migra) una tarea (task) u objeto serializable que contiene el algoritmo que la máquina de computo genérica ejecutará. En este caso, la tarea que se le pasa por valor (migra) es un objeto que implementa el servicio de echo. 2. Estructura de la aplicación Esta aplicación consta de tres paquetes: la interfaz, el cliente y el servidor, que se describen a continuación. 2.1 La interfaz del servicio (rmi) Ficheros: EchoInt.java: describe el servicio "Echo". Este fichero se encuentra completamente implementado. Visite este código y observe que es prácticamente igual a la interfaz especificada en la práctica anterior, excepto que el interfaz es en esta práctica es subclase de Remote: extends java.rmi.remote 2.2 El servidor (server) Ficheros: EchoObject.java : objeto que implementa la interfaz EchoInt y, en particular, el método echo. La implementación es idéntica a la práctica anterior. Visite este código. 2. EchoObjectRMI.java : es el objeto RMI. También implementa la interfaz EchoInt. Se basa en crear una instancia del objeto EchoObject y delegar en el la implementación del método echo. La funcionalidad fundamental de esta clase es registrar el servicio en el servidor de nombres y proporcionarle la capacidad de ser invocado remotamente. Visite este código y observe que existen EJERCICIOS. 2.2 El cliente (client) Ficheros: EchoRMI.java :es el cliente RMI. Se encarga de obtener una referencia al objeto servidor a partir del servicio de nombres. Una vez obtenida esta referencia, realiza el bucle: Leer de teclado Invocar el objeto (a través de la referencia al objeto) Imprimir el resultado por pantalla. Visite este código y observe que existen EJERCICIOS. 3. Creación de la estructura de directorios y del proyecto 8 of 8 21/09/ :40 1 of 5 21/09/ :19

12 DYA - Práctica de java-rmi file:/d:/jvila/docencia/dya05/practicas/rmi.htm DYA - Práctica de java-rmi file:/d:/jvila/docencia/dya05/practicas/rmi.htm Cree el subdirectorio %USER%\prj-rmi 2. Visite la página de prácticas de la Web de la asignatura, descargue en el directorio %USER%\prj-rmi el fichero zip con los ficheros de apoyo a esta práctica y descomprímalo. 3. Observe la estructura de directorios creada con un subdirectorio %USER%\prj-rmi\src y los tres subdirectorios (rmi, client, server) de que consta este, uno por cada paquete. 4. Abra el entorno JBuilder 5. Cree el proyecto prj-rmi y configure adecuadamente las rutas, tal como se explica en la práctica de introducción a Java. 6. Observe que los paquetes y ficheros del fichero zip han sido automáticamente incluidos en el proyecto. 4. Realización del cliente y el servidor de echo Realice el servidor de echo: Realice los ejercicios del fichero EchoObjectRMI.java: Declare correctamente la clase EchoObjectRMI Implemente el método main. Observe si es necesario importar algun paquete adicional (import...) Pinche el botón derecho sobre el fichero EchoObjectRMI.java,seleccione la opción Properties y elija la opción Generate Stubs / Skeletons RMI para que el preprocesador rmic (RMI compiler) genere stubs y skeletons antes de pasar a compilar con el compilador javac. Compile (Project -> Make) el servidor de echo y observe los stubs y skeletons generados por rmic en el directorio %USER%\codebase\rmi\Generarted Source 2. Realice el cliente de echo: Abra el fichero del cliente de echo EchoRMI.java y realice los ejercicios prropuestos. Compile el cliente de echo (Project -> Make) 5. Ejecución de la aplicación La ejecución de la aplicación presenta varios aspectos novedosos: 5.1 Aspectos de seguridad La plataforma Java 2 tiene un gestor de seguridad (RMISecurityManager) que toma precauciones especiales en la comunicación RMI y, muy especialmente, con las clases descargadas por la red (enviadas como argumentos por valor). La aplicación echo (tanto el servidor como el cliente) necesita comunicar con el servicio de nombres a través del puerto TCP/IP 1099 para registrar/obtener referencias a objetos. Este permiso hay que atorizarlo expresamente. Edite el fichero %USER/prj-rmi/java.policy y defina las políticas de seguridad. grant { permission java.net.socketpermission "*: ", "connect,accept,resolve"; ; 2. Busque la clase java.net.socketpermission en el API de Java y averigüe el significado exacto del permiso anterior. 5.2 Parámetros de ejecución para la máquina virtual (VM) Estos parámetros on importantes en aplicaciones Java-RMI, pues se ha de especificar que se cambie la política de seguridad por defecto de Java, para permitir conexiones con el servicio de nombres. También se ha de especificar en que directorio ha de buscar Java-RMI el código de los servidores. 2. Realice una configuración de ejecución para el servidor: Name: el nombre del entorno -> denomínelo server Main class: la clase a ejecutar -> seleccione server.echoobjectrmi VM parameters: parámetros de ejecución de la máquina virtual -> -Djava.security.policy=java.policy -Djava.rmi.server.codebase=file:..\codebase/ -Djava.rmi.server.hostname=localhost Application parameters:parámetros de ejecución de la aplicación -> No hay Realice una configuración de ejecución para el cliente: Name: el nombre del entorno -> denomínelo client Main class: la clase a ejecutar -> seleccione client.echormi VM parameters: parámetros de ejecución de la máquina virtual -> -Djava.security.policy=java.policy - Application parameters: parámetros de ejecución de la aplicación -> localhost, URL de compañeros, etc El servicio de nombres rmiregistry Esta práctica de RMI se basa en el servidor de nombres RMIregistry para intercambiar referencias a objetos entre cliente y servidor. Por tanto es necesario ponerlo en ejecución antes de lanzar las aplicaciones cliente y servidor. Ejecute el RMIregistry con el menú Tools-->RMIRegistry o desde una consola de MS_DOS con la orden: > unset CLASSPATH > start rmiregistry 2. Observe que el proceso rmiregistry abre una ventana de ejecución en el entorno JBuilder 5.2 Ejecución de cliente y servidor. Ejecute el servidor de echo (configuración de ejecución server) 2. Ejecute y depure el cliente de echo: (configuración de ejecución client) 6. La aplicación echo con RMI y paso de clases serializadas por valor (migración) Visite el tutorial de Java y seleccione el capítulo de RMI. Verá que en este capítulo se desarrolla una aplicación donde existe un servidor de computo genérico ComputeEngine, al que se le puede pasar por valor ("migración") una Task para que la ejecute. La Task que se desarrolla en el tutorial es Pi que calcula el número pi. Esta segunda parte consiste en compilar y ejecutar el ejemplo del tutorial y, posteriormente, modificarlo para pasarle por valor ("migración") al ComputeEngine una Task que sea el objeto Echo, para que así éste ejecute el algoritmo de Echo. Descargue del tutorial todos los ficheros necesarios El interfaz Compute.java El interfaz Task.java La máquina de computo genérica ComputeEngine.java El cliente ComputePi.java La tarea que se pasa como argumento a ComputeEngine Pi.java 2. Compílelo y ejecútelo 3. Modifique la máquina de cómputo ComputeEngine.java para que responda a la siguiente interfaz: import java.rmi.remote; import java.rmi.remoteexception; public interface Compute extends Remote { 2 of 5 21/09/ :19 3 of 5 21/09/ :19

13 DYA - Práctica de java-rmi file:/d:/jvila/docencia/dya05/practicas/rmi.htm DYA - Práctica de java-rmi file:/d:/jvila/docencia/dya05/practicas/rmi.htm Cargar una nueva task. No ejecutarla void loadtask(task t) throws RemoteException; Ejecutar una task previamente cargada pasándole como argumentos arg y devolviendo el resultado Object executetask(object arg) throws RemoteException; 4. Realice una task que implemente el algoritmo de echo de la primera parte (en vez de calcular pi). 5. Realice una nueva versión del cliente de echo de la primera parte de la práctica para que invoque la nueva máquina de cómputo genérica. 6. Ejecute la nueva versión del servidor de cómputo genérico. 7. Ficheros de apoyo EchoInt.java package rmi; public interface EchoInt extends java.rmi.remote{ public String echo(string input) throws java.rmi.remoteexception; package server; import java.net.*; import java.text.*; import java.util.*; EchoObject.java public class EchoObject implements EchoInt { String myurl="localhost"; public EchoObject(){ myurl=inetaddress.getlocalhost().gethostname(); catch (UnknownHostException e) { myurl="localhost"; public String echo(string input) throws java.rmi.remoteexception { Date h = new Date(); String fecha = DateFormat.getTimeInstance(3,Locale.FRANCE).format(h); String ret = myurl + ":" + fecha + "> " + input; Thread.sleep(3000); ret = ret + " (retrasada 3 segundos)"; catch (InterruptedException e) { return ret; import java.net.*; import java.rmi.*; import java.rmi.server.unicastremoteobject; public class EchoObjectRMI extends EJERCICIO { private static EchoObject eo = new EchoObject(); public EchoObjectRMI() throws RemoteException { super(); public String echo(string input) throws RemoteException { return eo.echo(input); public static void main(string args[]) { EJERCICIO: instale un gestor de seguridad EJERCICIO: cree una instancia de este objeto EJERCICIO: e inscríbala en el servicio de nombres EchoRMI.java package pr3; import java.rmi.*; import java.net.*; public class EchoRMI{ public static void main(string args[]) { if (args.length<1){ System.out.println("Uso echo <host>");system.exit(1); if(system.getsecuritymanager()== null) System.setSecurityManager(new RMISecurityManager()); BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in)); PrintWriter stdout = new PrintWriter(System.out); String input,output; try{ EchoInt obj = EJERCICIO: Obtener una referencia al objeto stdout.print("> "); stdout.flush(); while ( (input = stdin.readline())!=null){ EJERCICIO: bucle para leer de teclado EJERCICIO: invocar el objeto RMI EJERCICIO: e imprimir pon pantalla catch(exception e){ System.out.println("Error en el cliente de echo RMI : " + e.getmessage()); EchoObjectRMI.java package pr3; import java.text.*; import java.util.*; 4 of 5 21/09/ :19 5 of 5 21/09/ :19

14 DYA - Práctica de CORBA file:/d:/jvila/docencia/dya05/practicas/corba.htm DYA - Práctica de CORBA file:/d:/jvila/docencia/dya05/practicas/corba.htm Objetivo Prácticas de Java Servicio de echo con Java y CORBA La arquitectura CORBA permite la realización de aplicaciones distribuidas heterogéneas siguiendo la metodología de objetos. El objetivo de esta práctica es crear y ejecutar una aplicación cliente/servidor "echo" realizada en Java, siguiendo la metodología de objetos distribuidos de CORBA. La segunda parte de la práctica demuestra que la tecnología CORBA funciona también en un entorno heterogéneo. Para ello se proporciona una implementación de la misma aplicación realizada en lenguaje C++ y se hacen interaccionar clientes y servidores Java con clientes y servidores C++. La plataforma CORBA utilizada en la práctica es Orbacus, La documentación de Orbacus la puede encontrar en la página de prácticas de la web de la asignatura. Esta práctica desarrolla los contenidos del capítulo 2 (Getting Started). 2. Estructura de la aplicación Esta aplicación consta de una interfaz IDL y tres paquetes: el cliente, el servidor, y corba, los cuales se describen a continuación. 2.1 La interfaz IDL Ficheros: Echo.idl: definición de la interfaz en el lenguaje IDL (estandarizado por CORBA para definir interfaces) del servicio "Echo". 2.2 El paquete servidor (server) Ficheros: EchoServer.java: tiene la estructura típica de un servidor CORBA. Realiza la inicialización del objeto y se encarga de publicar su IOR: 2. EchoImpl.java: el objeto que implementa las operaciones definidas por el interfaz IDL. Se basa en crear una instancia del objeto EchoObject (que es el mismo que en las dos prácticas anteriores) y delegar en el la implementación del método echo. 3. EchoObject.java : implementa el método echo. Idéntico a la práctica anterior El paquete cliente (client) Ficheros: EchoClient.java: tiene la estructura típica de un cliente CORBA. Se encarga de realizar la inicialización del objeto, obtener un IOR al objeto servidor y realizar el bucle: Leer de teclado Invocar el método echo del objeto remoto Imprimir el resultado por pantalla. 2.4 El paquete corba Este paquete se genera automáticamente al procesar la interfaz IDL (Echo.idl) y contiene los stubs y soporte CORBA necesario. Los distintos ficheros generados no son, en principio, de mucho interés pues no se han de ser modificados. 3.5 Publicación del IOR Aunque el entorno Orbacus dispone de un Naming Service y un Trading Service, no se hace uso de ellos en la primera parte de esta práctica. Así pues, la publicación de los servicios y el IOR de un servidor no se publica en un servicio de nombres, sino que se opta por la siguiente estrategia: El servidor escribirá su IOR (referencia a si mismo) en forma de string en un fichero Echo.ref el cliente obtendrá el IOR del servidor a partir del fichero Echo.ref. Este fichero se proporcionará al cliente (que normalmente residirá en otra máquina), en la forma que se considere oportuna: publicándolo en una web, enviandolo un correo-e, enviandolo en un disquette, compartiendo un directorio que contenga el fichero,...). 3. Creación de la estructura de directorios y del proyecto Cree el subdirectorio %USER%\prj-corba 2. Visite la página de prácticas de la Web de la asignatura, descargue en el directorio %USER%\prj-corba el fichero zip con los ficheros de apoyo a esta práctica y descomprímalo. 3. Observe los ficheros descargados: Un subdirectorio %USER%\prj-corba\src con dos subdirectorios (client, server) para los fuentes de cliente y servidor. Un fichero %USER%\prj-corba\src\echo.idl con la interfaz IDL del servicio un subdirectorio %USER%\prj-corba\orbacus inicialmente vacio para descargar el entorno CORBA: Procesador de IDL, constituido por los ficheros jidl.exe e idlcpp.exe, ambos en el directorio de fuentes %USER%\prj-corba\src Biblioteca de clases CORBA OB.jar, OBNaming.jar, OBUtils.jar en el directorio de trabajo %USER%\prj-corba Un subdirectorio %USER%\prj-corba\c++ con la implementación en C++ de la aplicación. 3. Instalación de la plataforma CORBA La plataforma CORBA utilizada es Orbacus, disponible para Java y C++ sobre Linux y Windows. El software de Orbacus se encuentra en el ftp de la asignatura. Para instalarlo, proceda como se indica: 2. Instalación de bibliotecas de clases CORBA: Descargue el fichero Orbacus-4.0.3/JOB-4_0_3_jars.zip y extraiga los ficheros OB.jar, OBNaming.jar y OBUtils al directorio %USER%\prj-corba\Orbacus. Instalación del procesador de IDL, constituido por los ficheros jidl.exe e idlcpp.exe contenidos en el fichero Orbacus-4.0.3/win32/JOB-4_0_3-bin-win32.zip La documentación de Orbacus la puede encontrar en la página de prácticas de la web de la asignatura. Esta práctica desarrolla los contenidos del capítulo 2 (Getting Started) Creación del proyecto Abra el entorno JBuilder 2. Cree el proyecto prj-rmi y configure adecuadamente las rutas, tal como se explica en la práctica de introducción a Java. 3. Observe que los paquetes y ficheros obtenidos del fichero zip han sido automáticamente incluidos en el proyecto. 4. Incluya la biblioteca OB.jar con las clases CORBA en el proyecto. Para ello en la ventana de Project Properties -> Required Libraries, seleccione: 1 of 8 21/09/ :01 2 of 8 21/09/ :01

15 DYA - Práctica de CORBA file:/d:/jvila/docencia/dya05/practicas/corba.htm DYA - Práctica de CORBA file:/d:/jvila/docencia/dya05/practicas/corba.htm Add->User Home->New y especifique Name: OB y Add->OB.jar, OBNaming.jar, OButils.jar 4. El proyecto Echo con CORBA El desarrollo de una aplicación CORBA consta de los siguientes pasos: 4.1 Procesamiento de la interfaz IDL del servicio echo Abra el fichero Echo.idl y complete los EJERCICIOS propuestos. Básicamente consisten en la declaración del método echo_. 2. Abra un intérprete de MS-DOS en el directorio %USER%prj-corba\src, incluya el directorio %USER%prj-corba\orbacus en la ruta de ejecución (%PATH%) y procese la interfaz Echo.idl: $ jidl Echo.idl 3. Observe que se crea un directorio %USER%prj-corba\orbacus\corba con los ficheros Echo.java, EchoHelper.java, EchoHolder.java, EchoOperations.java, EchoPOA.java y _EchoStub.java. 4. Refresque la ventana con la estructura del proyecto en JBuilder y observe que dichos ficheros han sido incluidos en el proyecto. 4.2 Los ejercicios... El código a realizar se encuentra comentado en los propios ficheros. No obstante, es importante visitar el capítulo 2 (Getting Started) de la documentación de Orbacus, pues este ejemplo se ha extraído de dicho manual. Realice el servidor de echo: Realice los ejercicios del fichero EchoServer.java. Básicamente consiste en escribir el IOR en forma de string en un fichero Echo.ref. 2. Realice los ejercicios del fichero EchoImpl.java. Básicamente consiste en crear una instancia del objeto EchoObject (que es el mismo que en las dos prácticas anteriores) y delegar en el la implementación del método echo. 2. Realice el cliente de echo: Realice los ejercicios de los ficheros EchoClient.java 4.3 Compilando, ejecutando... Compile todo el proyecto (Project -> Make). Puede que tenga que importar el paquete corba en algun fichero para subsanar errores. 2. Realice una configuración de ejecución para el servidor: 3. Realice una configuración de ejecución para el cliente: 4. Ejecute el servidor (selecciónelo y pulse F9) 5. Observe que se genera el fichero Echo.ref con el IOR de su servidor en el directorio de trabajo %USER%\prj-corba. Intercámbielo con su vecino. 6. Ejecute el cliente (selecciónelo y pulse F9). Observe que su cliente se ejecuta contra el servidor de su vecino, puesto que obtiene su IOR a partir del fichero Echo.ref. 4.4 Y resolviendo problemas... Mate el servidor de Echo y mantenga vivo al cliente. Vuelva a poner en marcha el servidor y trate de que el cliente solicite el servicio de nuevo. Que ocurre?. Porqué?. 2. Si en el apartado anterior detecta problemas, resuélvalos mediante un manejo adecuado de excepciones: si el cliente detecta la muerte del servidor, debe obtener el IOR del nuevo servidor. 5. Aplicaciones heterogéneas: JAVA/C++ Esta parte de la práctica consiste en comprobar el funcionamiento cruzado de clientes y servidores java y C++ (cliente C++ con servidor java y viceversa). El desarrollo de la aplicación "echo" en C++ con Orbacus se encuentra en el directorio %USER%\prj-corba\c++. Contiene los ficheros fuente en C++, asi como los ejecutables ya compilados: client.exe y server.exe. Para comprobar este funcionamiento ha de tener en cuenta los siguientes aspectos: La interfaz IDL utilizada durante el desarollo en C++ no se declara dentro de un módulo "module corba". Por tanto, para poder probar el funcionamiento cruzado deberá modificar el siguiente ódigo de los siguientes ficheros: Fichero EchoHelper.java: eliminar el texto en rojo: public static String id() { return "IDL:corba/Echo0"; FicheroFichero EchoPOA.java: eliminar el texto en rojo: static final String[] _ob_ids_ = { "IDL:corba/Echo0"; ; 2. El fichero Echo.ref deberá encontrarse en el directorio de trabajo tanto de la aplicación C++ como de la aplicación Java. Por tanto, hay que trasladar los ejecutables client.exe y server.exe al directorio de trabajo de Jbuilder %USER%\prj-corba y ejecutarlos desde consolas en en este directorio de trabajo. 6. El Servicio de Nombres CORBA Para realizar esta parte de la práctica se recomienda crear un nuevo proyecto. El soporte al servicio de nombres Orbacus se encuentra en la biblioteca OBNaming,jar previamente incluida en el proyecto. Para su utilización es necesario sustituir el código que exporta/importa la referencia en un fichero por un código que utilice el servicio de nombres, tanto en el servidor como en el cliente: 2. Servidor Echo_impl echoimpl = new Echo_impl(); Echo echo = echoimpl._this(orb); org.omg.corba.object objref = orb.resolve_initial_references("nameservice"); NamingContext ncref = NamingContextHelper.narrow(objRef); NameComponent nc = new NameComponent ("Echo", ""); NameComponent path[] = {nc; ncref.rebind(path,echo); Cliente org.omg.corba.object obj = null; org.omg.corba.object objref = orb.resolve_initial_references("nameservice"); NamingContext ncref = NamingContextHelper.narrow (objref); NameComponent nc = new NameComponent ("Echo", ""); NameComponent path[] = {nc; Echo echo = EchoHelper.narrow(ncRef.resolve(path)); Para ejecutar el Servicio de Nombres, cree una configuración de ejecución. Para ello, abra el menú de Run->Configurations y cree el nuevo perfil con los siguientes datos: 3 of 8 21/09/ :01 4 of 8 21/09/ :01

16 DYA - Práctica de CORBA file:/d:/jvila/docencia/dya05/practicas/corba.htm DYA - Práctica de CORBA file:/d:/jvila/docencia/dya05/practicas/corba.htm Name: el nombre del entorno -> denomínelo Name Service Main class: la clase a ejecutar -> seleccione com.ooc.cosnaming.server Application parameters: parámetros de ejecución de la aplicación -> -OAport 1111 Puede ejecutar también una Consola del Servicio de Nombres Orbacus realizando la siguiente configuración de ejecución: Name: el nombre del entorno -> denomínelo Name Service Main class: la clase a ejecutar -> seleccione com.ooc.cosnamingconsole.main VM parameters: parámetros de ejecución de la aplicación -> -Dooc.orb.service.NameService=corbaloc::localhost:1111/NameService Este último parámetro VM es el que debe especificar en las aplicaciones que utilicen el Servicio de Nombres. Si desea cambiar de Servicio de Nombres (p.e. al de su vecino de prácticas) deberá realizar los cambios oportunos en este parámetro. Otras dudas del servicio de nombre pueden consultarse en los capítulos 9 y 10 del manual de Orbacus, disponible en la web de la asignatura. 7. Ficheros de apoyo Echo.idl module corba { interface Echo { Methods EJERCICIO: definir el método echo_ ; ; EchoServer.java package server; public class EchoServer { Inicialización/terminación de un programa CORBA Standalone Identico para cliente y servidor public static void main(string args[]) { int status = 0; org.omg.corba.orb orb = null; java.util.properties props = System.getProperties(); props.put("org.omg.corba.orbclass", "com.ooc.corba.orb"); props.put("org.omg.corba.orbsingletonclass", "com.ooc.corba.orbsingleton"); orb = org.omg.corba.orb.init(args, props); Llamar al método run con las acciones propias del cliente o servidor status = run(orb, args); catch(exception ex) { ex.printstacktrace(); status = 1; if(orb!= null) { Since the standard ORB.destroy() method is not present in JDK 2.x, we must cast to com.ooc.corba.orb so that this will compile with all JDK versions ((com.ooc.corba.orb)orb).destroy(); catch(exception ex) { ex.printstacktrace(); status = 1; System.exit(status); El código del servidor static int run(org.omg.corba.orb orb, String[] args) throws org.omg.corba.userexception { Buscar el POA (Adaptador de Objetos Portable para conectarse al bus ORB) org.omg.corba.object obj = orb.resolve_initial_references("rootpoa"); org.omg.portableserver.poa rootpoa = org.omg.portableserver.poahelper.narrow(obj); Obtener una referencia al POA manager org.omg.portableserver.poamanager manager = rootpoa.the_poamanager(); Crear una instancia del objeto Echo_impl echoimpl = new Echo_impl(); Echo echo = echoimpl._this(orb); Salvar la referencia en un fichero String reffile = "Echo.ref"; EJERCICIO: Escriba el IOR en el fichero Echo.ref catch(java.io.ioexception ex) { System.err.println("echo.Server: can't write to `" + ex.getmessage() + "'"); return 1; manager.activate(); orb.run(); return 0; EchoInt.java package server; public interface EchoInt extends java.rmi.remote{ public String echo(string input) throws java.rmi.remoteexception; package server; import java.net.*; EchoObject.java 5 of 8 21/09/ :01 6 of 8 21/09/ :01

17 DYA - Práctica de CORBA file:/d:/jvila/docencia/dya05/practicas/corba.htm DYA - Práctica de CORBA file:/d:/jvila/docencia/dya05/practicas/corba.htm import java.text.*; import java.util.*; public class EchoObject implements EchoInt { String myurl="localhost"; public EchoObject(){ myurl=inetaddress.getlocalhost().gethostname(); catch (UnknownHostException e) { myurl="localhost"; public String echo(string input) throws java.rmi.remoteexception { Date h = new Date(); String fecha = DateFormat.getTimeInstance(3,Locale.FRANCE).format(h); String ret = myurl + ":" + fecha + "> " + input; Thread.sleep(3000); ret = ret + " (retrasada 3 segundos)"; catch (InterruptedException e) { return ret; Echo_impl.java package server; import java.net.*; public class Echo_impl extends EchoPOA { private static EchoObject eo = new EchoObject(); public String echo_(string astring) { EJERCICIO: Implemente el método delegando en el objeto eo el método echo EchoClient.java package client; import java.awt.*; import java.awt.event.*; public class EchoClient { Inicialización/terminación de un programa CORBA Standalone Identico para cliente y servidor public static void main(string args[]) { int status = 0; org.omg.corba.orb orb = null; java.util.properties props = System.getProperties(); props.put("org.omg.corba.orbclass", "com.ooc.corba.orb"); props.put("org.omg.corba.orbsingletonclass", "com.ooc.corba.orbsingleton"); orb = org.omg.corba.orb.init(args, props); Llamar al método run con las acciones propias del cliente o servidor status = run(orb, args); catch(exception ex) { ex.printstacktrace(); status = 1; if(orb!= null) { Since the standard ORB.destroy() method is not present in JDK 2.x, we must cast to com.ooc.corba.orb so that this will compile with all JDK versions ((com.ooc.corba.orb)orb).destroy(); catch(exception ex) { ex.printstacktrace(); status = 1; System.exit(status); El código del cliente static int run(org.omg.corba.orb orb, String[] args) throws org.omg.corba.userexception { Obtener una referencia al objeto "echo" a partir de un fichero con el IOR en forma de string org.omg.corba.object obj = null; EJERCICIO: ponga aquí el código que obtiene el IOR del fichero Echo.ref Narrowing del IOR a tipo Echo Echo echo = EJERCICIO: haga el "narrowing" del IOR al tipo Echo; Bucle principal del cliente Leer de teclado, invocar el servidor e imprimir por pantalla String input, output; BufferedReader in = new BufferedReader( new InputStreamReader(System.in)); do { EJERCICIO: ponga el código del bucle while(!input.equals("x")); catch(ioexception ex) { System.err.println("Can't read from `" + ex.getmessage() + "'"); return 1; return 0; 7 of 8 21/09/ :01 8 of 8 21/09/ :01

18 DYA - Práctica de Difusion file:/d:/jvila/docencia/dya05/practicas/difusion.htm DYA - Práctica de Difusion file:/d:/jvila/docencia/dya05/practicas/difusion.htm Objetivo Prácticas de Java Difusión a grupos El objetivo de esta práctica es doble: por una parte, iniciar construir la base principal del proyecto "Agencia de Robots" que constituye el trabajo final de esta asignatura y, por otra, conocer la interfaz Java de la primitiva de comunicación de grupos llamada difusión selectiva o "multicast". Adicionalmente, la práctica también introduce la capacidad para "serializar objetos" existente en Java, la cual permitirá enviar "objetos Java" a través de una difusión. Esta práctica se basa en el esquema conocido como la "Agencia de robots", en el que hay un conjunto de robots resolviendo un problema distribuido (la persecución, partido de fútbol,...) y una cámara registra periódicamente el "estado global del sistema" (al estado global del sistema en un instante dado se le llama "instantánea"). La cámara difunde este estado global a los robots para que estos puedan coordinarse y tomar decisiones "inteligentes" para resolver el problema. Se podrá ampliar la práctica para tolerar fallos de la cámara o realizar una versión descentralizada de la misma. 2. Estructura de la aplicación Esta aplicación se encuentra estructurada en 4 proyectos diferentes de JBuilder, cada uno de los cuales contiene una parte de la práctica. Cada proyecto debe producir un fichero de archivo tipo jar con el código que produce. Estos ficheros jar pueden ser utilizados, en forma de biblioteca, por otros proyectos de la práctica. Los proyectos de que consta la práctica son: prj-corba: implementa una biblioteca con la interfaz CORBA par comunicar los diferentes objetos remotos: Camara, Robots, Consolas 2. prj-difusion: implementa una biblioteca con las clases para la difusión y un test de las mismas. 3. prj-camara: implementa el objeto CORBA camara que se ocupa de gestionar los componentes del grupo y de realizar las difusiones 4. prj-robot: implementa el objeto CORBA robot que es un los componente del grupo que escucha las difusiones y es muestreado por las cámara para conocer su estado. 2.1 El proyecto prj-corba Este proyecto consta de un paquete: corba. Inicialmente solo contiene el fichero siguiente: robot.idl: definición de las interfaces en el lenguaje IDL (estandarizado por CORBA para definir interfaces) de los servicios que proporcionan la cámara y los robots y de las estructuras necesarias para que se comuniquen entre ellos. La cámara ofrece los siguientes servicios: Suscribir el robot al grupo Posteriormente se ampliará en el trabajo final para que ofrezca otros servicios, como dar de baja un robot de la lista de suscripción, obtener la lista de suscripción, etc. La cámara debe detectar fallos de caida de los robots, y darlos de baja de la lista de suscripción. El robot ofrece los servicios: ObtenerEstado que proporciona una serie de datos del estado Robot. Posteriormente se ampliará el robot en el trabajo final para que ofrezca otros servicios. También se especifica en IDL la estructura de datos instantánead, que es la información con el estado global del sistema difundida por la cámara. Esta estructura de datos es una sequence<estadorobotd> que en Java se mapea a un array donde cada elemento es una estructura de tipo EstadoRobotD: InstantaneaD ---> EstadoRobotD[ ] Los robots forman un "grupo dinámico" que funciona por subscripción. La cámara actuará como gestor (centralizado) de dicho grupo, dando de alta a aquellos robots que soliciten su adhesión al grupo y dando de baja a aquellos que deseen abandonarlo o bien fallen. Sólo los robots subscritos al grupo obtendrán el "canal de difusión" y podrán, por tanto, escuchar las difusiones del estado global realizadas por la cámara. Esta descripción constituye el protocolo que se pretende implementar en esta práctica. La comunicación remota en esta práctica toma dos formas: Difusiones del estado global. El estado global es un objeto Java serializado. 2. Comunicación punto a punto basad en invocaciones CORBA. El "estado del robot" lo constituye, en principio: Su nombre Su identificador Su IOR (referencia CORBA Posteriormente se ampliará en el trabajo final con más datos, como su posición, su objetivo, etc. NOTA: es probable que, por conveniencia de programación, prefiera mapear la estructura de datos instantanead a una LinkedList de Java, puesto que esta ofrece métodos muy convenientes para la manipulación de colecciones de objetos. En este caso, observe que esta dispone de un método toarray para convertirla en un EstadoRobotD[ ]. Procesando el fichero robot.idl con compilador de IDL (jidl) se generará el resto de ficheros (stubs CORBA) necesarios para la comunicación CORBA entre objetos remotos. 1 of 15 21/09/ :13 2 of 15 21/09/ :13

19 DYA - Práctica de Difusion file:/d:/jvila/docencia/dya05/practicas/difusion.htm DYA - Práctica de Difusion file:/d:/jvila/docencia/dya05/practicas/difusion.htm 2.2 El proyecto prj-difusion Es el núcleo central de esta práctica. Contiene dos paquetes: Comm y Prueba El paquete de comunicaciones por difusión (Comm) Ficheros: Difusion.java : objeto que ofrece un API para la utilización de sockets multicast para enviar objetos serializados. Los métodos más interesantes que implementa son receiveobject() y sendobject(), ambos más el constructor (creación y conexión del socket multicast) por implementar El paquete Prueba Es un paquete cuya única finalidad es poder probar por separado (de forma independiente a los paquetes Camara y Robot) el correcto funcionamiento del paquete Comm. Ficheros: Prueba.java : es un fichero para poder probar y depurar el paquete Comm. Básicamente contiene dos threads: uno que realiza la difusión y otro que la recibe e imprime su contenido. 2.3 El proyecto prj-camara (Camara) Este proyecto consta de un paquete: Camara Ficheros: 2. CamaraInt_impl.java : objeto que implementa la interfaz IDL de la cámara. Contiene una clase anidada (CamaraDifusion) que constituye un thread encargado de enviar periódicamente una Instantánea del estado global del sistema por un canal de difusión. Esta Instantánea es una clase Java serializada. CamaraServer.java : es el objeto encargado de convertir la cámara en un objeto CORBA y registrar la cámara en el servicio de nombres de Orbacus. Visite este código y observe que existen EJERCICIOS. 2.4 El proyecto prj-robot (Robot) Este proyecto consta de un paquete: Robot Ficheros: 2. RobotSeguidorInt_impl.java : objeto que implementa la interfaz IDL del robot. Contiene una clase anidada (RobotDifusion) que constituye un thread encargado de obtener el canal de difusión y leer periódicamente de él la "Instantánea" (estado global del sistema) que difunde la Camara. Cada robot recibirá la Instántanea, la deserializará e imprimirá el nombre de todos los robots cuyo estado viene recogido en la Instantánea. RobotSeguidor.java : es el objeto encargado de convertir la cámara en un objeto CORBA, y de obtener una referencia a la Cámara. Visite este código y observe que existen EJERCICIOS. 3. Creación de la estructura de directorios y del proyecto Cree el subdirectorio %USER%\difusion 2. Visite la página de prácticas de la Web de la asignatura, descargue en el directorio %USER%\difusion el fichero zip con los ficheros de apoyo a esta práctica y descomprímalo. 3. Observe la estructura de directorios creada con 4 subdirectorios, cada uno de los cuales debe corresponder a un proyecto. prj-corba prj-difusion prj-camara prj-robot 4. Cree un proyecto de Jbuilder en cada uno de estos directorios. Observe que los ficheros fuente con la solución a medio implementar de la práctica son incluidos automáticamente. 5. Posteriormente deberá tener en cuenta que en cada proyecto deberá producir un archivo tipo jar y que cada fichero jar puede ser utilizada por los otros proyectos. Pero esto se irá detallando paso a paso a continuación. 4. Realización de los paquetes de la práctica Esta práctica sirve de esqueleto para el trabajo final. Se encuentra ya resuelto uno de los aspectos mas importantes: la estructuración en clases y ficheros. Pero a diferencia de otras prácticas, el código propuesto para implementar como ejercicio es mucho mayor. Se pone resolverlo en varios pasos: Implementar el paquete con lla interfaz IDL y los stubs CORBA requeridos para la comunicación remota. 2. Implementar el paquete ce Comunicaciones por difusión (Comm) 3. Implementar los paquetes de la Camara y los Robots. De una manera detallada se especifica la labor a realizar en cada proyecto. 4.1 Realización del soporte de comunicacion CORBA (Proyecto prj-corba) En este proyecto deberá realizar las siguientes acciones: Cree el proyecto %USER%\difusion\prj-corba\prj-corba.prj 2. Añada al proyecto las bibliotecas de Orbacus, contenidas en el subdirectorio %USER%\difusion\prj-corba\orbacus. tal como hizo en la práctica de introducción a CORBA. Para ello seleccione el menú Project Properties -> Required Libraries, seleccione Add->User Home->New y especifique Name: OB y Add->OB.jar, OBNaming.jar, OButils.jar 3. Añada el fuente robot.idl al proyecto. 4. Procese la interfaz IDL. El compilador jidl se encuentra ya en el subdirectorio %USER%\difusion\prj-corba\src > jidl robot.idl 5. Construya un fichero prj-corba.jar con el código generado en este proyecto. Para ello utilice el menú de JBuilder Wizards-> Archive Builder -> Archive Type -> Applet JAR 6. Compile y construya el proyecto. Observará que cada vez que reconstruya el proyecto, se actualiza el fichero prj-corba.jar. 4.2 Realización de la biblioteca de difusión (Proyecto prj-difusion) De una manera detallada, los pasos para la realización de los paquetes Comm y Prueba son los siguientes: Cree el proyecto %USER%\difusion\prj-difusion\prj-difusion.prj 2. Añada al proyecto las biblioteca creada en el proyecto anterior. Para ello seleccione el menú Project Properties -> Required Libraries, seleccione Add->User Home->New y especifique Name: OB y Add->Oprj-corba.jar 3. Observe que los paquetes y fuentes del directorio %USER%\difusion\prj-difusion\src son añadidos automáticamente al proyecto. 4. Realice los ejercicios del paquete Comm: fichero Difusion.java. Debe contemplar lo siguientes aspectos: 3 of 15 21/09/ :13 4 of 15 21/09/ :13

20 DYA - Práctica de Difusion file:/d:/jvila/docencia/dya05/practicas/difusion.htm DYA - Práctica de Difusion file:/d:/jvila/docencia/dya05/practicas/difusion.htm Serialización de la Instantánea utilizando las clases ByteArrayOutputStream y ObjectOutputStream Difusión del paquete Deserailización de la Instantánea utilizando las clases ByteArrayInpputStream y ObjectInputStream Recepción del paquete 5. Construya un fichero prj-difusion.jar con el código generado en este proyecto. Para ello utilice el menú de JBuilder Wizards-> Archive Builder -> Archive Type -> Applet JAR 6. Compile y construya el proyecto. Observará que cada vez que reconstruya el proyecto, se actualiza el fichero prj-difusion.jar. 7. Ejecute y depure el paquete Prueba: Realice una configuración de ejecución para ejecutar los threads: Name: el nombre del entorno -> denomínelo difusion Main class: la clase a ejecutar -> seleccione Prueba.Prueba 4.3 Realización del proyecto Camara (Proyecto prj-camara) El desarrollo de estos paquetes sigue la metodología para desarrollo de las aplicaciones CORBA descrita en una práctica de introduccióna a CORBA. De una manera detallada, los pasos para la realización de estos paquetes son los siguientes: Cree el proyecto %USER%\difusion\prj-camara\prj-camara.prj 2. Añada al proyecto las dos bibliotecas creadas en los proyectos anteriores. Utilice para ello el menú Project Properties -> Required Libraries, seleccione Add->User Home->New y especifique en cada caso: prj-difusion.jar prj-corba.jar 3. Realice los ejercicios del fichero CamaraInt_impl.java. Este objeto implementa la interfaz IDL de la cámara. Los aspectos por resolver son: La implementación de algunos métodos de la interfaz IDL Una clase anidada (CamaraDifusion) que implementa un thread encargado de enviar periódicamente una Instantánea del estado global del sistema por un canal de difusión. El canal de difusión se especificará como una dirección IP y un port que la Camara recibirá como argumentos de ejecución. Si no se especifican, tomará unos por defecto. 4. Realice los ejercicios del fichero CamaraServer.java. Este fichero contiene el soporte para convertir la cámara en un objeto CORBA. Los aspectos por resolver son: Realizar una instancia del objeto CORBA Camara Registrar la Camara en el servicio de nombres de Orbacus. 5. Construya un fichero prj-corba.jar con el código generado en este proyecto. Para ello utilice el menú de JBuilder Wizards-> Archive Builder -> Archive Type -> Applet JAR 6. Compile y construya el proyecto. Observará que cada vez que reconstruya el proyecto, se actualiza el fichero prj-corba.jar. 7. Cree un perfil de ejecución para la Camara. Abra el menú de Run->Configurations y cree un nuevo perfil con los siguientes datos: Name: el nombre del entorno -> denomínelo Camara Main class: la clase a ejecutar -> seleccione Camara.CamaraServer Application parameters: parámetros de ejecución de la aplicación -> Ip port 8. Cree un perfil de ejecución del Servicio de Nombres Orbacus. Abra el menú de Run->Configurations y cree un nuevo perfil con los siguientes datos: Name: el nombre del entorno -> denomínelo Name Service Main class: la clase a ejecutar -> seleccione com.ooc.cosnaming.server Application parameters: parámetros de ejecución de la aplicación -> -OAport Realización del proyecto Robot (Proyecto prj-robot) El desarrollo de estos paquetes sigue la metodología del paquete anterior: Cree el proyecto %USER%\difusion\prj-camara\prj-camara.prj 2. Añada al proyecto las dos bibliotecas creadas en los proyectos anteriores. Utilice para ello el menú Project Properties -> Required Libraries, seleccione Add->User Home->New y especifique en cada caso: prj-difusion.jar prj-corba.jar 3. Realice los ejercicios del fichero RobotSeguidorInt_impl.java. Este objeto implementa la interfaz IDL del Robot. Los aspectos por resolver son: La implementación de algunos métodos de la interfaz IDL Una clase anidada (CamaraDifusion) que implementa un thread encargado de recibir periódicamente la Instantánea del estado global del sistema por un canal de difusión. El canal de difusión se averigurá a partir de los datos devueltos por la suscripción. 4. Realice los ejercicios del fichero RobotSeguidor.java. Este fichero contiene el soporte para convertir el Robot en un objeto CORBA. Los aspectos por resolver son: Realizar una instancia del objeto CORBA Robot Registrar el Robot en el servicio de nombres de Orbacus. Obtener una referencia CORBA a la Camara del servicio de nombres de Orbacus. 5. Cree un perfil de ejecución para el Robot. Abra el menú de Run->Configurations y cree un nuevo perfil con los siguientes datos: Name: el nombre del entorno -> denomínelo Robot Main class: la clase a ejecutar -> seleccione Robot.RobotSeguidor Application parameters: parámetros de ejecución de la aplicación -> NombreRobot 5. Ejecución de la aplicación La ejecución de la aplicación requiere ejecutar, en primer lugar, el perfil Name Service, después Cámara y, finalmente, varios Robot. Puede realizar pruebas con la camara o los Robots de su vecino de prácticas. Para éllo, el perfil de ejecución del componente correspondiente deberá consignar como parámetros de las máquina virtual El Servicio de Nombres del vecino: VM Parameters: -Dooc.orb.service.NameService=corbaloc::hostvecino:1111/NameService 6. Ficheros de apoyo module corba{ module Instantanea{ struct EstadoRobotD { string nombre; unsigned long id; string IORrob; ; struct InstantaneaD{ sequence<estadorobotd> estadorobs; ; ; robot.idl module Robot{ interface RobotSeguidorInt{ void ObtenerEstado(out corba::instantanea::estadorobotd est); ; ; module Camara{ struct IPYPortD{ string ip; unsigned long port; ; 5 of 15 21/09/ :13 6 of 15 21/09/ :13

El servicio de echo con sockets

El servicio de echo con sockets PRÁCTICA 2 El servicio de echo con sockets E l objetivo de esta práctica es crear y ejecutar una aplicación cliente servidor "echo" basada en sockets TCP pero estructurándola según el modelo de objetos

Más detalles

Prácticas de. Diseño y Aplicaciones de Sistemas Distribuidos (DYA)

Prácticas de. Diseño y Aplicaciones de Sistemas Distribuidos (DYA) Prácticas de Diseño y Aplicaciones de Sistemas Distribuidos (DYA) Joan Vila Carbó José Simó Ten. PRÁCTICA 1 Introducción a Java y Eclipse 1 El entorno de trabajo 1 El directorio de trabajo 2 Desarrollo

Más detalles

Modelo de Objetos Distribuidos

Modelo de Objetos Distribuidos Remote Method Invocation Modelo de Objetos Distribuidos Un objeto remoto es un objeto cuyos métodos pueden ser invocados desde otra máquina virtual de java, potencialmente en un host diferente. Modelo

Más detalles

1. Visión general de RMI

1. Visión general de RMI 1. Visión general de RMI Java RMI permite al programador ejecutar métodos de objetos remotos utilizando la misma semántica que si fueran invocaciones locales (Véase Figura 1). Máquina Local (Cliente) Máquina

Más detalles

Java RMI Remote Method Invocation. Invocación Remota de Métodos en Java

Java RMI Remote Method Invocation. Invocación Remota de Métodos en Java Java RMI Remote Method Invocation Invocación Remota de Métodos en Java Contenido Introducción Implementación Diseño de la interfaz remota. Implementación de la interfaz remota. Obtención de las clases

Más detalles

El servicio de echo en Java-RMI

El servicio de echo en Java-RMI PRÁCTICA 3 El servicio de echo en Java-RMI E l objetivo de esta práctica es crear y ejecutar una aplicación cliente servidor echo basada en java-rmi. La práctica tiene dos partes: La primera parte implementa

Más detalles

RMI [Remote Method Invocation]

RMI [Remote Method Invocation] RMI [Remote Method Invocation] Cuando utilizamos sockets, hemos de preocuparnos de cómo se transmiten físicamente los datos entre los extremos de una conexión (a nivel de bytes, ya que usamos los streams

Más detalles

DISEÑO DE UNA ARQUITECTURA CLIENTE/SERVIDOR MEDIANTE OBJETOS DISTRIBUIDOS EN JAVA

DISEÑO DE UNA ARQUITECTURA CLIENTE/SERVIDOR MEDIANTE OBJETOS DISTRIBUIDOS EN JAVA DISEÑO DE UNA ARQUITECTURA CLIENTE/SERVIDOR MEDIANTE OBJETOS DISTRIBUIDOS EN JAVA José Luis Pastrana Brincones (pastrana@lcc.uma.es) Dpto. Lenguajes y Ciencias de la Computación. Universidad de Málaga

Más detalles

Java RMI. las RPC de Java. Parte I. Luis Fernando Llana Díaz. Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid

Java RMI. las RPC de Java. Parte I. Luis Fernando Llana Díaz. Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid las RPC de Java. Parte I Departamento de Sistemas Informáticos y Programación Universidad Complutense de Madrid de marzo de 006 RMI y RPC RPC: Remote Procedure Call. RMI y RPC RPC: Remote Procedure Call.

Más detalles

JAVA - Serializacíon / RMI. (C) Philippe Roose - 2004, 2005

JAVA - Serializacíon / RMI. (C) Philippe Roose - 2004, 2005 JAVA - Serializacíon / RMI (C) Philippe Roose - 2004, 2005 Serializar objetos- concepto Desde el JDK 1.1 Serializar objetos permite de escribir un objeto en un fichero como un flujo de octets (archivo

Más detalles

en otra máquina exactamente de la misma manera que si se encontrará en la misma máquina

en otra máquina exactamente de la misma manera que si se encontrará en la misma máquina Máquina A Máquina B Máquina C Lo ideal sería tener un sistema distribuido orientado a objetos que permita: 1)Invocar un método de un objeto que se localiza en otra máquina exactamente de la misma manera

Más detalles

Federico Peinado www.federicopeinado.es

Federico Peinado www.federicopeinado.es Federico Peinado www.federicopeinado.es Depto. de Ingeniería del Software e Inteligencia Artificial disia.fdi.ucm.es Facultad de Informática www.fdi.ucm.es Universidad Complutense de Madrid www.ucm.es

Más detalles

Llamada a métodos remotos (RMI). Curso 04/05. Tema 9. Departament d Informàtica. Universitat de València. 1. Introducción 2

Llamada a métodos remotos (RMI). Curso 04/05. Tema 9. Departament d Informàtica. Universitat de València. 1. Introducción 2 Tema 9 Llamada a métodos remotos (RMI). Departament d Informàtica. Índice 1. Introducción 2 1.1. Cómo funciona RMI?.......................................... 2 2. Usando RMI 4 2.1. Fase de desarrollo:

Más detalles

Las clases Java Socket y ServerSocket

Las clases Java Socket y ServerSocket Las clases Java Socket y ServerSocket Lenguajes y Herramientas de Programación Universidad de La Laguna Programa de Doctorado de Física e Informática Escuela Técnica Superior Superior de Ingeniería Informática

Más detalles

Java RMI. Sistemas Distribuidos Rodrigo Santamaría

Java RMI. Sistemas Distribuidos Rodrigo Santamaría + Java RMI Sistemas Distribuidos Rodrigo Santamaría RMI Java RMI 2 + RMI 3 Remote Method Invocation: middleware para que un objeto que se ejecuta en una JVM use métodos de otro objeto que se ejecuta en

Más detalles

PROGRAMACION DISTRIBUIDA MobileTracker: Ejemplo de implementación con RMI

PROGRAMACION DISTRIBUIDA MobileTracker: Ejemplo de implementación con RMI PROGRAMACION DISTRIBUIDA MobileTracker: Ejemplo de implementación con RMI Héctor Pérez 2 MobileTracker: Especificación El computador de la torre de control ejecuta el servicio Follower que registra los

Más detalles

Práctica 2: Java Remote Method Invocation (RMI)

Práctica 2: Java Remote Method Invocation (RMI) Práctica 2: Java Remote Method Invocation (RMI) Aplicaciones Telemáticas II Introducción El objetivo de esta práctica es conocer un poco más sobre el paradigma de objetos remotos. La idea principal es

Más detalles

Programación Orientada a Objetos con Java

Programación Orientada a Objetos con Java Programación Orientada a Objetos con Java M.C. Jorge Eduardo Ibarra Esquer jorgeeie@uabc.mx Sobrecarga de métodos Java permite la definición de dos o más métodos que tengan el mismo nombre, dentro de la

Más detalles

Cliente/Servidor en Java

Cliente/Servidor en Java Cliente/Servidor en Java Grupo ARCOS Desarrollo de Aplicaciones Distribuidas Ingeniería Informática Universidad Carlos III de Madrid Contenidos 1. Introducción: 1. Paradigma cliente/servidor 2. Entorno

Más detalles

Ingeniería del Software Arquitectura Física en 3 niveles

Ingeniería del Software Arquitectura Física en 3 niveles Introducción En este laboratorio desplegaremos en 3 niveles físicos una aplicación que verifica si una cuenta y un password son correctos, basada en la que fue presentada en el laboratorio Separación entre

Más detalles

Arquitectura Cliente/Servidor. Invocación de Métodos Remotos RMI: Remote Method Invocation. Llamadas a Métodos Remotos

Arquitectura Cliente/Servidor. Invocación de Métodos Remotos RMI: Remote Method Invocation. Llamadas a Métodos Remotos Invocación de Métodos Remotos RMI: Remote Method Invocation Prof Wílmer Pereira Universidad Simón Bolívar Arquitectura Cliente/Servidor Cliente Request Reply Servidor Cómo permitir comunicación entre objetos

Más detalles

CONTENIDO. Serialización. Carga dinamica de stubs RMI AVANZADO. Callbacks. Carga dinámica de Stubs

CONTENIDO. Serialización. Carga dinamica de stubs RMI AVANZADO. Callbacks. Carga dinámica de Stubs CONTENIDO RMI AVANZADO Carga dinamica de stubs Callbacks Carga dinámica de Stubs Para tener acceso a un objeto remoto mediante RMI, el cliente debe recibir un stub serializado y deserializarlo. El stub

Más detalles

Sistemas Distribuidos Java RMI (Remote Method Invocation) Alberto Lafuente Mikel Larrea Dpto. ATC, UPV/EHU

Sistemas Distribuidos Java RMI (Remote Method Invocation) Alberto Lafuente Mikel Larrea Dpto. ATC, UPV/EHU Sistemas Distribuidos Java RMI (Remote Method Invocation) Alberto Lafuente Mikel Larrea Dpto. ATC, UPV/EHU Contenido Interfaz Implementación Servidor Cliente Puesta en marcha de la aplicación: Compilador

Más detalles

Invocación de métodos remotos en Java: JAVA - RMI

Invocación de métodos remotos en Java: JAVA - RMI Diseño Y Aplicaciones de Sistemas Distribuidos Invocación de métodos remotos en Java: JAVA - RMI Joan Vila DISCA / UPV Departament d Informàtica de Sistemes i Computadors Universitat Politècnica de València

Más detalles

19. Packages o paquetes

19. Packages o paquetes Programación orientada a objetos con Java 201 19. Packages o paquetes Objetivos: a) Definir el concepto de paquete b) Interpretar el código fuente de una aplicación Java donde se utilicen paquetes c) Construir

Más detalles

Interacción entre Aplicaciones: objetos distribuidos e invocación remota

Interacción entre Aplicaciones: objetos distribuidos e invocación remota Interacción entre Aplicaciones: objetos distribuidos e invocación remota En la anterior práctica se ha visto cómo extender la funcionalidad de un servidor web incorporando servlets que atienden peticiones

Más detalles

Práctica 4: Java Remote Method Invocation (RMI)

Práctica 4: Java Remote Method Invocation (RMI) Práctica 4: Java Remote Method Invocation (RMI) Aplicaciones Telemáticas II Introducción Hasta el momento hemos visto aplicaciones remotas donde un cliente utiliza un objeto remoto que ha sido publicado

Más detalles

Tema 1. Introducción a JAVA

Tema 1. Introducción a JAVA Tema 1. Introducción a JAVA Historia Características Plataforma Java Entorno de desarrollo Ejemplo: Hola mundo Estructura general de un programa Java 1 Historia de Java (i) Surge en 1991: Sun Microsystems

Más detalles

Java en 2 horas. Rodrigo Santamaría

Java en 2 horas. Rodrigo Santamaría + Java en 2 horas Rodrigo Santamaría + Generalidades 2 Desarrollado por Sun en 1995 Hereda mucha de la sintaxis de C (1972) Fuertemente tipado y orientado a objetos Aplicaciones compiladas a bytecode Gestión

Más detalles

JAVA RMI (REMOTE METHOD INVOCATION)

JAVA RMI (REMOTE METHOD INVOCATION) JAVA RMI (REMOTE METHOD INVOCATION) RMI RMI (Remote Method Invocation) Mecanismo RPC de Mecanismo mediante el cual los procesos cliente y servidor en una aplicación distribuida se comunican Una aplicación

Más detalles

FSD Práctica Invocación Remota: JavaRMI. Estudio Previo. Información

FSD Práctica Invocación Remota: JavaRMI. Estudio Previo. Información FSD Práctica Invocación Remota: JavaRMI Tipo de entrega: por grupos de prácticas Fecha límite: sesión de laboratorio Lugar: Campus Digital Comentario: No hay que entregar el estudio previo Objetivo de

Más detalles

Descarga, instalación y uso de herramientas:

Descarga, instalación y uso de herramientas: Descarga, instalación y uso de herramientas: Eclipse: Instalación de Eclipse (Más información en http://www.eclipse.org/) 1. Copiar, descomprimir e instalar si es necesario la última versión de Eclipse

Más detalles

Introducción Descripción del servicio

Introducción Descripción del servicio 507953 1 Contenido Contenido Cambios Introducción Descripción del servicio Introducción Arquitectura Paso a paso Capa de negocio Adapter Interface Service Proxy Fichero de propiedades Despliegue del servicio

Más detalles

Luego lleve el cliente a otra máquina y ejecute desde ahí usando el nombre de la máquina del servidor.

Luego lleve el cliente a otra máquina y ejecute desde ahí usando el nombre de la máquina del servidor. Ejemplos de sockets Los sockets son un mecanismo de comunicación entre procesos de muy bajo nivel, donde el usuario tiene que hacer muchas cosas, pero que siguen siendo muy importantes. En esta práctica

Más detalles

Conociendo el ambiente de programación de Java. M. en C. Erika Vilches

Conociendo el ambiente de programación de Java. M. en C. Erika Vilches Conociendo el ambiente de programación de Java M. en C. Erika Vilches La variable PATH Una vez que se ha aceptado la licencia del JDK y que se ha instalado satisfactoriamente y antes de poder utilizarlo,

Más detalles

El lenguaje de programación Java

El lenguaje de programación Java Departament d Arquitectura de Computadors El lenguaje de programación Java Java (I) Orientado a objetos Ejecutado por una maquina virtual Independiente de la plataforma Multithreaded Orientado a la red

Más detalles

Práctica 3ProgramacionRS232: Programación básica de la RS232

Práctica 3ProgramacionRS232: Programación básica de la RS232 Práctica 3ProgramacionRS232: Programación básica de la RS232 1 Objetivos El objetivo de esta práctica es la iniciación del alumno en la programación de las comunicaciones en un entorno de desarrollo basado

Más detalles

Desarrollo de Servicios Web con JBuilder

Desarrollo de Servicios Web con JBuilder Artículos técnicos Grupo Danysoft: Desarrollo de Servicios Web con JBuilder Segunda parte Oscar Cristobal Ruiz Departamento Java Equipo Grupo Danysoft Enero 2003 - (902) 123146 www.danysoft.com Desarrollo

Más detalles

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA UNED Centro Asociado de Cádiz RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA 1. OBJETOS Cualquier elemento del programa es un objeto. Un programa es un conjunto de objetos que se comunican entre sí

Más detalles

1.- FUNDAMENTOS...2 2.- FUNCIONAMIENTO GENÉRICO...3 3.- JAVA SOCKETS... 4. 3.4.1.- Creación de Streams de Entrada...7

1.- FUNDAMENTOS...2 2.- FUNCIONAMIENTO GENÉRICO...3 3.- JAVA SOCKETS... 4. 3.4.1.- Creación de Streams de Entrada...7 1.- FUNDAMENTOS...2 2.- FUNCIONAMIENTO GENÉRICO...3 3.- JAVA SOCKETS... 4 3.1.- INTRODUCCION... 4 3.2.- MODELO DE COMUNICACIONES CON JAVA...5 3.3.- APERTURA DE SOCKETS... 6 3.4.- CREACIÓN DE STREAMS...

Más detalles

PROGRAMACION DISTRIBUIDA

PROGRAMACION DISTRIBUIDA PROGRAMACION DISTRIBUIDA Ejemplo de uso de estrategias de diseño con RMI Héctor Pérez 2 Ejemplo de callback: SwiftEagle shot() setdirection() Target nearnessreport(target,observer) signal? explode() SwiftEagle

Más detalles

PROGRAMACIÓN CLIENTE-SERVIDOR MEDIANTE SOCKETS EN JAVA

PROGRAMACIÓN CLIENTE-SERVIDOR MEDIANTE SOCKETS EN JAVA PROGRAMACIÓN CLIENTE-SERVIDOR MEDIANTE SOCKETS EN JAVA Qué es la arquitectura cliente servidor? La arquitectura cliente-servidor es un modelo de aplicación distribuida en el que las tareas se reparten

Más detalles

Servicios web con SOAP y Eclipse

Servicios web con SOAP y Eclipse PRÁCTICA 8 Servicios web con SOAP y Eclipse E l objetivo de esta práctica es invocar e implementar servicios web en Java desde el entorno Eclipse. La práctica está estructurada en tres partes según se

Más detalles

Práctica GESTIÓN Y UTILIZACIÓN DE REDES LOCALES. Curso 2001/2002. TCP/IP: protocolo TCP

Práctica GESTIÓN Y UTILIZACIÓN DE REDES LOCALES. Curso 2001/2002. TCP/IP: protocolo TCP Práctica 9 GESTIÓN Y UTILIZACIÓN DE REDES LOCALES Curso 2001/2002 TCP/IP: protocolo TCP Introducción Como se ha comentado en la práctica anterior, el protocolo UDP es muy sencillo de implementar, pero

Más detalles

Sockets en Java. La Creatividad proviene de un conflicto de ideas. Uso de Sockets

Sockets en Java. La Creatividad proviene de un conflicto de ideas. Uso de Sockets Uso de Sockets Este pequeño manual, le muestra cómo funciona el Socket Server para crear un pequeño servidor web que envía una página HTML a cualquier Navegador Web como Firefox, Internet Explorer, etc..

Más detalles

Remote Method Invocation (RMI) de Java

Remote Method Invocation (RMI) de Java Remote Method Invocation (RMI) de Java Concurrencia y Distribución Programación Avanzada Posgrado en Ciencia e Ingeniería de la Computación, UNAM 1. Introducción El mecanismo RMI (Remote Method Invocation)

Más detalles

Introduciendo datos desde el

Introduciendo datos desde el Introduciendo datos desde el teclado Pedro Corcuera Dpto. Matemática Aplicada y Ciencias de la Computación Universidad de Cantabria corcuerp@unican.es Objetivos Crear programas interactivos que lean datos

Más detalles

Introducción al lenguaje Java

Introducción al lenguaje Java Tipo de entrega: Fecha límite: Lugar: Introducción al lenguaje Java por grupos de prácticas sesión de laboratorio Atenea Objetivos de la práctica: Escribir aplicaciones simples en Java Utilizar el entorno

Más detalles

1. El entorno de desarrollo Eclipse

1. El entorno de desarrollo Eclipse Índice 1. El entorno de desarrollo Eclipse 1 1.1. Qué es Eclipse?........................................................ 1 1.2. Trabajando con Eclipse....................................................

Más detalles

EJEMPLOS PROGRAMACIÓN SOCKET - JAVA

EJEMPLOS PROGRAMACIÓN SOCKET - JAVA EJEMPLOS PROGRAMACIÓN SOCKET - JAVA 1.- Calcular el Cuadrado TCP En esta aplicación el cliente se conecta al servidor, para ello debe introducir la dirección IP del servidor y los parámetros sobre los

Más detalles

CREAR UN SERVICIO WEB BASICO CON JAVA AXIS2. Víctor J. Sosa vjsosa@tamps.cinvestav.mx

CREAR UN SERVICIO WEB BASICO CON JAVA AXIS2. Víctor J. Sosa vjsosa@tamps.cinvestav.mx CREAR UN SERVICIO WEB BASICO CON JAVA AXIS2. Víctor J. Sosa vjsosa@tamps.cinvestav.mx En este documento explicaré brevemente cómo construir un servicio web con Java Axis2 y cómo invocarlo desde un cliente

Más detalles

Introducción a Java LSUB. 15 de enero de 2015 GSYC

Introducción a Java LSUB. 15 de enero de 2015 GSYC Introducción a LSUB GSYC 15 de enero de 2015 (cc) 2014 Laboratorio de Sistemas, Algunos derechos reservados. Este trabajo se entrega bajo la licencia Creative Commons Reconocimiento - NoComercial - SinObraDerivada

Más detalles

Práctica III: Streams, Readers y Writers

Práctica III: Streams, Readers y Writers Práctica III: Streams, Readers y Writers Objetivos En esta práctica vamos a aprender a utilizar Streams, Readers y Writers para realizar operaciones de entrada/salida desde programas escritos en el lenguaje

Más detalles

Laboratorio 7 Motor de búsqueda web basado en el TAD Árbol Binario de Búsqueda GUIÓN DEL LABORATORIO

Laboratorio 7 Motor de búsqueda web basado en el TAD Árbol Binario de Búsqueda GUIÓN DEL LABORATORIO Laboratorio 7 Motor de búsqueda web basado en el TAD Árbol Binario de Búsqueda GUIÓN DEL LABORATORIO 1.- Objetivos del laboratorio Diseño de clases en C++ Comprensión y uso del TAD Árbol Binario de Búsqueda

Más detalles

1. Creación del repositorio

1. Creación del repositorio FACULTADE DE INFORMÁTICA Departamento de Computación Tecnología de la Programación 2008-2009 Ingeniería Informática Práctica 1: Subversion Introducción El objetivo de esta práctica es aprender a manejar

Más detalles

WINDOWS 2008 5: TERMINAL SERVER

WINDOWS 2008 5: TERMINAL SERVER WINDOWS 2008 5: TERMINAL SERVER 1.- INTRODUCCION: Terminal Server proporciona una interfaz de usuario gráfica de Windows a equipos remotos a través de conexiones en una red local o a través de Internet.

Más detalles

Práctica sobre compartición de instancias remotas.

Práctica sobre compartición de instancias remotas. Práctica sobre compartición de instancias remotas. Para esta práctica se ha construido un pequeño sistema cliente-servidor que permite la resolución de Sudokus entre varios jugadores. El servidor consta

Más detalles

Lab 01: Programación de Sockets en TCP

Lab 01: Programación de Sockets en TCP UNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCO Departamento Académico de Informática REDES Y TELECOMUNICACIONES 2 Lab 01: Programación de Sockets en TCP Ingº Manuel Peñaloza Figueroa Dime y lo olvidaré.

Más detalles

PROGRAMACION DISTRIBUIDA

PROGRAMACION DISTRIBUIDA PROGRAMACION DISTRIBUIDA Distribución basada en el patrón proxy-servant Héctor Pérez 2 Distribución de aplicaciones basadas en objetos Objetivo: rediseño de una aplicación orientada a objetos para ser

Más detalles

Sistemas Distribuidos (Capítulo 8 de Distributed Computing de M. L. Liu)

Sistemas Distribuidos (Capítulo 8 de Distributed Computing de M. L. Liu) Devoluciones de llamada en RMI (Callbacks) Sistemas Distribuidos (Capítulo 8 de Distributed Computing de M. L. Liu) Devolución de llamadas, introducción Cliente-servidor clásico servidorpasivo Tipo pull.

Más detalles

Procesamiento distribuido en Java

Procesamiento distribuido en Java Diseño Y Aplicaciones de Sistemas Distribuidos Procesamiento distribuido en Java Joan Vila DISCA / UPV Departament d Informàtica de Sistemes i Computadors Universitat Politècnica de València Contenidos

Más detalles

Java en 3 horas. Ampliación de Sistemas Operativos. Rodrigo Santamaría

Java en 3 horas. Ampliación de Sistemas Operativos. Rodrigo Santamaría Java en 3 horas Ampliación de Sistemas Operativos Rodrigo Santamaría Generalidades Desarrollado por Sun Hereda mucha de la sintaxis de C (1972) Fuertemente tipado y orientado a objetos Aplicaciones compiladas

Más detalles

Sockets en Java. Prof. Wílmer Pereira Universidad Simón Bolívar

Sockets en Java. Prof. Wílmer Pereira Universidad Simón Bolívar Sockets en Java Prof. Wílmer Pereira Universidad Simón Bolívar Arquitectura Cliente/Servidor Cliente Request Reply Servidor Cómo permitir comunicación entre objetos situados en diferentes máquinas? Sockets

Más detalles

Guía de instalación de la carpeta Datos de IslaWin

Guía de instalación de la carpeta Datos de IslaWin Guía de instalación de la carpeta Datos de IslaWin Para IslaWin Gestión CS, Classic o Pyme a partir de la revisión 7.00 (Revisión: 10/11/2011) Contenido Introducción... 3 Acerca de este documento... 3

Más detalles

Curso de Java POO: Programación orientada a objetos

Curso de Java POO: Programación orientada a objetos Curso de Java POO: Programación orientada a objetos Luis Guerra Velasco Curso INEM 02830. Programación en Java Marzo 2010 Índice 1 Introducción a la POO 2 Herencia y polimorfismo 3 Empaquetado de proyectos

Más detalles

CORBA desde Java. Diego Sevilla Ruiz Sistemas Distribuidos. 1. Introducción

CORBA desde Java. Diego Sevilla Ruiz Sistemas Distribuidos. 1. Introducción CORBA desde Java Diego Sevilla Ruiz Sistemas Distribuidos Índice 1. Introducción 1 2. Primeros pasos 1 2.1. Fichero IDL................................... 1 2.2. Cliente......................................

Más detalles

Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java

Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java Identificadores Las variables se utilizan en programación para almacenar temporalmente

Más detalles

class Nombre_Clase extends Nombre_SuperClase { cuerpo de la clase extendida }

class Nombre_Clase extends Nombre_SuperClase { cuerpo de la clase extendida } REUTILIZACIÓN DE CLASES:MODELO DE HERENCIA EN JAVA Java soporta herencia simple pero no múltiple. Lo hace mediante el mecanismo de extensión de clase. A partir de él, una subclase se extiende (hereda)

Más detalles

UNIVERSIDADE DA CORUÑA Departamento de Tecnoloxías da Información e as Comunicacións LABORATORIO DE RC: TUTORIAL DE SOCKETS EN JAVA

UNIVERSIDADE DA CORUÑA Departamento de Tecnoloxías da Información e as Comunicacións LABORATORIO DE RC: TUTORIAL DE SOCKETS EN JAVA UNIVERSIDADE DA CORUÑA Departamento de Tecnoloxías da Información e as Comunicacións LABORATORIO DE RC: TUTORIAL DE SOCKETS EN JAVA Índice 1. Presentación...3 2. Conceptos básicos...4 2.1. TCP...4 2.2.

Más detalles

MANUAL DE AYUDA MÓDULOS 2011 MACOS

MANUAL DE AYUDA MÓDULOS 2011 MACOS MANUAL DE AYUDA MÓDULOS 2011 MACOS Agencia Tributaria Centro de Atención Telefónica Departamento de INFORMÁTICA TRIBUTARIA ÍNDICE MÓDULOS 2011 INTRODUCCIÓN...3 Requisitos previos. Máquina Virtual de Java...

Más detalles

8. Sentencia return y métodos

8. Sentencia return y métodos 92 A. García-Beltrán y J.M. Arranz 8. Sentencia return y métodos Objetivos: a) Describir el funcionamiento de la sentencia return b) Interpretar el resultado de una sentencia return en el código fuente

Más detalles

Comunicacion en Java. Alejandro Escobar

Comunicacion en Java. Alejandro Escobar Comunicacion en Java Alejandro Escobar Introducción a las comunicaciones Modelo básico de red Imagen tomada de: http://java.sun.com/docs/books/tutorial/networking/overview/networking.html Normalmente programamos

Más detalles

Práctica: Creación de un programa C# sencillo

Práctica: Creación de un programa C# sencillo Introducción a C# 1 Práctica: Creación de un programa C# sencillo Objetivos Al final de esta práctica, usted será capaz de: Crear un programa C#. Compilar y ejecutar un programa C#. Usar el Visual Studio

Más detalles

Edición de Ofertas Excel Manual de Usuario

Edición de Ofertas Excel Manual de Usuario Edición de Ofertas Excel Manual de Usuario Alfonso XI, 6 28014 Madrid F(+34) 91 524 03 96 www.omie.es Ref. MU_OfertasExcel.docx Versión 4.0 Fecha: 2012-11-26 ÍNDICE 1 INTRODUCCIÓN 3 2 CONSIDERACIONES DE

Más detalles

Introducción a JAX-WS Web Services

Introducción a JAX-WS Web Services INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE CÓMPUTO ALUMNO: SANLUIS CASTILLO JOSE DAVID PROFESOR: CIFUENTES ALVAREZ ALEJANDRO SIGFRIDO MATERIA: WEB APPLICATION DEVEPLOMENT Introducción a JAX-WS

Más detalles

Práctica 5: Servidor web concurrente en Java

Práctica 5: Servidor web concurrente en Java Práctica 5: Servidor web concurrente en Java Esta práctica pretende familiarizar al alumno con la programación de servidores que emplean sockets TCP. Para ello partiremos del servidor web básico visto

Más detalles

Manual del Protocolo XML-RPC de Mensajería Negocios

Manual del Protocolo XML-RPC de Mensajería Negocios Manual del Protocolo XML-RPC de Mensajería Negocios Índice de contenidos 1 INTRODUCCIÓN... 3 2 FUNCIONALIDADES DEL API DE COMUNICACIÓN XML-RPC... 4 2.1 Envío Libre... 4 2.2 Envío a Grupo de Contactos...

Más detalles

Programación Orientada a Objetos. Tema 7: Persistencia

Programación Orientada a Objetos. Tema 7: Persistencia Programación Orientada a Objetos Tema 7: Persistencia Tema 7: Persistencia Contenidos 1. LIBRERÍA I/O 2. FICHEROS 3. FICHEROS DE ACCESO DIRECTO 4. FICHEROS DE TEXTO 5. SERIALIZACIÓN DE OBJETOS 6. EJEMPLO

Más detalles

Instrucciones de instalación de IBM SPSS Modeler Server 16 para Windows

Instrucciones de instalación de IBM SPSS Modeler Server 16 para Windows Instrucciones de instalación de IBM SPSS Modeler Server 16 para Windows Contenido Instrucciones para la instalación.... 1 Requisitos del sistema........... 1 Instalación............... 1 Destino...............

Más detalles

Repaso de las características más importantes de la programación Java y su adaptación a Android

Repaso de las características más importantes de la programación Java y su adaptación a Android Repaso de las características más importantes de la programación Java y su adaptación a Android 1. Entorno de programación en java 2. Variables y tipos de datos 3. Operaciones y operadores 4. Clases y

Más detalles

11. Algunas clases estándar de Java (II)

11. Algunas clases estándar de Java (II) 122 A. García-Beltrán y J.M. Arranz 11. Algunas clases estándar de Java (II) Objetivos: a) Presentar la clase predefinida en Java para trabajar con arrays b) Interpretar el código fuente de una aplicación

Más detalles

Programación Orientada a Objetos. Java: Excepciones

Programación Orientada a Objetos. Java: Excepciones Programación Orientada a Objetos Java: Excepciones Eduardo Mosqueira Rey LIDIA Laboratorio de Investigación y desarrollo en Inteligencia Artificial Departamento de Computación Universidade da Coruña, España

Más detalles

Manual de NetBeans y XAMPP

Manual de NetBeans y XAMPP Three Headed Monkey Manual de NetBeans y XAMPP Versión 1.0 Guillermo Montoro Delgado Raúl Nadal Burgos Juan María Ruiz Tinas Lunes, 22 de marzo de 2010 Contenido NetBeans... 2 Qué es NetBeans?... 2 Instalación

Más detalles

UNIVERSIDAD CARLOS III DE MADRID DEPARTAMENTO DE INGENIERÍA TELEMÁTICA. Daniel Díaz Sánchez

UNIVERSIDAD CARLOS III DE MADRID DEPARTAMENTO DE INGENIERÍA TELEMÁTICA. Daniel Díaz Sánchez UNIVERSIDAD CARLOS III DE MADRID DEPARTAMENTO DE INGENIERÍA TELEMÁTICA Sockets para servidor Daniel Díaz Sánchez Florina Almenárez Andrés Marín Departamento de Ingeniería Telemática Universidad Carlos

Más detalles

Multitarea en Java. Rafa Caballero - UCM

Multitarea en Java. Rafa Caballero - UCM Multitarea en Java Rafa Caballero - UCM Programa Monoproceso (monotarea) En cada momento hay una única instrucción ejecutándose Se dice que el programa es monotarea, o monoproceso o monohebra (o single

Más detalles

2. Estructura de un programa en Java

2. Estructura de un programa en Java 24 A. García-Beltrán y J.M. Arranz 2. Estructura de un programa en Java Objetivos: a) Describir la estructura del código fuente de una aplicación Java b) Presentar los conceptos de comentario y de identificador

Más detalles

Guía de instalación y configuración de IBM SPSS Modeler Social Network Analysis 16

Guía de instalación y configuración de IBM SPSS Modeler Social Network Analysis 16 Guía de instalación y configuración de IBM SPSS Modeler Social Network Analysis 16 Contenido Capítulo 1. Introducción a IBM SPSS Modeler Social Network Analysis.... 1 Visión general de IBM SPSS Modeler

Más detalles

Modulo conexión Cliente WS DGI

Modulo conexión Cliente WS DGI Modulo conexión Cliente WS DGI El desarrollo fue echo con eclipse (eclipse-jee-kepler) utilizando herramientas Apache. De la misma forma puede hacerse con otro lenguaje que acepte estas librerias porque

Más detalles

Tutorial básico del entorno de desarrollo Eclipse.

Tutorial básico del entorno de desarrollo Eclipse. Tutorial básico del entorno de desarrollo Eclipse. Arrancar Eclipse. Después de descomprimir la aplicación, dar doble clic sobre el ícono ejecutable para arrancar la aplicación. En caso de que se presente

Más detalles

Solución al Examen de Prácticas de Programación (Ingeniería Informática)

Solución al Examen de Prácticas de Programación (Ingeniería Informática) Solución al Examen de Prácticas de Programación (Ingeniería Informática) Junio 2006 Parte I. Cuestiones (3 puntos=50% nota del examen) 1) Se desea crear un conjunto de clases para representar en un programa

Más detalles

CAPITULO 3 ARQUITECTURA DE COMPONENTES GIS EN INTERNET

CAPITULO 3 ARQUITECTURA DE COMPONENTES GIS EN INTERNET CAPITULO 3 ARQUITECTURA DE COMPONENTES GIS EN INTERNET 3.1- ARQUITECTURA DE COMPONENTES GIS La presente tesis trata del diseño y desarrollo de una aplicación basado en el Web para servir datos geográficos

Más detalles

UNIVERSIDAD DE SEVILLA PRÁCTICAS DE LABORATORIO ANÁLISIS SINTÁCTICO (1) LENGUAJES FORMALES Y AUTÓMATAS CURSO 2006/2007

UNIVERSIDAD DE SEVILLA PRÁCTICAS DE LABORATORIO ANÁLISIS SINTÁCTICO (1) LENGUAJES FORMALES Y AUTÓMATAS CURSO 2006/2007 UNIVERSIDAD DE SEVILLA E. T. S. INGENIERÍA INFORMÁTICA LENGUAJES Y SISTEMAS INFORMÁTICOS PRÁCTICAS DE LABORATORIO ANÁLISIS SINTÁCTICO (1) LENGUAJES FORMALES Y AUTÓMATAS CURSO 2006/2007 Qué es el análisis

Más detalles

TEMA 5. Otras arquitecturas distribuidas II. Objetos distribuidos y CORBA

TEMA 5. Otras arquitecturas distribuidas II. Objetos distribuidos y CORBA TEMA 5. Otras arquitecturas distribuidas II. Objetos distribuidos y CORBA II. Objetos distribuidos y CORBA 1. Objetos Distribuidos 2. CORBA 1. Características 2. Modelo de trabajo 3. ORB 4. Arquitectura

Más detalles

Tutorial BMS Server Studio UDP

Tutorial BMS Server Studio UDP Tutorial BMS Server Studio UDP ÍNDICE Página 0. Introducción...3 1. Configuración del puerto UDP...4 2. Ejemplos...6 2.1 Configuración manual...6 2.1.1 Configuración SocketTest...6 2.1.2 Configuración

Más detalles

Guía de instalación de la carpeta Datos de ContaWin

Guía de instalación de la carpeta Datos de ContaWin Guía de instalación de la carpeta Datos de ContaWin Para ContaWin CS, Classic o Pyme a partir de la revisión 12.10 (Revisión: 29/06/2011) Contenido Introducción... 3 Acerca de este documento... 3 Dónde

Más detalles

UNIVERSIDAD POLITÉCNICA DE PACHUCA SOCKETS EN JAVA

UNIVERSIDAD POLITÉCNICA DE PACHUCA SOCKETS EN JAVA SOCKETS EN JAVA Los sockets son puntos finales de enlaces de comunicaciones entre procesos. Los procesos los tratan como descriptores de ficheros, de forma que se pueden intercambiar datos con otros procesos

Más detalles

Tema 4. Gestión de entrada/salida

Tema 4. Gestión de entrada/salida Tema 4. Gestión de entrada/salida 1. Principios de la gestión de E/S. 1.Problemática de los dispositivos de E/S. 2.Objetivos generales del software de E/S. 3.Principios hardware de E/S. 1. E/S controlada

Más detalles

Pontificia Universidad Católica de Chile Escuela de Ingeniería Departamento de Ciencia de la Computación. IIC1102 Introducción a la Programación

Pontificia Universidad Católica de Chile Escuela de Ingeniería Departamento de Ciencia de la Computación. IIC1102 Introducción a la Programación Pontificia Universidad Católica de Chile Escuela de Ingeniería Departamento de Ciencia de la Computación IIC1102 Introducción a la Programación Tutorial eclipse TM Introducción al uso de eclipse TM Contents

Más detalles

Programación orientada a objetos

Programación orientada a objetos Repaso Programación orientada a objetos Curso INEM. Programación en Java Santiago Muelas Pascual smuelas@fi.upm.es! Clase! Objeto! Atributo o variable de instancia! Método! Instanciar/crear un objeto!

Más detalles

Introducción al lenguaje de programación java

Introducción al lenguaje de programación java Introducción al lenguaje de programación java Algoritmia y Programación Slide 1 LENGUAJES DE PROGRAMACION Un lenguaje de programación es un idioma artificial diseñado y creado para expresar algoritmos

Más detalles