Atividade de Laboratório - CORBA

Interface do Servidor CORBA

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.

Antes de mais nada, devemos definir a interface IDL do servidor. Nesta atividade 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 tranferencia ( 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 geradas stubs e skeletons CORBA para serem usados pela aplicação.

Implementação do Servidor CORBA

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

Implementação do Cliente CORBA

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

Primeiramente, inicie o ORB com o comando:

> start orbd -ORBInitialPort 2500

Em seguida, inicie o servidor:

> start java banco.servidor -ORBInitialPort 2500

Finalmente, inicie o cliente com o comando:

> java cliente -ORBInitialPort 2500 -ORBInitialHost localhost

Tente também, com a ajuda de um colega, fazer a comunicação entre máquinas diferentes. Para isto, substitua 'localhost' pelo nome da máquina do outro grupo ao chamar o cliente.