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:
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 sequence <transacao> transacoes; 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.
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.
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 <IP do computador>
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 <IP do computador> -ORBInitialPort 2500
Obs.:
as restrições de segurança impostas na rede do laboratório não permitem essa
forma de comunicação entre máquinas.
Prática
Utilize o restante da
aula para implementar os métodos do sistema de auto-atendimento do banco.
Modifique também o
código do cliente para utilizar todos os métodos implementados pelo servidor.
O cliente pode ser uma aplicação de linha de comando ou uma aplicação
gráfica, que efetue o interfaceamento com o usuário e invoque os métodos
implementados pelo servidor.
Dúvidas?
Atendimento
aos Alunos
- Horário:
Terças-feiras das 16:20 às 18:00.
- Local:
Prédio do INE - Sala 305.
E-Mail
f r a n k @ i n f . u f s c . b r
Mantida
por Frank Siqueira.
Atualizada em 16/04/2011.
|