Demo Blog

Como fazer um cliente em Java e um servidor em C++

por Anônimo , , , , ,

Partindo do princípio de que você instalou ambos os orb's, tanto o jacOrb (que vem junto com o JDK do Java, para instalar basta seguir este tutorial e pronto) e o omniOrb (para instalar baste seguir este outro tutorial ).

Agora para realizar a chamada entre o cliente em Java utilizando o orb jacOrb e o servidor em C++ utilizando o omniOrb, faça o seguinte :

Pegue o echo.idl que fica dentro da pasta idl, a pasta idl esta dentro da pasta aonde foi instalado o omniOrb.

Agora copie este echo.idl para uma pasta qualquer, iremos gerar os stubs/skeletons para ela:

idlj echo.idl

Ele irá gerar uma pasta chamada echo, entre nela e crie um arquivo .java, EchoClient.java (ele que fará o papel do nosso cliente Java) e cole o seguinte código :

EchoClient.java
import org.omg.CosNaming.*;
import org.omg.CORBA.*;

public class EchoClient {
   
    public static void main(String args[]) {
        try {
            String SetInfo, ReturnInfo, ref;
            org.omg.CORBA.Object objRef;
            Echo EchoRef;
            ORB orb = ORB.init(args, null);

            objRef = orb.resolve_initial_references("NameService");
            NamingContext ncRef = NamingContextHelper.narrow(objRef);

            // locate the service
            NameComponent nc =  new NameComponent("test", "my_context");
            NameComponent nc2 = new NameComponent("Echo", "Object");
           
            NameComponent path[] = { nc,nc2 };
            EchoRef = EchoHelper.narrow(ncRef.resolve(path));

            if (args.length > 1) {
                SetInfo = args[1];
            } else {

            }
           
            System.out.println("Começando o processo do cliente: ");
            ReturnInfo = EchoRef.echoString("UFSCAR");
            System.out.println(ReturnInfo);
           
        } catch (Exception e) {
            System.out.println("ERROR : " + e);
        }
    }
}

Cole o código acima no arquivo criado, EchoClient.java, salve e feche.
Agora compile todos os .java que tive na pasta :

javac *.java

Agora uma coisa importante, é necessário alterar um valor no arquivo omniORB.cfg que utilizamos para instalar o omniOrb, lembram ?
Pois bem, acesse o arquivo como root para poder alterar :

no Ubuntu:
sudo gedit .omniORB.cfg

Fedora :
su


gedit .omniORB.cfg

Altere supportBootstrapAgent = 0 para supportBootstrapAgent = 1 em omniORB.cfg.
Isso é necessário para poder permitir a interoperabilidade entre os orb's, tudo bem ?

Agora digite

make

na pasta aonde esta o exemplo da pasta echo que é subdiretório da pasta 'build' que criamos para instalar o omniOrb lembram ?

Por exemplo:
Eu instalei o omniOrb em :
/home/valter/Corba/omniOrb/install/

A pasta idl, aonde estará o echo.idl esta em :
/home/valter/Corba/omniOrb/install/omniORB-4.1.4/idl/

A pasta build estará em :
/home/valter/Corba/omniOrb/install/build

Os arquivos de exemplo que utilizamos serão compilados na pasta :
/home/valter/Corba/omniOrb/install/omniORB-4.1.4/build/src/examples/echo/ (dê o 'make' aqui)

O código fonte esta em :
/home/valter/Corba/omniOrb/install/omniORB-4.1.4/src/examples/echo


A separação de código fonte e arquivos compilados se dá porque utilizamos a instalação automático do omniOrb para o linux, então o arquivo que há em /home/valter/Corba/omniOrb/install/omniORB-4.1.4/build/src/examples/echo/ irá rodar os arquivos que foram configurados baseados na arquitetura do computador.

Agora inicialize o serviço de nomes do omniOrb

omniNames -start

Isso fará com que ele esteja recebendo e enviando pela porta padrão 2809

Inicialize o servidor
Entre na pasta aonde foi digitado o 'make' :

./eg3_impl


Agora inicialize o cliente :

java EchoClient -ORBInitialPort 2809

Deverá ter uma saída assim :

Começando o processo do cliente:
UFSCAR

Lembrando que o servidor só retorna a mensagem que foi enviada pelo cliente.
É isso.

Agora para que o servidor gere uma string que seja um código você deve implementar esse código no arquivo :

eg3_impl.cc que fica em :
/home/valter/Corba/omniOrb/install/omniORB-4.1.4/src/examples/echo (no meu caso)

Procure pelo método

char* Echo_i::echoString(const char* mesg)

Dentro dele construa a sua implementação de geração do código único e converta para que seja do tipo char*, que ele irá retornar para o cliente Java, tudo bem ?

É isso pessoal, espero ter ajudado.

Um forte abraço.
Valeu Gustavo pela ajuda!
1 comentários mais...

1 comentários

Postar um comentário

Procura algo?

Busque aqui para achar algo no site:

Caso não tenha achado o que procurava, me envie um email para que eu possa cuidar disso para você.

Paperblog :Os melhores artigos dos blogs