Como fazer um cliente em Java e um servidor em C++
por Anônimo c++, Corba, jacorb, Java, omniorb, ufscar
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
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!
  
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
Fedora :
su
gedit
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!
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)


 
8 de dezembro de 2010 às 10:46
Topico Perfeito VARTAO!! Muito Obrigado e Parabés MULEQ!