+2

Integrando o PHP com Java (parte 1)

criado por Rodrigo Rodrigues em 17/03/2004 11:22am
Lembrando que a intenção do artigo é mostrar como o PHP tem suporte à várias tecnologias.

Requerimentos para plataformas Windows

Java

Tenha o Java2 SDK instalado na sua máquina. A versão atual quando escrevi esse artigo era a seguinte:

http://jdl.sun.com/webapps/download/Display?BundleId=9025&Download+Windows+%28.exe%29.x=21&Download+Windows+%28.exe%29.y=6

PHP

Baixe a DLL (php_java.dll) e o JAR (php_java.jar) correspondente à versão do PHP no site oficial(http://www.php.net/releases.php - Dica baixe a versão Full"php-x.x.x-Win32.zip").

Descomente a seguinte linha no seu php.ini:

extension=php_java.dll

Altere as seguintes linhas nesse mesmo arquivo:

[Java]
java.class.path = "C:\php\extensions\php_java.jar;C:\php\java_class"
java.home = "C:\j2sdk1.4.1\bin"
java.library = "C:\j2sdk1.4.1\jre\bin\server\jvm.dll"
java.library.path = "C:\php\extensions"

java.class.path, é o caminho onde se encontra o JAR (php_java.jar) e suas classes Java.
java.home, é o caminho onde o Java SDK foi instalado.
java.library, é o caminho onde se encontra a Java Virtual Machine (JVM) para rodar as classes Java.
java.library.path, é o caminho onde se encontra a DLL (php_java.dll).

A parte mais chata das configurações acabou, e veremos agora um exemplo passo a passo.

JavaPHP.java:
public class JavaPHP {
    private String nome = null;

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getNome() {
        return nome;
    }
}

Salve esse arquivo dentro do diretório que está na configuração do php.ini('java.class.path' - nesse exemplo ficou configurado como "C:\php\java_class").

Essa classe é um exemplo simples de métodos get() e set(). Depois compile sua classe num editor de sua preferência ou abra o DOS e digite:

javac JavaPHP.java

java_php.php:
<?php
$javaPHP = new Java('JavaPHP');
$javaPHP->setNome("Java+PHP");
echo "Método do Java = " . $javaPHP->getNome();
?>

Para chamar suas classes Java você precisa usar o seguinte comando:

<?php
$obj = new Java('NomeClasse');
?>

Se a classe existir (NomeClasse) a variável ($obj) se torna uma instância da mesma e terá acesso aos métodos públicos que contém na classe.

Referências

Java
- Documentação: http://java.sun.com/docs/
- Site: http://java.sun.com
- Editor para desenvolvimento: http://www.eclipse.org/downloads/index.php

PHP
- Integração com Java: http://br.php.net/manual/pt_BR/ref.java.php
- Programação Orientada à Objetos: http://br.php.net/manual/pt_BR/language.oop.php

Espero que tenham gostado do artigo, a parte 2 falará detalhadamente de uma aplicação usando Java, MySQL e PHP.

Sem mais, Rodrigo Rodrigues.

Comentários:

Mostrando 1 - 10 de 25 comentários
vinicius disse:
Segui o seu turorial, mas no meu php.ini não há:

extension=php_java.dll para descomentar e nem
[Java]
java.class.path = "C:\php\extensions\php_java.jar;C:\php\java_class"
java.home = "C:\j2sdk1.4.1\bin"
java.library = "C:\j2sdk1.4.1\jre\bin\server\jvm.dll"
java.library.path = "C:\php\extensions"
para alterar.

Então eu adicioneu na mão:

.
.
.
;extension=php_sybase_ct.dll
;extension=php_tidy.dll
;extension=php_xmlrpc.dll
;extension=php_xsl.dll
extension=php_java.dll

e

.
.
.
[Tidy]
; The path to a default tidy configuration file to use when using tidy
;tidy.default_config = /usr/local/lib/php/default.tcfg

; Should tidy clean and repair output automatically?
; WARNING: Do not use this option if you are generating non-html content
; such as dynamic images
tidy.clean_output = Off

[Java]
java.class.path = "D:\CPqD\php\ext\php_java.jar;D:\CPqD\php\java_class"
java.home = "C:\Arquivos de programas\Java\jdk1.5.0_07\bin"
java.library = "C:\Arquivos de programas\Java\jdk1.5.0_07\jre\bin\server\jvm.dll"
;java.library.path = "D:\CPqD\php\ext"

Quando instalei o php, ele veio com uma pasta ext, mas essa não tem a php_java.dll, então baixei baixei o pecl-5.1.6-Win32.zip e coloquei as bibliotecas na em uma pasta extensions que eu criei na pasta do php e copiei todas elas na pasta ext também.

Quando tento executar o php que chama o java dá um erro no apache e vem aquela frase do windows dizendo que ele deve ser fechado.
31/10/2006 4:57am (~17 anos atrás)

Gostaria de saber se por ser uma "DLL" tem como fazer essa integração no LINUX.
Seria a mesma coisa, seguir os mesmos passos?

Obrigado.
20/06/2006 1:27pm (~18 anos atrás)

Nuno Ribeiro disse:
Antes de mais parabéns pelo artigo.
Eu fiz a configuração tal como foi descrita no artigo, mas não consigo por isto a funcionar. Na hora de carregar a página no browser o apache dá um erro e diz que vai fechar.

O Apache HTTP Server encontrou um problema e vai ser encerrado. Lamentamos qualquer inconveniente que isto lhe possa causar.

Se alguém souber como resolver este problema agradecia imenso.

Obrigado.
15/05/2006 4:06pm (~18 anos atrás)

Robson Kucki disse:
Daew Galera,

Tbm fiz toda a configuração, mas quando tento executar o script o windows me retorna o seguinte erro

"A instrução no "0x00000000" fez referência à memória no "0x0000000". A memória não pôde ser "read""

Só está funcionando com o Php 4, mas estou precisando que funcione no php5.

Se poderem me ajudar ficarei muito grato.

Robson Kucki
22/03/2006 11:16am (~18 anos atrás)

Rafael Quines disse:
Olá..

Trabalho com PHP há 2 anos. Tenho curso de Java de 2 meses. Ou seja, conheço um pouco as duas linguagens.

Porém, nao estou conseguindo fazer essa integração.

dá um erro do APACHE e pede p/ ser fechado..

Será que alguem pode me ajudar???
25/02/2006 1:36pm (~18 anos atrás)

Pessoal. Estou com problemas em fazer funcionar o Java+PHP.

Warning: java.lang.ClassNotFoundException: php in C:\Arquivos de programas\Apache Group\Apache2\htdocs\itau_shopline\index.php on line 131

Fatal error: Call to a member function on a non-object in C:\Arquivos de programas\Apache Group\Apache2\htdocs\itau_shopline\index.php on line 132

Configuracoes:
java.class.path = "C:\PHP\extensions\php_java.jar;C:\PHP\java_class"
java.home = "C:\j2sdk1.4.2_09\bin"
java.library = "C:\j2sdk1.4.2_09\jre\bin\server\jvm.dll"
java.library.path = "C:\php\extensions"

Programa Java Instalado:
j2sdk-1_4_2_09-windows-i586-p.exe

Sou leigo em Java e iniciante em PHP.
Se puderem me ajudar. Agradeço desde já
03/10/2005 9:55am (~18 anos atrás)

O diretório q vc está rodandos os phps e as classes java tem q ser o mesmo q vc especificou em java.class.path.
No seu caso altere o java.class.path do php.ini para: java.class.path = "C:\Arquivos de programas\EasyPHP\php\extensions\php_java.jar;c:\arquivos de programas\easyphp\www\itaushopline"
02/09/2005 4:04pm (~18 anos atrás)

Pra quem está tendo esse erro, de uma lida nesse bug:

http://bugs.php.net/bug.php?id=18600

Basicamente o suporte a java é experimental no PHP, e também só funciona direito se o PHP estiver rodando por CGI. Só não me pergunte o porquê disso...
Estava tendo o mesmo erro, o arquivo executava uma ou 2x e depois dava erro... dai mudei o PHP pra CGI e não aconteceu mais.

Abraço a Todos!
30/08/2005 5:02pm (~18 anos atrás)

Segue o meu php.ini :

[Java]
java.class.path = "C:\Arquivos de programas\EasyPHP\php\extensions\php_java.jar;C:\WINDOWS\java\trustlib\"
java.home = "C:\j2sdk1.4.2_04\bin"
java.library = "C:\j2sdk1.4.2_04\jre\bin\server\jvm.dll"
java.library.path = "C:\Arquivos de programas\EasyPHP\php\extensions"

Fiz tudo como recomendado, mas o resultado da minha pagina é :

Warning: java.lang.ClassNotFoundException: Itaucripto.class in c:\arquivos de programas\easyphp\www\itaushopline\index.php on line 117

Fatal error: Call to a member function on a non-object in c:\arquivos de programas\easyphp\www\itaushopline\index.php on line 123

Já fiz de tudo para fazer com que o Java encontre o path da classe ... mas naum tem jeito ... alguma dica ?
17/06/2005 3:42pm (~19 anos atrás)

Gustavo Villa disse:
==== ATENÇÃO ====

NÃO SE ESQUEÇAM QUE O ARQUIVO A SER USADO DEVERÁ SER JavaPHP.CLASS e não JavaPHP.JAVA.

ISSO DEVE ESTAR CONFUNDINDO MUITA GENTE!

Qual a diferença entre os 2? O .class é o arquivo já compilado e o .java é apenas o código fonte.

Como fazer para compilar o arquivo JavaPHP.java?

Primeiramente será preciso instalar o J2SDK, que é o conjunto de arquivos e bibliotecas para desenvolvedores Java.

WINDOWS> http://192.18.97.133/ECom/EComTicketServlet/BEGIN2D31F789CD53D97D2E44CDEDD7BCF156/-2147483648/840154263/1/606770/606626/840154263/2ts+/westCoastFSEND/j2sdk-1.4.2_08-oth-JPR/j2sdk-1.4.2_08-oth-JPR:3/j2sdk-1_4_2_08-windows-i586-p.exe

LINUX>
http://192.18.97.133/ECom/EComTicketServlet/BEGIN2D31F789CD53D97D2E44CDEDD7BCF156/-2147483648/840154263/1/606770/606638/840154263/2ts+/westCoastFSEND/j2sdk-1.4.2_08-oth-JPR/j2sdk-1.4.2_08-oth-JPR:4/j2sdk-1_4_2_08-linux-i586-rpm.bin

Em seguida, vá ao prompt de comando (iniciar>executar>cmd) e vá até a pasta onde está o arquivo javac.exe (ex.: C:\j2sdk\bin)

em seguida digite: javac C:\PastadoSeuArquivoJava\JavaPHP.java

Na pasta do j2sdk (ex.: C:\j2sdk\bin) será criado um novo arquivo... o JavaPHP.class

Prontinho... já temos nosso arquivo Java compilado.

É ESTE ARQUIVO QUE O PHP PROCURA PARA ACESSAR! JavaPHP.class e não .java!!!

Agora copie o arquivo JavaPHP.class para a pasta onde está o arquivo JavaPHP.java, conforme este artigo estava explicando e... BINGO! ASTA LA VISTA BABY!

[]s
Gustavo Villa.
01/05/2005 11:23am (~19 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)