Como fazer comunicação cliente/servidor em Java usando Corba
por Anônimo
Aula do professor Frank Siqueira que pode ser visualizada aqui.
Arquivos utilizados no tutorial :
Servidor.java
Cliente.java
Banco.idl
Auto_AtendimentoImpl.java
Descrição
Essa atividade mostrará como utilizar o CORBA para efetuar a comunicação entre objetos distribuídos.
Roteiro
Especificando a Interface do Servidor
Suponha a interface do servidor de um banco, que deve ser acessado tanto pelo sistema de auto-atendimento pela Internet quanto pelos caixas eletrônicos.
Primeiramente, devemos definir a interface IDL do servidor. Iremos utilizar a seguinte interface:
Banco.idl
Salve a descrição de interface acima no arquivo Banco.idl e a compile com o comando:
idlj -fall Banco.idl
Note que foram gerados diversos arquivos no diretório banco, dentre os quais estão as stubs e skeletons que serão usados pela aplicação e classes que correspondem aos tipos de dados e exceções definidos no arquivo IDL.
Implementando o código do Servidor
Agora devemos implementar o servidor. O arquivo auto_atendimentoImpl.java contém uma implementação limitada dos métodos especificados na interface de auto-atendimento. O arquivo servidor.java contém o código necessário para instanciar o servidor e registrá-lo no serviço de nomes. Salve estes dois arquivos no diretório banco criado pelo compilador IDL.
atendimentoImpl.java
servidor.java
Compile todos os arquivos do servidor com o comando:
javac banco/*.java
Implementando o código do Cliente
O cliente CORBA (arquivo cliente.java) localiza o servidor e faz chamadas aos seus métodos.
cliente.java
Compile o cliente com o comando:
javac cliente.java
Executando a Aplicação no Windows
Primeiramente, inicie o ORB com o comando:
> start orbd
Em seguida, inicie o servidor:
> start java banco.servidor
Finalmente, inicie o cliente com o comando:
> java cliente
Para fazer a comunicação entre máquinas diferentes, indique ao cliente que o ORB estará rodando em outro computador:
> java cliente -ORBInitialHost
Obs.: as restrições de segurança impostas na rede do laboratório não permitem essa forma de comunicação entre máquinas.
Executando a Aplicação no Linux
Primeiramente, inicie o ORB com o comando:
> orbd -ORBInitialPort 2500 &
Em seguida, inicie o servidor em um terminal:
> java banco.servidor -ORBInitialPort 2500
Finalmente, inicie o cliente executando em outro terminal o comando:
> java cliente -ORBInitialPort 2500
Para fazer a comunicação entre máquinas diferentes, indique ao cliente que o ORB estará rodando em outro computador:
> java cliente -ORBInitialHost -ORBInitialPort 2500
Espero que ajude,
um forte abraço.
Arquivos utilizados no tutorial :
Servidor.java
Cliente.java
Banco.idl
Auto_AtendimentoImpl.java
Descrição
Essa atividade mostrará como utilizar o CORBA para efetuar a comunicação entre objetos distribuídos.
Roteiro
Especificando a Interface do Servidor
Suponha a interface do servidor de um banco, que deve ser acessado tanto pelo sistema de auto-atendimento pela Internet quanto pelos caixas eletrônicos.
Primeiramente, devemos definir a interface IDL do servidor. Iremos utilizar a seguinte interface:
Banco.idl
module banco { typedef unsigned long conta; typedef double valor; const string nome_banco = "UFSC"; const string moeda = "R$"; enum aplicacao { poupanca, fundo_acoes, renda_fixa }; struct transacao { unsigned long data; // Formato: ddmmyyyy string<12> descricao; valor quantia; }; typedef sequencetransacoes; exception conta_inval { conta c; }; exception saldo_insuf { valor saldo; }; interface auto_atendimento { readonly attribute string boas_vindas; valor saldo ( in conta c ) raises ( conta_inval ); void extrato ( in conta c, out transacoes t, out valor saldo ) raises ( conta_inval ); void transferencia ( in conta origem, in conta destino, in valor v ) raises ( conta_inval, saldo_insuf ); void investimento ( in conta c, in aplicacao apl, in valor v ) raises ( conta_inval, saldo_insuf ); }; interface caixa_eletronico: auto_atendimento { void saque ( in conta c, in valor v ) raises ( conta_inval, saldo_insuf ); }; };
Salve a descrição de interface acima no arquivo Banco.idl e a compile com o comando:
idlj -fall Banco.idl
Note que foram gerados diversos arquivos no diretório banco, dentre os quais estão as stubs e skeletons que serão usados pela aplicação e classes que correspondem aos tipos de dados e exceções definidos no arquivo IDL.
Implementando o código do Servidor
Agora devemos implementar o servidor. O arquivo auto_atendimentoImpl.java contém uma implementação limitada dos métodos especificados na interface de auto-atendimento. O arquivo servidor.java contém o código necessário para instanciar o servidor e registrá-lo no serviço de nomes. Salve estes dois arquivos no diretório banco criado pelo compilador IDL.
atendimentoImpl.java
package banco; import org.omg.CosNaming.*; import org.omg.CORBA.*; class auto_atendimentoImpl extends auto_atendimentoPOA { public String boas_vindas () { return "Bem-vindo ao banco " + banco.nome_banco.value; }; public double saldo (int c) throws banco.conta_inval { return 0.0; } public void extrato (int c, banco.transacoesHolder t, org.omg.CORBA.DoubleHolder saldo) throws banco.conta_inval {} public void transferencia (int origem, int destino, double v) throws banco.conta_inval, banco.saldo_insuf {} public void investimento (int c, banco.aplicacao apl, double v) throws banco.conta_inval, banco.saldo_insuf {} }
servidor.java
package banco; import org.omg.CosNaming.*; import org.omg.CORBA.*; import org.omg.PortableServer.*; import java.io.*; public class servidor { public static void main(String args[]) { try{ // Cria e inicializa o ORB ORB orb = ORB.init(args, null); // Cria a implementação e registra no ORB auto_atendimentoImpl impl = new auto_atendimentoImpl(); // Ativa o POA POA rootpoa = POAHelper.narrow( orb.resolve_initial_references("RootPOA")); rootpoa.the_POAManager().activate(); // Pega a referência do servidor org.omg.CORBA.Object ref = rootpoa.servant_to_reference(impl); auto_atendimento href = auto_atendimentoHelper.narrow(ref); // Obtém uma referência para o servidor de nomes org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService"); NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef); // Registra o servidor no servico de nomes String name = "AutoAtendimento"; NameComponent path[] = ncRef.to_name( name ); ncRef.rebind(path, href); System.out.println("Servidor aguardando requisicoes ...."); // Aguarda chamadas dos clientes orb.run(); } catch (Exception e) { System.err.println("ERRO: " + e); e.printStackTrace(System.out); } System.out.println("Encerrando o Servidor."); } }
Compile todos os arquivos do servidor com o comando:
javac banco/*.java
Implementando o código do Cliente
O cliente CORBA (arquivo cliente.java) localiza o servidor e faz chamadas aos seus métodos.
cliente.java
import banco.*; import org.omg.CORBA.*; import org.omg.CosNaming.*; import org.omg.CosNaming.NamingContextPackage.*; public class cliente { public static void main(String args[]) { try { // Cria e inicializa o ORB ORB orb = ORB.init(args, null); // Obtem referencia para o servico de nomes org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService"); NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef); // Obtem referencia para o servidor String name = "AutoAtendimento"; auto_atendimento server = auto_atendimentoHelper.narrow(ncRef.resolve_str(name)); // Imprime mensagem de boas-vindas System.out.println(server.boas_vindas()); // Obtem o numero da conta System.out.print("Entre o numero da sua conta: "); java.io.BufferedReader reader = new java.io.BufferedReader(new java.io.InputStreamReader(System.in)); String conta = reader.readLine(); // Imprime o saldo atual System.out.println("Seu saldo eh de R$" + server.saldo(Integer.parseInt(conta))); } catch (Exception e) { System.out.println("ERROR : " + e) ; e.printStackTrace(System.out); } } }
Compile o cliente com o comando:
javac cliente.java
Executando a Aplicação no Windows
Primeiramente, inicie o ORB com o comando:
> start orbd
Em seguida, inicie o servidor:
> start java banco.servidor
Finalmente, inicie o cliente com o comando:
> java cliente
Para fazer a comunicação entre máquinas diferentes, indique ao cliente que o ORB estará rodando em outro computador:
> java cliente -ORBInitialHost
Obs.: as restrições de segurança impostas na rede do laboratório não permitem essa forma de comunicação entre máquinas.
Executando a Aplicação no Linux
Primeiramente, inicie o ORB com o comando:
> orbd -ORBInitialPort 2500 &
Em seguida, inicie o servidor em um terminal:
> java banco.servidor -ORBInitialPort 2500
Finalmente, inicie o cliente executando em outro terminal o comando:
> java cliente -ORBInitialPort 2500
Para fazer a comunicação entre máquinas diferentes, indique ao cliente que o ORB estará rodando em outro computador:
> java cliente -ORBInitialHost
Espero que ajude,
um forte abraço.
Quem sou eu
Blog Archive
-
▼
2010
(118)
-
▼
novembro
(15)
- 50 Free Apps We're Most Thankful For
- Como fazer um cliente em Java e um servidor em C++
- Google tem 2076 vagas de emprego para 2010
- Como fazer comunicação cliente/servidor em Java u...
- Como fazer comunicação cliente/servidor em Java u...
- Maioria dos brasileiros prefere trabalho Home Office
- Como instalar e utilizar o omniOrb no Ubuntu
- Show ao vivo com um holograma no Japão, demais!
- Configurando para receber emails no Evolution
- Video Tutorial : Como carregar as próximas páginas...
- Vídeo Tutorial:Controle seu firefox pelo mouse
- Google Instant Preview–Veja sites em sua busca no ...
- Kinect–A nova aposta da Microsoft
- Rakesh Vaidyanathan, presidente do BRICs Institute
- GameTrailers–Saiba tudo sobre os games
-
▼
novembro
(15)
19 de setembro de 2016 às 05:00
Are you trying to earn cash from your websites/blogs by running popunder ads?
If so, have you ever considered using PopCash?