! % & % ' "# $ $ & ( ) % * + ) ! " # ! &&&# #& ! &&&# ) # ! &&&# ! &&&# ! &&&# ! &&&# $ # # ' ( ! '% !# # # # # , ) # . / ." 0 1 ', , ' * 44 5,0 6 .' + . -# 7 6 $ . 2 '. 3 0 1 , 7 1 , 8 9 $ . ' 0 # 0 '# - ' ; ' ' . 6< * ;' jidl; 5, 0 =) jidl ? ', ' ' = ' 0 > ' 7 ' javac. : ' * + $ , 8 A , ' BC! D 0 2 3 0 @ ' & ( ; =' 6 '$ ' ! = ' ' F 0 F ' ? , 6<0 7 $G ' ; ' ' F ' '= ; ,' 0 $G ? ,' H ,' 0 ,' F ' ' # E ' & ( ; 6 '$ ' =' F 0 F ' ? , 6<0 $G $G ' ' ' ? ' F ' H , 'J ' ,' ' , ? ,0 # I - ' ' L ; ' ,7 ' 3 $ %/ *0 * 1 ?, !'0 2 3 $ 1 * ./ $ 4 ) 1 $ 1 K ' * + , 5 ) #include “hello_skel.h” package hello; public class Server { public static void main(String args[]) { orb = org.omg.CORBA.ORB.init(args, props); Inicializa o ORB Inicializa o Adaptador de Objetos // Resolve Root POA org.omg.PortableServer.POA rootPOA = org.omg.PortableServer.POAHelper.narrow( orb.resolve_initial_references("RootPOA")); org.omg.PortableServer.POAManager manager = rootPOA.the_POAManager(); manager.activate(); // Cria o objeto Hello_impl helloImpl = new Hello_impl(); Hello hello = helloImpl._this(orb); : ' * + , 5 ) // Grava a referencia do objeto em um arquivo Converte o objeto hello String ref = orb.object_to_string(hello); para uma string String refFile = "Hello.ref"; java.io.FileOutputStream file = new java.io.FileOutputStream(refFile); java.io.PrintWriter out = new java.io.PrintWriter(file); out.println(ref); out.close(); // Executa o servidor Servidor fica aguardando por requisições orb.run(); de clientes } //fim do método main } //fim da classe Server public class Hello_impl extends HelloPOA { public void say_hello() { System.out.println("Hello world!"); } } Implementação do método say_hello() ' * + , 5 ) package hello; public class Client { public static void main(String args[]) { org.omg.CORBA.Object obj = null; int status = 0; org.omg.CORBA.ORB orb = null; orb = org.omg.CORBA.ORB.init(args, props); Inicializa o ORB Obtém a Ref. do Objeto remoto a partir de uma string armazenada em arquivo try{ String refFile = "Hello.ref"; BufferedReader in = new BufferedReader(new FileReader(refFile)); String ref = in.readLine(); obj = orb.string_to_object(ref); } @ ' * + , 5 ) // Converte para uma referencia ao objeto Hello Hello hello = HelloHelper.narrow(obj); // Chama o metodo remoto hello.say_hello(); Converte a Referência para um objeto do tipo Hello Realiza a chamada ao método say_hello no objeto remoto System.exit(status); } //fim método main } //fim classe Client ' * ( 5/ 3 /% interface Agenda { string consultaNome(in string nome); boolean insereItem(in string nome, in string fone); long statusMem(); void listaItens(); }; - E ' * ( 5 ) package agenda; public class Agenda_cli { public static void main(String args[]) { int status = 0; String input; String nome, fone; boolean res; Inicializa o ORB org.omg.CORBA.ORB orb = null; org.omg.CORBA.Object obj = null; orb = org.omg.CORBA.ORB.init(args, props); Obtém a Ref. do Objeto remoto a partir de uma string armazenada em arquivo String refFile = "Agenda.ref"; BufferedReader in = new BufferedReader(new FileReader(refFile)); String ref = in.readLine(); obj = orb.string_to_object(ref); : ' * ( 5 ) // Converte para uma referencia ao objeto Hello Agenda agenda = AgendaHelper.narrow(obj); res = agenda.insereItem(nome, fone); if (!res) System.out.println("Agenda cheia!"); Converte a Referência para um objeto do tipo Agenda agenda.listaItens(); fone = agenda.consultaNome(nome); if (fone.equals("0")) System.out.println("Nao encontrado!"); else System.out.println("O telefone e': " + fone); System.out.println("Registros na memoria: " + agenda.statusMem()); return 0; } //fim do método main } //fim da classe Agenda_cli @ I ' * ( 5 ) package agenda; public class Agenda_srv { public static void main(String args[]) { int status = 0; org.omg.CORBA.ORB orb = null; Inicializa o ORB orb = org.omg.CORBA.ORB.init(args, props); org.omg.PortableServer.POA rootPOA = org.omg.PortableServer.POAHelper.narrow(orb.resolve_initial_references("RootPOA")); org.omg.PortableServer.POAManager manager = rootPOA.the_POAManager(); manager.activate(); Inicializa o Adaptador de Objetos E ' * ( 5 ) // Cria o objeto Agenda_impl agendaImpl = new Agenda_impl(); Agenda agenda = agendaImpl._this(orb); Converte o objeto hello para uma string // Grava a referencia ao objeto em um arquivo String ref = orb.object_to_string(agenda); String refFile = "Agenda.ref"; java.io.FileOutputStream file = new java.io.FileOutputStream(refFile); java.io.PrintWriter out = new java.io.PrintWriter(file); out.println(ref); out.close(); // Executa o servidor orb.run(); System.exit(status); } // fim do método main } //fim da classe Agenda_srv Servidor fica aguardando por requisições de clientes I K ' * ( 5 ) public class Agenda_impl extends AgendaPOA { final int MAX = 20; private class Agenda { String nome; Implementação da classe e métodos String fone; que serão invocados pelo cliente }; private Agenda [] ag; private int numItens; public Agenda_impl() { numItens = 0; ag = new Agenda[MAX]; for (int i=0; i < MAX; i++) ag[i] = new Agenda(); } K ' * ( 5 ) public String consultaNome(String chave) { } public boolean insereItem(String nome, String fone) { Implementação dos métodos que serão } invocados pelo cliente public int statusMem() { } public void listaItens() { } } //fim classe Agenda_impl ' / ' M' $G ' ' ' ' H ,' ' J F ' F 0 ' ', = #6 . = ? , ### Referência de Objeto IDL:CCS:1.0 lasdix:2133 lasdix:2133 controller:C1 controller:C1 Informação utilizada pelo ORB e AO para localizar o objeto alvo. Informações necessárias para que um ORB estabeleça uma conexão com o servidor. Informação utilizada para localizar descrições da interface no Repositório de Interfaces