[Resolvido] Troca de mensagem entre aplicações

5 respostas
fabio_magri

Olá, pessoal.

Gostaria de uma opnião sobre troca de mensagens entre duas aplicações (C x Java).

O cenário
As duas aplicações rodam num hardware com recursos limitados sobre uma distribuição do sistema operacional Linux. O hardware é um produto dedicado para uma aplicação específica.

A aplicação
Módulo C: O sistema gerencia todo o acesso ao hardware e controla a portas externas (COM, USB, etc.) de entrada de dados, nestas portas encontram-se dispositivos que a aplicação é encarregada pelo gerenciamento destas informações.
Módulo Java: Deve consumir informações da aplicação em C e exibir estas informações via ethernet. A idéia é plugar um cabo de rede neste hardware, acessar seu ip e visualizar via browser a aplicação.

Requisito
A troca de informação deve acontecer com o mínimo (ou nenhuma) escrita física em disco.

Solução x conceito

  1. Utilizar o conceito socket Unix (com a lib https://github.com/mcfunley/juds) para realizar a troca de mensagem, mas gostaríamos de não perder o conceito de portabilidade do Java.
  2. Reescrever tudo em Java, mas a equipe C é relutante! :x
  3. JMS?
  4. Seu comentário é muito bem vindo.

Obrigado.

5 Respostas

drsmachado

JNI ou JNA

paulo1911

Ola amigo.
Qual seria minha abordagem.
Eu usaria JNI para comunicar com a API escrita em C, onde seria um simples jar. Ou os analistas C ja criariam essa interface com SocketServer.
Esse jar iniciaria um ServerSocket não bloqueante numa porta específica e receberia as solicitações de leitura de dados. As solicitações seria em formato xml e a resposta dos dados coletados da API em C também seria em XML.

Eu criaria uma App Web, que usaria um jar cliente do socketServer e seria o proxy para a solicitação dos dados que estão na maquina que está rodando o jar com o SocketServer.
Dessa forma vc pode usar o que vc quiser, Spring, Servlets e JSP, Struts, velocity, Rails, C#, pq vc vai ter na verdade um serviço fazendo a interface com a API em C.

Fica a dica.
Abraço

E

Use ZeroMQ nos dois lados, C e Java.

http://www.zeromq.org/

jonasjgs2

amigo, a maneira mais simples que eu vejo para nao dar dor de cabeca para ninguem e usar a area de transferencia…

se vc usar a area de transferencia formatada talvez vc consiga sem muito trabalho…

grava uma string na area de transferencia
SISTEMA:ENVIO"DADOSDADOSDADOS"

e a outra aplicacao le e verifica se na area de transferencia
existe algo com esta mesma formatacao e vice versa…

talvez assim nao de muito trabalho…

tive este problema a algum temop e resolvi assim…

fabio_magri

Obrigado a todos pelos comentários.

paulo1911, basicamente segui seu raciocínio: comunicação socket(jar) alimentado um bom modelo que é consumido pela aplicação final web.

Sucesso!

Criado 19 de outubro de 2012
Ultima resposta 15 de jan. de 2013
Respostas 5
Participantes 5