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!