«

»

Dic 03

PHP-Java-Bridge: una valida alternativa allo Zend Java Bridge

Con questo articolo voglio riassumere quanto appreso per utilizzare nei vostri programmi PHP un Java-Bridge alternativo rispetto a quello fornito da Zend-Server (denominato Zend Java Bridge).

Dalla versione 6.0 di Zend Server, non solo Zend ha rivisto le modalità di vendita del prodotto, ma ha rimosso il Java Bridge dalla versione “community” (adesso chiamata basic-edition).

Il Java Bridge si può utilizzare per integrare all’interno delle vostre applicazioni PHP alcuni progetti Java esistenti (non disponibili nell’ecosistema PHP) come ad esempio la famosa libreria di Jaspersoft denominata JasperReport, utilissima per eseguire in modo efficiente dei report disegnati attraverso il tool grafico iReport o il nuovo Jasper Studio IDE.

Dal 2004 sul sito sourceforge è disponibile il progetto PHP/Java Bridge che permette di riutilizzare Script dinamici dal Java e viceversa script Java e .Net dal linguaggio (PHP).


Questo progetto mi è sempre piaciuto perchè lo reputo stabile, ben documentato e supportato da persone esperte; inoltre è disponibile anche una mailing list ‘ufficiale’.

L’ultima modifica risale al 04/06/2013 e quindi, il progetto, è tuttora attivo.

Solitamente lo utilizzo in modalità Standalone, ovvero quella che non necessita d’installare un java-application-server come Tomcat. La modalità standalone può essere avviata direttamente da linea di comando (consiglio di utilizzare una versione di Java >= 6) e funziona anche su server IBMi (AS/400) sulla quale lo utilizzo abitualmente. L’unico file di cui avete bisogno in questa modalità è il JavaBridge.jar che potete trovare a questo link JavaBridge.jar

Parametri d’esecuzione

Di seguito riassumo alcune delle direttive utilizzate per ottimizzare il comportamento del JavaBridge, recuperate  dalla documentazione del progetto (che è davvero dettagliata!)

Specificare porta d’ascolto

INET        ->  Listens on all interfaces
INET_LOCAL  ->  Loopback only

HTTP
HTTP_LOCAL
HTTPS 
HTTPS_LOCAL 
    |
    -> Starts the built-in servlet engine listening on all interfaces or loopback

Direttiva indicata per sistemi senza server grafico attivo

-Djava.awt.headless=true 

Specificare il ClassPath

Ricordo che il path_separator (:) potrebbe dipendere dal sistema operativo in uso.

-Djava.ext.dirs=.:/usr/local/my_java_libs 

Limitare il numero di thread

-Dphp.java.bridge.threads=50 

Specificare un file di log differente

-Dphp.java.bridge.default_log_file="/tmp/jb.log"

Impostare il livello di logging

-Dphp.java.bridge.default_log_level=3

Livelli di logging possibili

0 : log off
1 : log fatal
2 : log messages/exceptions
3 : log verbose
4 : log debug
5 : log method invocations
6 : development info / debug

Comando compatto

Il seguente comando compatto permette di avviare il JB specificandone i parametri d’avvio
Porta & Logging

java - jar /usr/local/share/JavaBridge.jar HTTP_LOCAL:8080 5 /tmp/jb.log

Sottomissione in Background

Linux

Aggiungere la & alla fine del comando

java -Djava.awt.headless=true -Djava.ext.dirs=.:/usr/local/my_java_libs -Dphp.java.bridge.threads=50 -jar /usr/local/share/JavaBridge.jar HTTP_LOCAL:8080 5 /tmp/jb.log' &

IBMi

SBMJOB CMD(STRQSH CMD('java -Djava.awt.headless=true -Djava.ext.dirs=.:/usr/local/my_java_libs -Dphp.java.bridge.threads=50 -jar /usr/local/share/JavaBridge.jar HTTP_LOCAL:8080 5 /tmp/jb.log'))

Esempio di utilizzo dal PHP

<?php
    require_once("http://localhost:8080/JavaBridge/java/Java.inc");
    $System = java("java.lang.System");
    echo $System->getProperties();
?>

Conclusioni

Non è molto che ho migrato le installazioni PHP Server sul Java Bridge ‘alternativo’ ma devo dire che mi trovo molto bene.
Alcuni punti a favore rispetto a quello di Zend:

  • Documentazione Dettagliatissima e ricca di esempi.
  • Possibilità di abilitare il logging con vari livelli di profondità: il JavaBridge di Zend oltre a non riportare l’eccezione Java Completa non forniva (che io sappia!!) un modo per abilitare un log trace su file… facendomi perdere, in passato, ore e ore per cercare soluzioni a semplici problemi.
  • ClassPath comodissima la possibilità di specificare una o più cartelle dinamicamente dentro le quali mettere i file Jar o le classi che si vogliono utilizzare. Lo Zend Java Bridge costringe di specificarli uno ad uno in un file di configurazione watchdog-jb.ini

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>