PDF de programación - CORBA: Anexos - Ingeniería de Software II

Imágen de pdf CORBA: Anexos - Ingeniería de Software II

CORBA: Anexos - Ingeniería de Software IIgráfica de visualizaciones

Publicado el 21 de Enero del 2019
755 visualizaciones desde el 21 de Enero del 2019
840,2 KB
105 paginas
Creado hace 15a (11/01/2009)
COCORBA: Anexos

Ingeniería del Software II

Curso 2008/2009

Sergio Ilarri Artigas
Sergio Ilarri Artigas

[email protected]

Índice

Anexo I: Ejemplo HelloWorld
Anexo II: Ejemplo con Objeto callback
Anexo III: Algunos Conceptos Avanzados
Anexo III: Algunos Conceptos Avanzados
Anexo IV: CORBAen Java 1.3
Anexo V: Ejemplos de Mapping de IDL en
Anexo V: Ejemplos de Mapping de IDL en
Java

Anexo VI: Resumen de Terminología
í

d

l

Anexo I

(en Java 1.4)

Ej.: HelloWorld (I)

Pasos

1 - Definir el interfazremoto
1. Definir el interfaz remoto
2.- Compilar el interfazremoto
3.- Implementar el servidor
4.- Implementar el cliente
4. Implementar el cliente
5.- Arrancar la aplicación

http://java.sun.com/j2se/1.5.0/docs/guide/idl/GShome.html

Ej.: HelloWorld (II)
Paso 1: definir el interfaz remoto IDL

Si el servicio ya estuviera implementado tendrían
Si el servicio ya estuviera implementado, tendrían

que pasarnos el interfazIDLpara programar el
cliente

Hello idl
Hello.idl

module HelloApp
{

interface Hello
{

string sayHello();
oneway void shutdown();
()

id h td

};

};

En directorio “HelloApp”

Module: espacio de nombres (package)

Ej.: HelloWorld (III)

Paso 2: compilar el interfazremoto

El IDLpermite independencia del lenguaje
Podríamos usar un compilador IDLde Java
Podríamos usar un compilador IDLde Java

para implementar el cliente en Java y un
compilador IDLde Java para implementar
compilador IDLde Java para implementar
el servidor en C++

idlj -fall Hello.idl

-fall para que cree no sólo los stubsdel
cliente sino también los skeletonsdel
servidor
servidor

Ej.: HelloWorld (IV)

Hello.java:

Versión Java del interfaz IDL
Proporciona funcionalidad de objeto CORBA estándar
Extiende org.omg.CORBA.Object, HelloOperations, y

á

org.omg.CORBA.portable.IDLEntity

HelloHelper.java:
HelloHelper.java:

Downcasting
de interfaces remotos

Funcionalidad requerida para convertir objetos CORBA a sus tipos (narrow)
Responsable de leer y escribir los tipos de/a flujos de datos
También de insertar y extraer valores en un Any

Ficheros
obtenidos

(I)

HelloHolder.java:

HllHld j

Para implementar parámetros out/inout
Encapsula un objeto que implementa Hello

Implementa el interfaz orgomgCORBAportableStreamable
Implementa el interfaz org.omg.CORBA.portable.Streamable



Delega en HelloHelperpara leer y escribir
Proporciona operaciones para argumentos:

org.omg.CORBA.portable.OutputStreamy
orgomgCORBAportableInputStream
org.omg.CORBA.portable.InputStream

Recuerda que en Java, el paso de

parámetros es por valor...

Luego se compilarán con javacy se pondrán en el CLASSPATH

Ej.: HelloWorld (V)

_HelloStub.java(stubdel cliente)

Objeto local representando al remoto
Proporciona la funcionalidad CORBAbásica al cliente
El cliente no lo usa directamente
Extiende org.omg.CORBA.portable.ObjectImpl

á

Implementa el interfaz Hellojava
Implementa el interfaz Hello.java



HelloPOA.java (skeletondel servidor)
Punto de entrada al objeto distribuido
Proporciona la funcionalidad CORBA básica al servidor
Extiende org.omg.PortableServer.Servant



Implementa los interfaces org.omg.CORBA.portable.InvokeHandlery
HelloOperations

HelloOperations.java
HelloOperations.java

Mappingsde las operaciones definidas en el interfaz IDL
Compartido por stubsy skeletons

Ficheros
obtenidos

(II)

Luego se compilarán con javac y se pondrán en el CLASSPATH

Ej.: HelloWorld (VI): Serv.

Paso 3: implementación del lado

id

servidor
Implementar la clase servant

Extiende HelloPOA(skeleton)
Un método por cada operación del IDL
Son métodos Java ordinarios (el código

necesario para operar con el ORB lo
proporciona el skeleton)
proporciona el skeleton)

Implementar la clase servidor:

Pone los servicios de los objetos a disposición
Pone los servicios de los objetos a disposición

de los interesados

Ej.: HelloWorld (VII): Serv.

HelloServer java
HelloServer.java

// HelloServer.java
// Copyright and License
import HelloApp *;
import HelloApp.*;
import org.omg.CosNaming.*;
import org.omg.CosNaming.NamingContextPackage.*;
import org omg CORBA *;
import org.omg.CORBA. ;
import org.omg.PortableServer.*;

import java.util.Properties;
...

contiene el skeleton

servicio de nombres
servicio de nombres
excepción servicio
de nombres

necesario para toda
aplicación CORBA

modelo de herencia
modelo de herencia
del Portable Server

propiedades para
iniciar el ORB
iniciar el ORB

Ej.: HelloWorld (VIII): Serv.

HelloServer.java: clase servant

class HelloImpl extends HelloPOA {
b
private ORB orb;

t ORB

i

}

