Usando classes C++ numa aplicação JAVA e PHP  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
ewt.melo
Debugger

Membro desde: 03/02/2011 16:06:06
Mensagens: 60
Offline

Boa tarde galera...

Atualmente estou com um "pobleminha"...

Aqui na empresa onde trabalha, estamos realizando uma migração de tecnologia, sendo ela de C++ para JAVA e teremos utilização também na Web com PHP...
Temos algumas classes em C++ com diversas operações financeiras, eu sei que parece um serviço meio de porco, mas eu gostaria de reaproveitar ela, sabe como é, sobre carga em cima do programador... ¬¬

Gostaria de saber se vcs conhecem algo que me ajude quanto a isso??? Não quero reescrever tudo de novo agora, tenho uma série de coisas a fazer, é muita coisa, se eu conseguir reaproveitar essa classe já poderei entregar o módulo do departamento financeiro e uma parte do comercial... Depois eu faço ela com calma, quando eu tiver tudo em ordem!!!

Obrigado galera...

This message was edited 2 times. Last update was at 01/08/2011 12:51:49


Deus e o programador fizeram um acordo. Onde Deus não desenvolve sistemas e o programador não faz milagres!!!
entanglement
GUJ Hacker

Membro desde: 26/09/2009 09:18:56
Mensagens: 5750
Offline

Acho que é mais rápido reescrever (no caso do Java), pela minha própria experiência; já ouvi falar que no caso do PHP é possível reaproveitar o código C++ com relativa facilidade - mas é de ouvir falar, não de realmente ter botado a mão na massa.
serathiuk
JavaTeenager
[Avatar]

Membro desde: 01/08/2006 15:20:07
Mensagens: 159
Localização: Curitiba / PR
Offline

Com o PHP acho que você pode consultar a documentação sobre como escrever extensões para linguagem, e criar uma que utilize esse "código C++".

Para Java acho que JNI resolve.

Mas como foi dito, vai ficar meio esquisito isso.

Ricardo Serathiuk
Twitter: http://www.twitter.com/serathiuk/
Blog: http://www.serathiuk.com/
[WWW]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

Compartilho da opinião do Entanglement. Interoperabilidade de Java e C++ é possível, mas é difícil, sujeita a erros e só deve ser usada quando estritamente necessário.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
ewt.melo
Debugger

Membro desde: 03/02/2011 16:06:06
Mensagens: 60
Offline

Bom... Li sobre JNI e realmente é um pouco chato trabalhar com ele, quanto ao PHP é tranquilo... Já fiz esse procedimento algumas vezes e deu certo. Mas eu precisava fazer isso no JAVA... Ai complicou...

Na verdade seria uma gamb temporária, já que eu faria essa adaptação pra ganhar tempo com outras partes do sistema... Mas infelizmente, devido a complexidade levarei o trabalho pra ksa e vou fazer lá, acredito que até depois de amanhã eu entregue esse módulo que precisa apenas dessas classes pra executar as regras de negócio...

De qualquer forma agradeço e, vou ler mais sobre o JNI...
Obrigado pela ajuda de todos...

Obrigado galera... Boa tarde!!!

This message was edited 1 time. Last update was at 01/08/2011 14:27:31


Deus e o programador fizeram um acordo. Onde Deus não desenvolve sistemas e o programador não faz milagres!!!
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

Dê uma olhada no JNA também. Dependendo de como sua aplicação C++ estiver organizada, daria para usa-lo.

Outra opção é criar lá um socket, abrir uma conexão entre as duas aplicações, e comunica-se através de comandos num protocolo que vc especificar. Pode soar trabalhoso, mas as vezes é bem mais prático que JNA e JNI.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
matheuslmota
Virtual Machine Man

Membro desde: 09/03/2010 15:14:56
Mensagens: 664
Offline

ViniGodoy wrote:Dê uma olhada no JNA também. Dependendo de como sua aplicação C++ estiver organizada, daria para usa-lo.

Outra opção é criar lá um socket, abrir uma conexão entre as duas aplicações, e comunica-se através de comandos num protocolo que vc especificar. Pode soar trabalhoso, mas as vezes é bem mais prático que JNA e JNI.


Aqui na empresa já usaram isso, sockets para comunicar entre aplicações C++ e Java, porque a JNI/JNA é meio bugada em alguns aspectos. Foi bem mais fácil pra nós.

Toda vez que você alimenta um troll uma foca morre no Polo Norte.
[MSN]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

