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