| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/08/2011 12:49:36
|
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!!! |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/08/2011 12:54:52
|
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.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/08/2011 13:25:08
|
serathiuk
JavaTeenager
![[Avatar]](/images/avatar/aee5620fa0432e528275b8668581d9a8.jpg)
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/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/08/2011 13:58:26
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/08/2011 14:25:26
|
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!!! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/08/2011 14:29:30
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/08/2011 14:39:16
|
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. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/08/2011 15:17:22
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/08/2011 15:25:11
|
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. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/08/2011 07:04:21
|
juliocbq
GUJ Expert
![[Avatar]](/images/avatar/153704bb24a28e9a6bb49e8ffde1492e.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/08/2011 07:13:45
|
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. |
|
|
 |
|
|