Quarta-feira, Abril 01, 2009

PHP5(exec) e Java

Salve a todos, eu sei faz muito tempo que não posto nada,
esta semana aqui no trabalho tive uma demanda na qual foi necessário utilizar um objeto Java, por assim dizer, no PHP, bem tudo bem se estivessímos no PHP 4, mas pra minha infelicidade geral fiz uma busca no google e o resultado não foi muito animador, pra resumir a história a melhor opção encontrada foi um projeto denominado "Bridge".
Analisando o tal "Bridge" não demorou para notar que não me atenderia:
  • é necessário instalar o tomcat
  • era necessário rodar a app no cliente( ah, esqueci de mencionar era uma app php-gtk).
Exposto estes dois pequenos detalhes logo você vai deduzir que não vou sair instalando um servidor de app na máquina de meus clientes :)

Analisando o caso, chegamos em na seguinte conclusão:
- vamos criar uma classe que irar intermediar minha app com as classes java e conforme a necessidade eu executo chamadas por meio do como exec do php uma espécie de interface.

Para exemplificar vamos criar uma classe simple em java( Hello ) que vai mudar seu retorno de acordo com sua chamada, depois um arquivo php que fara a chamada a esta classe.

-- begin Hello.java
/**
* testa a quantidade de argumentos recebido e no caso
* de nenhum argumento seja inforamdo retorna um objeto
* em notação JSON com o status de false ou true se ao
* menos um argumento for inforamdo
*
* @name Hello
* @return String
* @example java Hello | java Hello somevalue
*/
class Hello{
public static void main( String args[] ){
if( args.length == 0)
System.out.println("{\"status\": \"false\"}");
else
System.out.println("{\"status\": \"true\"}" );
}
}

-- end Hello.java
simples como tem de ser :), claro, neste exemplo.

agora vamos ao exemplo( vou fazer a chamada diretamente no PHP sem nenhuma saida em GTK porque o intuito é mostrar apenas o funcionamento).

-- begin testPHP5Java.php
*?php
$obj = exec("java Hello");
echo "resultado: \n\n";
print_r( json_decode( $obj ) );
echo "\n\n\n\n";
-- enf testPHP5Java.php

basta ir ao seu shell preferido e digitar:
php testPHP5Java.php