viernes, 9 de abril de 2010

Corba en 5 minutos

Para esta demostración estoy usando Ubuntu 9.10 y JDK 1.6
Primeramente creamos un directorio en el cual vamos a colocar todo nuestro código fuente, para lo cual desde un terminal usamos el comando
"mkdir Corba"

Entramos en ese directorio y creamos el archivo, con nuestro editor favorito
Mensaje.idl

Entramos en ese archivo y definimos el interfaz IDL,
module mensajeApp{
interface Mensaje{
string saludar(in string nombre);
oneway void shutdown();
};
};

Luego de esto, vamos a generar las clases CORBA.
Para esto usamos el comando desde un terminal
"idlj -fall Mensaje.idl"


Este paso nos crea un directorio llamado mensajeApp que contiene 6 archivos:
MensajeHelper.java
Mensaje.java
MensajePOA.java
MensajeHolder.java
MensajeOperations.java
_MensajeStub.java

Una vez hecho esto debemos crear un servidor y un cliente

Creamos el servidor(MensajeServer.java) con el siguiente código:

import mensajeApp.*;
import org.omg.CosNaming.*;
import org.omg.CORBA.*;
import org.omg.PortableServer.*;
import org.omg.PortableServer.POA;
class MensajeImpl extends MensajePOA{
private ORB orb;
public void setORB(ORB orb_val){
orb=orb_val;
}
public String saludar(String nombre){
return "Saludos "+nombre+" Como te va?";
}
public void shutdown(){
orb.shutdown(false);
}
}

public class MensajeServer {
public static void main(String args[]){
try{
ORB orb= ORB.init(args,null);
POA rootpoa=POAHelper.narrow(orb.resolve_initial_references("RootPOA"));
rootpoa.the_POAManager().activate();
MensajeImpl mensajeImpl=new MensajeImpl();
mensajeImpl.setORB(orb);
org.omg.CORBA.Object ref=rootpoa.servant_to_reference(mensajeImpl);
Mensaje href=MensajeHelper.narrow(ref);
org.omg.CORBA.Object objRef=orb.resolve_initial_references("NameService");
NamingContextExt ncRef=NamingContextExtHelper.narrow(objRef);
String name="Mensaje";
NameComponent path[]=ncRef.to_name(name);
ncRef.rebind(path, href);
System.out.println("El servidor esta listo");
orb.run();
}catch(Exception e){
e.printStackTrace();
}
}
}


Luego tenemos que crear un cliente(MensajeCliente.java):
import mensajeApp.*;
import org.omg.CosNaming.*;
import org.omg.CORBA.*;
public class MensajeCliente {
static Mensaje mensajeImpl;
public static void main(String args[]){
try{
ORB orb= ORB.init(args,null);
org.omg.CORBA.Object objRef=orb.resolve_initial_references("NameService");
NamingContextExt ncRef= NamingContextExtHelper.narrow(objRef);
mensajeImpl=MensajeHelper.narrow(ncRef.resolve_str("Mensaje"));
System.out.println(mensajeImpl.saludar("Belen"));
mensajeImpl.shutdown();
}catch(Exception e){
e.printStackTrace();
}
}
}


Finalmente compilamos todo el codigo fuente. Dentro del directorio de los fuentes ejecutamos javac *.java mensajeApp/*.java

En el directorio de fuentes ejecutamos:
Levantamos el ORB en el puerto 9999 (& es para correr en background)
orbd -ORBInitialPort 9999 &

Levantamos el Servidor con el comando:
java MensajeServer -ORBInitialPort 9999 -ORBInitialHost localhost

En otro terminal, levantamos el Cliente con el comando:
java MensajeCliente -ORBInitialPort 9999 -ORBInitialHost localhost

y nos saldrá:
Saludos Belen Como te va?

No hay comentarios:

Publicar un comentario