Aplicativos em PHP/Recursos Extras/Integração com Java

Integração Java

editar

[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.