matheuslmota wrote:Aqui na empresa já usaram isso, sockets para comunicar entre aplicações C++ e Java, porque a JNI/JNA é meio bugada em alguns aspectos. Foi bem mais fácil pra nós.


Uma das vantagens dessa abordagem, na minha opinião, é que as aplicações ficam completamente isoladas. Assim, não é possível que a JM aborte por um problema de alocação de memória ocorrido no C++, e a VM é bastante sensível ao mau uso da memória. Quando a aplicação aborta por isso é geralmente com um erro feio, difícil de entender e virtualmente impossível de debugar.


E é sempre possível fazer a aplicação java disparar a aplicação C++ caso ela caia.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
matheuslmota
Virtual Machine Man

Membro desde: 09/03/2010 15:14:56
Mensagens: 664
Offline

ViniGodoy wrote:
matheuslmota wrote:Aqui na empresa já usaram isso, sockets para comunicar entre aplicações C++ e Java, porque a JNI/JNA é meio bugada em alguns aspectos. Foi bem mais fácil pra nós.


Uma das vantagens dessa abordagem, na minha opinião, é que as aplicações ficam completamente isoladas. Assim, não é possível que a JM aborte por um problema de alocação de memória ocorrido no C++, e a VM é bastante sensível ao mau uso da memória. Quando a aplicação aborta por isso é geralmente com um erro feio, difícil de entender e virtualmente impossível de debugar.


E é sempre possível fazer a aplicação java disparar a aplicação C++ caso ela caia.


Uma outra coisa que eu já fiz quando precisei integrar uma aplicação Java com outra C++ foi desenvolver um executável em C++ e chamá-lo no Java usando runtime.exe();
Eu pegava a inputStream da execução da aplicação para ler as respostas e no c++ eu usava

para passar parâmetros para o meu aplicativo em C++.
Eu sempre evito à todo custo usar JNA/JNI, pois ela sempre se mostra a alternativa mais difícil e mais propensa à erros de difícil correção.

Toda vez que você alimenta um troll uma foca morre no Polo Norte.
[MSN]
juliocbq
GUJ Expert
[Avatar]

Membro desde: 13/11/2008 12:10:18
Mensagens: 3927
Offline

matheuslmota wrote:
ViniGodoy wrote:
matheuslmota wrote:Aqui na empresa já usaram isso, sockets para comunicar entre aplicações C++ e Java, porque a JNI/JNA é meio bugada em alguns aspectos. Foi bem mais fácil pra nós.


Uma das vantagens dessa abordagem, na minha opinião, é que as aplicações ficam completamente isoladas. Assim, não é possível que a JM aborte por um problema de alocação de memória ocorrido no C++, e a VM é bastante sensível ao mau uso da memória. Quando a aplicação aborta por isso é geralmente com um erro feio, difícil de entender e virtualmente impossível de debugar.


E é sempre possível fazer a aplicação java disparar a aplicação C++ caso ela caia.


Uma outra coisa que eu já fiz quando precisei integrar uma aplicação Java com outra C++ foi desenvolver um executável em C++ e chamá-lo no Java usando runtime.exe();
Eu pegava a inputStream da execução da aplicação para ler as respostas e no c++ eu usava

para passar parâmetros para o meu aplicativo em C++.
Eu sempre evito à todo custo usar JNA/JNI, pois ela sempre se mostra a alternativa mais difícil e mais propensa à erros de difícil correção.


Você tem razão. Mapear memória não gerenciada além de trabalhoso vai deixar o seu projeto comprometido posteriormente. É fácil gerar um leak subindo apontadores c++ para objetos java. O tempo que se leva tratando esses erros pode não compensar o tempo que se leva escrevendo

www.citrox.com.br
matheuslmota
Virtual Machine Man

Membro desde: 09/03/2010 15:14:56
Mensagens: 664
Offline

juliocbq wrote:Você tem razão. Mapear memória não gerenciada além de trabalhoso vai deixar o seu projeto comprometido posteriormente. É fácil gerar um leak subindo apontadores c++ para objetos java. O tempo que se leva tratando esses erros pode não compensar o tempo que se leva escrevendo


Sendo que memória é apenas um dos problemas que a JNA/JNI pode apresentar. Às vezes pode ocorrer erro de linkagem, a DLL que será chamada no Java pode depender de uma biblioteca que não foi corretamente registrada no computador do usuário, ou então está corrompida, ou até mesmo com uma versão diferente.

Toda vez que você alimenta um troll uma foca morre no Polo Norte.
[MSN]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team