Escolar Documentos
Profissional Documentos
Cultura Documentos
Tutorial
Desenvolvimento de Aplicaes Java/CORBA
Emerson Ribeiro de Mello, Fbio Favarim e Joni da Silva Fraga
{emerson, fabio, fraga}@das.ufsc.br
Este tutorial ensina como criar uma aplicao distribuda CORBA utilizando o JacORB.
O exemplo abordado neste tutorial um simples sistema de envio de mensagens eletrnicas,
trocadas entre um cliente e um servidor. Com este exemplo possvel conhecer todas as tarefas
envolvidas em uma aplicao distribuda.
Os passos a seguir mostram resumidamente, o que est envolvido no processo
desenvolvimento uma aplicao distribuda CORBA:
1. Definio da interface remota do objeto
Deve-se definir primeiramente a interface remota do objeto usando a Linguagem de
Definio de Interface da OMG (IDL-Interface Definition Language).
2. Compilao da IDL
Nesta etapa sero gerados os cdigos Java da interface, assim como os stubs e
skeletons do objeto.
3. Implementao da interface (servant)
Nesta etapa implementado em JAVA a interface descrita na IDL. A implementao
da interface denominada servant.
4. Implementao do servidor
Que responsvel por criar os objetos e por registra-los no servio de nomes, assim
como aguardar pelas invocaes dos clientes remotos. O servidor usa os skeletons
gerados pelo compilador IDL, para facilitar a comunicao.
5. Implementao do cliente
O cliente responsvel por obter a referncia para o objeto remoto e fazer a chamada
aos mtodos. Similarmente ao servidor, o cliente usa os Stubs gerados pelo
compilador IDL como base da aplicao cliente.
6. Compilando e executando as aplicaes
Compilao das classes
1
http://www.das.ufsc.br/~fabio/java-corba/
Desenvolvimento da Aplicao
Descrio
Um sistema de envio de mensagens eletrnica, onde as mensagens so compostas por
um emissor, destinatrio, assunto e corpo da mensagem. O lado servidor da aplicao ser
responsvel por receber as mensagens enviadas pelo lado cliente. O cliente dever fornecer uma
forma de que se possa compor um mensagem e envi-la para o servidor.
Definio da Interface
O servidor possui o mtodo enviar_msg(mensagem email), que tem como retorno uma
cadeia de caracteres, informando ao objeto que requisitou o mtodo uma mensagem de
confirmao indicando se a comunicao foi ou no bem sucessida.
Para este exemplo foi usado o ORB JacORB 1.4, disponvel em http://www.jacorb.org , porm pode-se utilizar
qualquer ORB que esteja de acordo com a especificao CORBA v2.3
2
http://www.das.ufsc.br/~fabio/java-corba/
O arquivo correio.java:
package tutorial;
/**
*
*
*/
Java
public interface correio
package tutorial;
correioOperations.java
3
http://www.das.ufsc.br/~fabio/java-corba/
correioPOA.java
correioHolder.java
Implementaes
Todas os cdigos utilizados neste tutorial esto neste documento como anexos.
Implementaoda Inteface(correioImpl.java)
A classe correioImpl deve implementar todos os mtodos da interface correio.
Cada instncia de correio implementada pela correioImpl. O mtodo enviar_msg
possui como parmetro uma estrutura (definida na IDL e que mapeada para uma classe em
Java) mensagem.
Implementaodo Servidor(Servidor.java)
A implementao do servidor deve:
Iniciar o ORB;
4
http://www.das.ufsc.br/~fabio/java-corba/
Implementaodo Cliente(Cliente.java)
A implementao do cliente deve:
Inicializar o ORB;
Procurar pelo objeto que tenha sido registrado com o nome "Servidor-email" no
servio de nomes e recuperar a referncia do objeto;
Compilando a IDL:
$ idl tutorial.idl
$ javac tutorial/*.java
Executando o servidor
Abra uma nova shell:
$ jaco tutorial.Servidor
Executando o cliente
Abra uma nova shell
$ jaco tutorial.Cliente
6
http://www.das.ufsc.br/~fabio/java-corba/
Anexos
Arquivo: tutorial.idl
// Arquivo IDL
/*
Descrio:
Um sistema para envio de mensagens contendo um emissor,
destinatario,
um assunto e a mensagem propriamente dita.
*/
module tutorial{
struct mensagem{
string emissor;
string destinatario;
string assunto;
string corpo;
};
interface correio{
string enviar_msg(in mensagem email);
};
};
Arquivo: correioImpl.java
package tutorial;
public class correioImpl extends correioPOA{
// Constructor
correioImpl(){
System.out.println("Objeto correio criado com sucesso !");
}
public String enviar_msg(mensagem email) {
7
http://www.das.ufsc.br/~fabio/java-corba/
Arquivo: Servidor.java
package tutorial;
import org.omg.CosNaming.*;
class Servidor{
static public void main(String[] args){
try {
// Inicia o ORB
org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args, null);
// Pega a referencia do POAManager e o inicializa
org.omg.PortableServer.POA rootpoa =
org.omg.PortableServer.POAHelper.narrow
(orb.resolve_initial_references("RootPOA"));
rootpoa.the_POAManager().activate();
// Cria o objeto
correioImpl objCorreio = new correioImpl();
// Transforma o objeto local em uma referencia CORBA
org.omg.CORBA.Object ref = rootpoa.servant_to_reference
(objCorreio);
correio correioRef = correioHelper.narrow(ref);
// Obtem a referencia do servico de nomes
org.omg.CORBA.Object nsRef = orb.resolve_initial_references
("NameService");
NamingContextExt ncRef = NamingContextExtHelper.narrow
(nsRef);
// Faz a ligao (bind) do objeto ao nome no servio de
nomes
NameComponent [] name = new NameComponent[1];
name[0] = new NameComponent("Servidor-Correio", "");
8
http://www.das.ufsc.br/~fabio/java-corba/
Arquivo: Cliente.java
package tutorial;
import org.omg.CosNaming.*;
class Cliente{
static correio objCorreio;
static public void main(String[] args){
try {
// inicializa o ORB
org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args, null);
// Obtem a referencia do servico de nomes
org.omg.CORBA.Object nsRef = orb.resolve_initial_references
("NameService");
NamingContextExt ncRef = NamingContextExtHelper.narrow
(nsRef);
// Busca pelo nome no servio de nomes
NameComponent [] name = new NameComponent[1];
name[0] = new NameComponent("Servidor-Correio", "");
org.omg.CORBA.Object objRef = ncRef.resolve(name);
// Converte o objeto para o tipo da interface correio
objCorreio = correioHelper.narrow(objRef);
9
http://www.das.ufsc.br/~fabio/java-corba/
10
http://www.das.ufsc.br/~fabio/java-corba/