Pessoal, tenho um componente que necessito de reutilizar em outras sistemas que foram desenvolvidos em outras linguagens, pensei em criar um DLL que encapsulasse as chamadas ao meu componente Java (jar) pois a maioria das linguagens atuais consegue trabalhar com invocação de DLL, no entanto, nas pesquisas que fiz constatei até o momento não ser possível tornar meu jar acessível através de uma DLL, alguém me confirmaria isso?
Se não consiguo criar um DLL a partir do meu jar, como vocês enxergam como uma outra forma de linguagens como VB e Delphi poderem invocar métodos do meu jar?
Olá
Web services ou XML-RPC (lixo por ser RPC mas que tem para todas as linguagens)
E não concordo que a maioria das linguagens atuais consegue trabalhar com invocação de DLL.
[]s
Luca
Na verdade, leêm DLL linguagens da Microsoft ou então ferramentas específicas para trabalhar com Windows.
Olá
Correto!
Fora C#, não me lembro de nenhuma das novas linguagens popularizadas nos últimos 4 ou 5 anos que se importe em ler DLLs. As mais antigas como Java, VB, Delphi, Fortran e Cobol conseguem.
[]s
Luca
Java é feito para rodar em um ambiente próprio, fora do sistema operacional, que é a máquina virtual. Se precisa escrever código portável a outras linguagens é melhor usar uma linguagem com um compilador nativo(c++, pascal, vb, etc…).
Olá
Não é bem assim. Hoje em dia é comum sistemas feitos usando aplicativos desenvolvidos em várias linguagens diferentes SEM precisar de DLLs. E sem usar a porcaria de RPC que sugeri na minha primeira mensagem. Há meios limpos e elegantes de se trocar web services sem RPC.
Mas se não houver outro jeito ou se a necessidade for mesmo a de RPC, então já tem coisas prontas muito fáceis de usar, um deles o velho e quase obsoleto XML-RPC.
[]s
Luca
Para uma linguagem conversar com outra usualmente… aconselho webservice que é uma implementação mais limpa…
Agora para conversar de forma agil… RPC é melhor pois o tempo de resposta é maior
[quote=Luca]Olá
Não é bem assim. Hoje em dia é comum sistemas feitos usando aplicativos desenvolvidos em várias linguagens diferentes SEM precisar de DLLs. E sem usar a porcaria de RPC que sugeri na minha primeira mensagem. Há meios limpos e elegantes de se trocar web services sem RPC.
Mas se não houver outro jeito ou se a necessidade for mesmo a de RPC, então já tem coisas prontas muito fáceis de usar, um deles o velho e quase obsoleto XML-RPC.
[]s
Luca[/quote]
A pergunta deste tópico foi: “É possível aproveitar código java, para ser usado em outras linguagens?”
A resposta é não.
Se for sim, pode me dizer quais linguagens fazem isso, e me dar um exemplo?
[quote=juliocbq][quote=Luca]Olá
Não é bem assim. Hoje em dia é comum sistemas feitos usando aplicativos desenvolvidos em várias linguagens diferentes SEM precisar de DLLs. E sem usar a porcaria de RPC que sugeri na minha primeira mensagem. Há meios limpos e elegantes de se trocar web services sem RPC.
Mas se não houver outro jeito ou se a necessidade for mesmo a de RPC, então já tem coisas prontas muito fáceis de usar, um deles o velho e quase obsoleto XML-RPC.
[]s
Luca[/quote]
A pergunta deste tópico foi: “É possível aproveitar código java, para ser usado em outras linguagens?”
A resposta é não.
Se for sim, pode me dizer quais linguagens fazem isso, e me dar um exemplo?[/quote]
Errado! … inclusive aqui na empresa que eu trabalho agente utiliza um projeto que chama java-brigde… em que o php faz chamada de métodos java
[quote=ralphsilver][quote=juliocbq][quote=Luca]Olá
Não é bem assim. Hoje em dia é comum sistemas feitos usando aplicativos desenvolvidos em várias linguagens diferentes SEM precisar de DLLs. E sem usar a porcaria de RPC que sugeri na minha primeira mensagem. Há meios limpos e elegantes de se trocar web services sem RPC.
Mas se não houver outro jeito ou se a necessidade for mesmo a de RPC, então já tem coisas prontas muito fáceis de usar, um deles o velho e quase obsoleto XML-RPC.
[]s
Luca[/quote]
A pergunta deste tópico foi: “É possível aproveitar código java, para ser usado em outras linguagens?”
A resposta é não.
Se for sim, pode me dizer quais linguagens fazem isso, e me dar um exemplo?[/quote]
Errado! … inclusive aqui na empresa que eu trabalho agente utiliza um projeto que chama java-brigde… em que o php faz chamada de métodos java[/quote]
Pode me mostrar como funciona? O código é acessado de um jar, como uma dll(A pergunta do tópico)?
Não… sem dll… agente apenas precisa subir o projeto no apache do php…
depois disso… tem umas functions em php que chama a classe java e o método e ele te retorna a resposta…
eu trabalho no setor java aqui… vou te arrumar um exemplo de como essa ferramenta funciona… é até simples o negócio
[quote=ralphsilver]Não… sem dll… agente apenas precisa subir o projeto no apache do php…
depois disso… tem umas functions em php que chama a classe java e o método e ele te retorna a resposta…
eu trabalho no setor java aqui… vou te arrumar um exemplo de como essa ferramenta funciona… é até simples o negócio[/quote]
Então funciona sim, como uma dll, se o php acessa a classe java. Se puder, me envia um exemplo pra eu ver.
Olá
[quote=juliocbq]A pergunta deste tópico foi: “É possível aproveitar código java, para ser usado em outras linguagens?”
A resposta é não.
Se for sim, pode me dizer quais linguagens fazem isso, e me dar um exemplo?[/quote]
Completamente errado. Com web services é possível aproveitar código feito em qualquer linguagem, inclusive Java.
Acessar como DLL, apesar de meio insano (pelo acoplamento desnecessário), não só é possível em Java como é muito fácil. Basta escrever uma ponte em C usando JNI. Não vejo a menor dificuldade em fazer isto apesar de que prefiro os web services ou similares
[]s
Luca
[quote=Luca]Olá
[quote=juliocbq]A pergunta deste tópico foi: “É possível aproveitar código java, para ser usado em outras linguagens?”
A resposta é não.
Se for sim, pode me dizer quais linguagens fazem isso, e me dar um exemplo?[/quote]
Completamente errado. Com web services é possível aproveitar código feito em qualquer linguagem, inclusive Java.
Acessar como DLL, apesar de meio insano (pelo acoplamento desnecessário), não só é possível em Java como é muito fácil. Basta escrever uma ponte em C usando JNI. Não vejo a menor dificuldade em fazer isto apesar de que prefiro os web services ou similares
[]s
Luca[/quote]
Espera ae luca. Se você escrever uma ponte jni já não é mais java, e sim c++. Isso sim seria realmente insano. É preferível escrever a aplicação em c++.
O que o autor do tópico perguntou é se existe uma maneira de acessar um bytecode (um arquivo .class) a partir de outras linguagens.
A resposta do ralphsilver é muito mais plausível.
Olá
[quote=juliocbq]Espera ae luca. Se você escrever uma ponte jni já não é mais java, e sim c++. Isso sim seria realmente insano. É preferível escrever a aplicação em c++.
O que o autor do tópico perguntou é se existe uma maneira de acessar um bytecode (um arquivo .class) a partir de outras linguagens.[/quote]
Nada disto. Já participei de um monte de projetos java que usavam um monte de linguagens usando pontes via JNI. É muito mais fácil escrever 20 ou 30 linhas em C para acessar outras coisas do que escrever tudo em C++.
E a ponte citada pelo ralphsilver faz a mesma coisa.
[]s
Luca
[quote=Luca]Nada disto. Já participei de um monte de projetos java que usavam um monte de linguagens usando pontes via JNI. É muito mais fácil escrever 20 ou 30 linhas em C para acessar outras coisas do que escrever tudo em C++.
E a ponte citada pelo ralphsilver faz a mesma coisa. [/quote]
Pois é, isso quer dizer que o bytecode não pode ser acessado. Esse é o x da questão. O que é acessado é código nativo.
E a alternativa do raphsilver parece ser bem diferente, já que ele só usa bytecode.
Olá
[quote=juliocbq]Pois é, isso quer dizer que o bytecode não pode ser acessado. Esse é o x da questão. O que é acessado é código nativo.
E a alternativa do raphsilver parece ser bem diferente, já que ele só usa bytecode. [/quote]
Procure saber o que é JNI e o que se pode fazer com ele. A ponte citada não usa JNI porque se baseia em XML. Portanto acessa menos código nativo do JNI que acessa Java e faz parte do Java.
E juro a você, que de 1982 para cá, não me lembro do último projeto que fiz usando uma única linguagem. O sistema que tenho de engenharia feito em Fortran tem pequenas partes em C. Tudo que fiz na vida em Clipper até 1996 tinha partes em C e em Assembler. Todos os projetos web que participei usavam no mínimo umas 4 linguagens. E todos os projetos Java feitos em Swing que participei, tinham sempre alguma coisa acessada via JNI.
[]s
Luca
[quote=Luca]Olá
[quote=juliocbq]Pois é, isso quer dizer que o bytecode não pode ser acessado. Esse é o x da questão. O que é acessado é código nativo.
E a alternativa do raphsilver parece ser bem diferente, já que ele só usa bytecode. [/quote]
Procure saber o que é JNI e o que se pode fazer com ele. A ponte citada não usa JNI porque se baseia em XML. Portanto acessa menos código nativo do JNI que acessa Java e faz parte do Java.
E juro a você, que de 1982 para cá, não me lembro do último projeto que fiz usando uma única linguagem. O sistema que tenho de engenharia feito em Fortran tem pequenas partes em C. Tudo que fiz na vida em Clipper até 1996 tinha partes em C e em Assembler. Todos os projetos web que participei usavam no mínimo umas 4 linguagens. E todos os projetos Java feitos em Swing que participei, tinham sempre alguma coisa acessada via JNI.
[]s
Luca[/quote]
Trabalho com isso a um bom tempo também. Desenvolvemos hardware aqui, e estamos constantemente usando jni para poder utilizar os drivers dos dispositivos desenvolvidos. Usamos várias linguagens, inclusive a maioria dos nossos projetos é escrita em pascal e assembly.
Usar jni significa usar c++ e não usar java. JNI permite java acessar interfaces nativas e não o contrário, como o autor do tópico perguntou. Uma ponte na verdade seria um assemblly nativo, com seus métodos distribuidos, podendo ser acessados por bytecodes(no caso do java), por assemblyes nativos, ou outro tipo de pseudo código.
Eu não sou dono da verdade, e realmente não sei se bytecode pode ser acessado por assemblyes nativos. Mas ainda não vi nenhum uso disso. Se realmente houver possibilidade, gostaria que pudessem me esclarecer.
Olá
Julio
Com JNI você pode também chamar Java. É só criar uma thread no Java e manter aberto um canal de comunicação com o Java. Mas como escrevi antes, neste caso eu faria via web services ou XML-RPC.
[]s
Luca
[quote=Luca]Olá
Julio
Com JNI você pode também chamar Java. É só criar uma thread no Java e manter aberto um canal de comunicação com o Java. Mas como escrevi antes, neste caso eu faria via web services ou XML-RPC.
[]s
Luca[/quote]
O que eu não estou entendendo é o seguinte: Quem controla toda cominicação é o método nativo, não? Se precisar passar um parâmetro para a dll tem que ser por meio do método nativo e vice-versa, certo?
Ou existe como um método da interface nativa(c++) chamar um método de uma classe java(bytecode)?