public void setORB(ORB orb_val) {

orb = orb val;
orb
orb_val;

// implement sayHello() method
H ll () {
public String sayHello() {

bli St i
return "\nHello world !!\n";

}

// implement shutdown() method
public void shutdown() {

orb.shutdown(false);

}
}

}

definido por nosotros para
poder guardar una referencia
l ORB(
h td )
al ORB(que se utiliza en shutdown)

tili

Método de org.omg.CORBA.ORB.
Con argumento false, solicita que se
termine el ORBinmediatamente,
sin esperar que termine ningún
procesamiento

ú

Ej.: HelloWorld (IX): Serv.

HelloServer.java: clase servidora

public class HelloServer {
public class HelloServer {

public static void main(String args[]) {

try {
y {
/* Main code here */

}
catch (Exception e) {

System err println("ERROR: " + e);
System.err.println( ERROR: + e);
e.printStackTrace(System.out);

}

System.out.println("HelloServer Exiting ...");

}

}

Desarrollado en las
siguientes
transparencias

captura, en particular,
excepciones CORBA
que puedan producirse
que puedan producirse

Ej.: HelloWorld (X): Serv.

1) Inicializar el ORB (método factoría):
)
)

(

ORB orb = ORB.init(args, null);

Pasamos los argumentos de la línea comandos
para establecer propiedades

String[]

Properties

j

p ,

p p

Por ejemplo, una propiedad estandarizada es
omg.ORB.CORBA.ORBClass, que permite establecer la
implementación de ORB deseada
implementación de ORB deseada

Reflexión

¿Algún patrón de diseño
¿ gú pat ó de d se o
relacionado con esto?

El patrón Factory ¿Ventajas?

Permite “enchufar” cualquier ORBde CORBA
Permite enchufar cualquier ORBde CORBA

Ej.: HelloWorld (XI): Serv.

2) Obtener una referencia al Root POA:
)

POA rootpoa = POAHelper.narrow(orb.resolveinitialreferences("RootPOA"));
));

_ _

p

p

(

(

3) Activar el POAManager:
)

g

Permite obtener referencias
Iniciales a determinados
objetos: RootPOA,
NameService, etc.

rootpoa.the_POAManager().activate();

Hace que los POAs asociados
comiencen a procesar
peticiones

Ej.: HelloWorld (XII): Serv.
4) Instanciar el objeto servant:

HelloImpl helloImpl = new HelloImpl();

5) P
l ORB
5) Pasar una referencia al ORB:

f

i

helloImpl.setORB(orb);
( );

p

Esto lo requiere este ejemplo completo para implementar
el shutdown; también podría ocuparse el servidor y el
el shutdown; también podría ocuparse el servidor y el
objeto remoto simplemente activar un flagpara avisarle
de la necesidad

Ej.: HelloWorld (XIII): Serv.

6) Obtener una referencia al servant:

org.omg.CORBA.Object ref = rootpoa.servant_to_reference(helloImpl);
Hellohref=HelloHelpernarrow(ref)
Hello href = HelloHelper.narrow(ref)

7) Obtener el contexto de nombres inicial:
7) Obtener el contexto de nombres inicial:

org.omg.CORBA.Object objRef =

g g
orb.resolve_initial_references("NameService");

j

j

NamingContextExtncRef=NamingContextExtHelpernarrow(objRef);
NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);

Ej.: HelloWorld (XIV): Serv.

8) Registrar el servanten el servicio de

nombres:

String name = "Hello";
NameComponent path[] = ncRef.to_name(name);
Rf bi d( th h f)
ncRef.rebind(path, href);

Cuando el cliente llame a resolve(“Hello”)en el contexto de
nombres inicial, el servicio de nombres devolverá una referencia de
objeto al servantHello

)

(

Ej.: HelloWorld (XV): Serv.

9) Esperar invocaciones en un bucle:

orb.run();

-Permite al ORBrealizar trabajo utilizando el thread principal del
servidor

-Cuando llegue una invocación del cliente y se complete, el
servidor se pondrá a esperar de nuevo

-El método runtermina la ejecución cuando se haga un
shutdownsobre el ORB
shutdownsobre el ORB

Ej.: HelloWorld (XVI): Cliente

Paso 4: implementar el cliente

HelloClient.java

// HelloClient.java
//C i ht dLi
// Copyright and License
import HelloApp.*;
import org.omg.CosNaming.*;
importorgomgCosNamingNamingContextPackage*;
import org.omg.CosNaming.NamingContextPackage.*;
import org.omg.CORBA.*;
...

contiene el stub

servicio de nombres
excepción servicio
de nombres
de nombres

necesario para toda
aplicación CORBA

Ej.: HelloWorld (XVII): Cliente

HelloClient.java: clase cliente

publicclassHelloClient{
public class HelloClient {

public static void main(String args[]) {

try {

Desarrollado en las
i
siguientes
transparencias

t

i

captura, en particular,
excepciones CORBA
que puedan producirse

/*Maincodehere*/
/ Main code here /

}
catch (Exception e) {

System.err.println("ERROR: " + e);
eprintStackTrace(Systemout);
e.printStackTrace(System.out);

}

}

}

Ej.: HelloWorld (XVIII): Cliente

1) Inicializar el ORB:
)

ORB orb = ORB.init(args, null);

Pasamos los argumentos de la línea comandos
para establecer propiedades

2) Obtener el contexto de nombres inicial:

org.omg.CORBA.Object objRef =

orb.resolve_initial_references("NameService");

NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
  • Links de descarga
http://lwp-l.com/pdf14927

Comentarios de: CORBA: Anexos - Ingeniería de Software II (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad