Download CORBA ejeplo 1

Document related concepts
no text concepts found
Transcript
Ejemplos CORBA
//interfaz idl
module HelloApp
{ interface Hello
{ string sayHello();
oneway void shutdown();
};
};
Aplicación servidor, en esta misma se implementa el objeto servant (sirviente)
//Servidor
import HelloApp.*;
import org.omg.CosNaming.*;
import org.omg.CosNaming.NamingContextPackage.*;
import org.omg.CORBA.*;
import org.omg.PortableServer.*;
import org.omg.PortableServer.POA;
import java.util.Properties;
// clase que implemeneta los metodos que se invocaran de manera remota, esta se puede implementar de manera
//separa a este archivo, viene siendo el servan o sirviente
class HelloImpl extends HelloPOA
{ private ORB orb;
public void setORB(ORB orb_val)
{ orb = orb_val; }
// implementacion del metodo sayHello()
public String sayHello()
{ return "\nHola muchachos espero que funcione bien este ejemplito !!\n"; }
// implementacion del metodo shutdown() el cual desconecta el cliente del servidor
public void shutdown() { orb.shutdown(false); }
}
//implementeacion del servidor
public class HelloServer
{ public static void main(String args[])
{ try
{ // se crea e inicializa el ORB
ORB orb = ORB.init(args, null);
// se obtiene la referencia de rootpoa y activacion del POAManager
POA rootpoa = POAHelper.narrow(orb.resolve_initial_references("RootPOA"));
rootpoa.the_POAManager().activate();
// se crea el servant y se registra con el ORB
HelloImpl helloImpl = new HelloImpl();
helloImpl.setORB(orb);
// obtiene la referencia del objeto desde el servant
org.omg.CORBA.Object ref = rootpoa.servant_to_reference(helloImpl);
Hello href = HelloHelper.narrow(ref); // convierte a una referencia CORBA
// obtiene el contexto del nombrado raiz, NameService invoca al servicio de nombres
org.omg.CORBA.Object objRef =orb.resolve_initial_references("NameService");
// usa NamingContextExt que es parte de la especificacion de servicio de nombrado interoperable
//(Interoperable Naming Service (INS)
NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
// enlaza la referencia del objeto con el nombre
String name = "Hello";
NameComponent path[] = ncRef.to_name( name );
ncRef.rebind(path, href);
System.out.println("HelloServer preparado y esperando ...");
// el servidor esta en espera de invocaciones por parte de los clientes
orb.run();
}
catch (Exception e)
{
System.err.println("ERROR: " + e);
e.printStackTrace(System.out);
}
1
System.out.println("HelloServer cerrando concexion ...");
}
}
// cliente
import HelloApp.*;
import org.omg.CosNaming.*;
import org.omg.CosNaming.NamingContextPackage.*;
import org.omg.CORBA.*;
public class HelloClient
{ static Hello helloImpl;
public static void main(String args[])
{ try
{ // se crea y se inicializa el ORB
ORB orb = ORB.init(args, null);
// se obtiene el contexto de nombrado raiz
org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService");
// usa NamingContextExt en lugar de NamingContext. Esto es parte del servicio
// Interoperable de nombrado
NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
// resolve the Object Reference in Naming
String name = "Hello";
//resuelve la referencia al objeto en el servidor de nombres
helloImpl = HelloHelper.narrow(ncRef.resolve_str(name));
System.out.println("Obteniendo a manejador para el objeto servidor: " + helloImpl);
System.out.println(helloImpl.sayHello());
helloImpl.shutdown();
}
catch (Exception e)
{ System.out.println("ERROR : " + e) ;
e.printStackTrace(System.out);
}
}
}
1. compilar la interfaz idl
idlj -fall Hello.idl
2. compilar la aplicación
javac *.java HelloApp/*.java
3. ejecutar el orbd
start orbd –ORBInitialPort puerto // esto en caso de que se trabaje un puerto diferente al que esta dado por definición
4. ejecutar servidor
start java HelloServer –ORBInitialPort puertoDelServidordeNombre -ORBInitialHost hostDelServidorDeNombres
5. ejecutar cliente
java HelloClient –ORBInitialPort puertoDelServidordeNombre -ORBInitialHost hostDelServidorDeNombres
2