La brique Open Source [PHP-Java-Bridge->http://php-java-bridge.sourceforge.net/] permet (entre autres possibilités) d’appeler nativement une classe Java depuis une application PHP[[Il existe déjà un module expérimental pour PHP mais il semble peu développé et a un fonctionnement très aléatoire]]. Cette extension vous permet alors de connecter des scripts PHP natifs avec une instance Java persistante.
Le but de PHP-Java-Bridge est de permettre a des programmeurs PHP d’utiliser des applications externes écrites en Java disposant simplement d’une API.
Contrairement à l’extension Java de PHP qui reste expérimentale, PHP-Java-Bridge peut tout à fait être implémenté en environnement de production sous certaines conditions (que nous verrons plus loin).
Voici un retour d’utilisation concrète de cette brique.
Besoins
Il nous fallait interfacer une application de gestion PHP à la brique Open Source FOP . Nous disposions en entrée d’un fichier fo, l’objectif était d’en obtenir le PDF résultant. Utiliser FOP, un projet open source Java existant, était le moyen le plus simple de parvenir au résultat.
Mise en oeuvre
Une fois php-java-bridge compilé, il faut simplement ajouter l’extension à votre fichier de configuration php et redémarrer le serveur.
Vous pouvez maintenant faire des appels de ce type :
java_require('file:lib/xmlgraphics-commons-1.0.jar', 'file:build/fop.jar') ;
$fop_factory = new JavaClass('org.apache.fop.apps.FopFactory') ;
$fop_factory = $fop_factory->newInstance() ;
Un exemple d’utilisation plus complet est disponible sur le site de FOP.
On dispose maintenant d’un objet PHP que l’on peut utiliser de manière équivalente à celle décrite dans la documentation de FOP. Par exemple, instancier un user agent, qui nous permettra d’indiquer la résolution cible de notre PDF.
$fop_factory = $fop_factory->newInstance() ;
$fop_ua->setTargetResolution(300) ;
PHP-Java-bridge offre une manière rapide pour le programmeur PHP d’utiliser une classe Java.
En outre, l’utilisation de cette extension permet de récupérer les exceptions lancées par Java et ainsi d’intégrer l’exécution des librairies au mécanisme de gestion des erreurs de l’application PHP.
Limitations
Architecture
Les processus Java sont forcément lancés sur la machine où PHP s’exécute. Si le plantage d’un appel Java n’arrête pas PHP, il est compliqué de répartir la charge générée par cet appel.
Bogues ou comportements gênants
Les processus lancés via la JVM rattachée à PHP ont les mêmes limitations que les scripts PHP en eux même (mémoire et temps d’exécution). Il faut donc souvent modifier ces limites dans le script PHP avant de faire appel à java.
Lors de nos tests nous n’avons pas réussi à faire swapper un processus lancé via PHP-Java-bridge ; ce dernier était systématiquement tué. Cela peut poser un problème lors d’une mise en oeuvre sur un serveur fortement sollicité.
Perspectives
PHP-Java-bridge est un moyen simple de faire communiquer PHP et Java. Il est notamment à envisager si on veut réutiliser facilement du code Java existant.
On peut imaginer une situation ou l’on dispose, par exemple, déjà de composants Java archi-testés et dans lesquels vous avez toute confiance pour accéder aux données de votre SI. Si on désire utiliser les possibilités importantes de PHP (notamment au niveau de création d’IHM) tout en conservant ces composants, PHP-Java-bridge peut être une solution intéressante.
Toutefois, pour de gros besoins en terme de performance ou de fiabilité, il est préférable de s’orienter vers une solution de couplage lâche de type webservices.
Ben
6 décembre 2012
php / java bridge m’a été très utile pour accéder à différents SGBD (DB2, Oracle, Sybase, Datacom, Sql server… ) via JDBC
car autrement c’est impossible
mais je n’ai toujousr pas trouvé comment capter SQLexception
ce qui marche pour le moment c’est catch exception