Aplicativos em PHP/Recursos Extras/Integração com Java
Integração Java
[editar | editar código-fonte][1] Introdução
A linguagem Java tem se firmado como uma das mais poderosas no ambiente empresarial, em aplicações que exigem alta confiabilidade e flexibilidade, além de integração em ambientes multi-plataforma. A linguagem de script PHP, por sua vez, oferece facilidades na programação de aplicações para a Web, como por exemplo a integração direta com o Servidor Web Apache, além de ser utilizada largamente na Internet atual com o advento do Ajax.
O uso em conjunto das linguagens PHP e Java já começa a ser explorada, e pode trazer a desenvolvedores de aplicações para a Web uma solução que agrega as qualidades de ambas as linguagens.
Este artigo objetiva apontar as etapas necessárias para a integração das linguagens PHP e Java. Apresenta exemplos de configuração do PHP em conjunto com Java em plataformas Windows e Linux.
[2] Instalação do Apache, Java e PHP
Inicialmente, deve-se instalar as versões mais recentes do Apache, Java e PHP. Sugere-se, contudo, que se utilize as versões estáveis mais recentes, e não versões em testes.
Pode-se obter as versões do Apache, Java e PHP, nos seguintes sites, respectivamente:
* http://www.apache.org/ * http://java.sun.com/ * http://www.php.net/
2.1. Ambiente Linux
a) Instalar o java.
Baixando-se, por exemplo, a versão tar.bz2 de Java, deve-se extrai-la para o diretório /local_de_instalacao/j2re-1_4_1_01-linux-i586.bin e linkar para /local_de_instalacao/java, conforme mostrado nas seguintes linhas:
* bunzip j2re-1_4_1_01-linux-i586.tar.bz2 * tar -xvf j2re-1_4_1_01-linux-i586.tar * ln -s java j2re-1_4_1_01-linux-i586
b) Instalar o apache.
* gunzip apache_xxx.tar.gz * tar -xvf apache_xxx.tar * cd apache_xxx * ./configure --prefix=/opt/www --enable-module=so * make * make install
Exemplo prático. Utilizou-se a instrução de compilação do Apache (./configure) com as seguintes opções:
* ./configure --prefix=/var/www --sysconfdir=/etc/apache --enable-module=so --enable-module=mime_magic --enable-module=headers --enable-module=info --enable-module=log_agent --server-gid=nobody
c) Compilar o arquivo fonte do PHP, com a opção -with-java, seguindo primeiramente os passos de instalação:
* gunzip php-xxx.tar.gz * tar -xvf php-xxx.tar * cd ../php-xxx * ./configure --with-mysql --with-apxs=/opt/www/bin/apxs --with-java=/opt/java * make * make install * cp php.ini-dist /usr/local/lib/php.ini
Observação: existem várias opções para a configuração do PHP. Sugere-se que se carregue apenas os módulos que efetivamente se for utilizar, para que o PHP fique mais "leve".
* ./configure -with-java [-other-configuration-options]
Exemplo prático. Em nosso caso, utilizou-se a instrução de compilação do PHP (./configure), com as seguintes opções:
* ./configure --with-apxs=/var/www/bin/apxs --with-mod_harset --with-openssl --with-zlib --with-bz2 --with-kerberos --with-java=$JAVA_HOME --with-mysql --with-xml --enable-bcmath --enable-calendar --enable-ftp --enble-magic-quotes --with-pear --enable-sockets --enable-track-vars --enable-versoning
Teste de funcionamento do Apache/PHP
Deve-se startar o apache, com "/www/bin/apachectl start" (ou, em nosso caso, com "/usr/sbin/apachectl start").
Para testar se o php está funcionando, um simples arquivo .php pode ser criado, contendo a instrução "phpinfo();".
Ex. Criar arquivo "phpinfo.php" em "/www/htdocs/". < ?php phpinfo(); ?>
Depois chamá-lo via web browser através do endereço: "http://server-ip/phpinfo.php"
2.2. Ambiente Windows
A configuração, para o ambiente Windows, testada para o presente artigo foi: Apache 1.3, Java 2 (jsdk1.4.0_03), e PHP 4.3.6.
2.3. Ambiente Unix
[3] Variáveis de Ambiente
As variáveis de ambiente são as variáveis utilizadas pelo sistema operacional para a configuração do ambiente de trabalho do usuário. No caso particular de Java, precisa-se acertá-las, para que se possa executar o compilador java a partir da linha de comando, e para que o compilador possa encontrar todas as classes da Java API, referenciadas no(s) programa(s).
3.1. Ambiente Linux
Deve-se editar o arquivo /etc/profile e acrescentar as seguintes linhas:
* set PATH=$PATH:/usr/local/diretorio_java/bin * set CLASSPATH=. * set JAVA_HOME=/usr/local/diretorio_java * export PATH CLASSPATH JAVA_HOME
Caso esteja-se utilizando o usuário root para compilar os programas em java, pode-se precisar editar o arquivo ./profile e acrescentar as seguintes linhas:
* JAVA_HOME=/usr/local/diretorio_java * PATH=$PATH:/usr/local/diretorio_java/bin * CLASSPATH=. * export PATH CLASSPATH JAVA_HOME
Deve-se configurar a variável de ambiente LD_LIBRARY_PATH, inserindo dentro do arquivo de controle do Apache (/usr/sbin/apachectl):
* export LD_LIBRARY_PATH=/usr/lib/java/jre/lib/i386:/usr/lib/java/jre/lib/i386/server
3.2. Ambiente Windows
A instalação dos Win 9x, Win ME e Win XP diferenciam-se um pouco. Para o Windows Millenium (Win ME), deve-se seguir os seguintes passos:
* Passo 1: Selecionar o Menu Iniciar * Passo 2: Escolher a opção de Executar * Passo 3: Digitar: msconfig * Passo 4: Clicar em OK
Isto irá abrir uma janela de configuração, na qual deve-se selecionar a pasta [Ambiente]. As variáveis de ambiente e respectivos valores a serem configurados são:
* PATH - editar a variável, inluindo no final o seguinte: ";C:\Caminho_do_Java\bin" * CLASSPATH - Se não existir, esta variável precisa ser criada. Conteúdo: "." * JAVA_HOME - Se não existir, esta variável precisa ser criada. Conteúdo: "C:\Caminho_do_Java"
[4] Alterando a Configuração Padrão do PHP
O PHP possui um arquivo de configuração, chamado php.ini, que determina diversas características de seu funcionamento. Deve-se alterar a sua configuração padrão, em função do uso da extensão java.
4.1. Ambiente Linux
Primeiramente deve-se verificar se o arquivo php.ini foi criado, após a compilação do php. Se for criado um arquivo php.ini-dist, deve-se copiá-lo com o nome php.ini. Depois disso, deve-se colocar o php.ini no mesmo diretório em que está o diretório de arquivos e bibliotecas do php (no caso nosso, em $PHP_LIB_PATH = /usr/local/lib). Assim, obtém-se uma estrutura de diretórios semelhante à representada abaixo:
* $PHP_LIB_PATH/.. * $PHP_LIB_PATH/php.ini * $PHP_LIB_PATH/php/
A seguir, configura-se o arquivo php.ini, com os valores:
* [Java] * java.library.path=/usr/local/lib/php/extensions/no-debug-non-zts-20010901 * java.library=/usr/local/java/jre/lib/i386/libjava.so * java.class.path=/usr/local/lib/php/php_java.jar * extension_dir=/usr/local/lib/php/extensions/no-debug-non-zts-20010901 * extension=libphp_java.so
Exemplo prático (implementado no Linux). Observar que a linha de java.library.path foi suprimida, uma vez que o caminho de biblioteca já havia sido especificado, através da variável extension_dir.
* ;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Paths and Directories ; ;;;;;;;;;;;;;;;;;;;;;;;;;;; include_path = "/usr/local/lib/php"
extension_dir = "/usr/local/lib/php/extensions/no-debug-non-zts-20020429"
;;;;;;;;;;;;;;;;;;;;;;;; ; Dynamic Extensions ; ;;;;;;;;;;;;;;;;;;;;;;;;
extension=java.so
;;;;;;;;;;;;;;;;;;;;; ; Module Settings ; ;;;;;;;;;;;;;;;;;;;;;
[Java] ; java.class.path deve apontar para local do arquivo php_java.jar, ; e tambem para os locais onde ficam as classes java definidas pelo ; usuario. java.class.path = /usr/local/lib/php/php_java.jar
; java.home deve apontar para o diretorio bin do JDK java.home = /usr/lib/java/bin/
4.2. Ambiente Windows
Na distribuição original, pode ser que ainda não haja o arquivo php.ini, e sim o arquivo php.ini-dist. Deve-se então renomear este arquivo para php.ini, e copiá-lo para o diretório C:\Windows (Win 9x e ME), ou para C:\Winnt (Windows NT, Windows 2000 ou Windows XP).
Deve-se alterar as seguintes variáveis:
* extension_dir é setada para o diretório de instalação do php (php-install-dir), ou onde estão os arquivos .dll de extensões. * extension é setada para o módulo de java (arquivo php_java.dll). * java.class.path local do arquivo php_java.jar, e também dos locais onde ficam as classes java definidas pelo usuário. Os caminhos das classes de usuários devem ser separados por ponto-e-vírgula. * java.home - diretório bin do JDK * java.library - deve apontar para o arquivo da Java Virtual Machine (jvm.dll) * java.library.path local do arquivo php_java.dll.
Exemplo prático:
* extension_dir = "c:\php-4.3.6-Win32\extensions" * extension = "php_java.dll" * [Java] * java.class.path = c:\php-4.3.6-Win32\extensions\php_java.jar * java.home = c:\j2sdk1.4.0_03\bin * java.library = c:\j2sdk1.4.0_03\jre\bin\client\jvm.dll * java.library.path = c:\php-4.3.6-Win32\extensions
[5] Alterando a Configuração Padrão do Apache
Adicionar as seguintes linhas ao arquivo httpd.conf:
* LoadModule php4_module c:/diretorio_php/sapi/php4apache.dll * AddModule mod_php4.c * AddType application/x-httpd-php .php
Adicionar as seguintes linhas ao arquivo /etc/ld.so.conf:
* /usr/local/java/jre/lib/i386 * /usr/local/java/jre/lib/i386/server
Depois rodar: /sbin/ldconfig
Deve-se criar, dentro do diretório onde ficam as extensões do PHP (em nosso caso, em /opt/php/lib/php/extensions/no-debug-non-zts-20020429), um link simbólico para o arquivo java.so:
* "ln -s java.so libphp_java.so"
[6] Verificação de Funcionamento PHP + Java
Exemplo 1: Código em php, chamando a classe Java java.lang.System:
< ?php
$systemInfo = new Java("java.lang.System");
print "Total de segundos desde Primeiro de Janeiro de 1970:".$systemInfo->currentTimeMillis();
?>
[7] Referências
[1] Apache Foundation - Homepage. http://www.apache.org/ [2] FARSTAD, Bård. Interfacing with Java from PHP. Publishing date: 09.11.2000 15:19. http://zez.org/article/articleview/26/. Consultado em 06-05-2004. [3] GRAY, Simon. Fórum de discussões: Apache, PHP (With java). http://www.evilwalrus.com/articles.php?aid=7. Consultado em 06-05-2004. [4] Java - Sun Microsystems http://www.apache.org/ [5] PHP - Homepage. http://www.php.net/ [6] PHP - Architect. Fórum: At wit's end with configuring php --with-java . http://www.phparch.com/discuss/index.php/m/2352/0#msg_2352. Consultado em 06-05-2004. [7] YUNG, Leandro. Criando um Ambiente Java para Desenvolvimento. Revista Mundo Java, número 1, ano 1, setembro-outubro de 2003. pp32-35. Editora Mundo OO.