Intégration Java / PHP

Cette page a été rédigée il y a fort fort longtemps, et n'a pas tellement été mise à jour.

 

Vous savez, moi je ne crois pas qu'il y ait de bonne ou de mauvaise page. Moi, si je devais résumer mon wiki aujourd'hui avec vous, je dirais que c'est d'abord des rencontres. Des gens qui m'ont tendu la main, peut-être à un moment où je ne pouvais pas, où j'étais seul chez moi. Et c'est assez curieux de se dire que les hasards, les rencontres forgent une destinée... Parce que quand on a le goût de la chose, quand on a le goût de la chose bien faite, le beau geste, parfois on ne trouve pas l'interlocuteur en face je dirais, le miroir qui vous aide à avancer. Alors ça n'est pas mon cas, comme je disais là, puisque moi au contraire, j'ai pu ; et je dis merci au wiki, je lui dis merci, je chante le wiki, je danse le wiki... je ne suis qu'amour ! Et finalement, quand des gens me disent « Mais comment fais-tu pour avoir cette humanité ? », je leur réponds très simplement que c'est ce goût de l'amour, ce goût donc qui m'a poussé aujourd'hui à entreprendre une construction logicielle... mais demain qui sait ? Peut-être simplement à me mettre au service de la communauté, à faire le don, le don de soi.

Quelles sont les solutions pour mettre en place une intégration entre PHP et Java ?

Ces notes ont servi de base pour la rédaction d’un article paru le numéro 6/2008 de PHP Solutions de novembre 2008.

Objectif d’intégration

Pourquoi vouloir intégrer Java et PHP ?

Intégrer un progiciel

Pour intégrer un progiciel écrit en PHP dans un environnement Java, il faut développer des modules dans un langage, capables d’interagir avec l’autre langage.

Fusionner deux systèmes d’information

Lors de la fusion de 2 sociétés, un système d’information peut être choisi au dépend de l’autre, ou les deux systèmes peuvent être fusionnés. Dans ce cas, il est peut probable que les langages choisis initialement soit les mêmes. Il faut donc mettre en place des modules d’intégration capable de s’adresser aux logiciels, quels que soient leurs langages.

Application multi-langages

Les progrès des techniques d’interopérabilité permettent aujourd’hui de concevoir des architectures multi-langages dont l’objectif n’est plus d’intégrer un existant, mais d’exploiter chaque langage pour ce à quoi il est le plus apte :

  • PHP pour les pages Web

  • Java pour les couches métier (avec Spring ou EJB) et pour la persistence (avec JPA ou Hibernate)

PhpJavaCouche.png

Solutions

WebService : SOAP et REST

Les solutions à base de Services Web sont adaptées à la plupart des langages modernes : PHP, Java, C# et .NET, C++,…​ Elles sont souvent utilisées dans les architectures orientée services (SOA).

SOAP est le protocole standard pour ce type de solution. REST est une altenative moins standard, mais plus simple.

PhpJavaSoap.png

Pont Java-PHP

La communication entre Java et PHP s’appuie partiellement sur les mêmes techniques que pour les Web Services : HTTP et XML. Par contre, les flux XML sont plus compacts et une partie des communications passe par des sockets de plus bas niveau.

Il existe deux solutions sur le marché :

  • celle de Zend Technologies, vendue sous licence commerciale avec le Zend Platform ES,

  • PHP/Java Bridge, une solution open source, sous licence LGPL, hébergée sur la plate-forme SourceForge.net

PhpJavaBridge.png

Intégration in-process

Plutôt que d’établir un pont entre deux processus, l’intégration in-process permet d’embarquer du PHP dans une machine virtuelle Java. En fait, le moteur PHP traditionnel est remplacé par un moteur écrit en Java.

Il existe deux solutions sur le marché :

  • Caucho Quercus est un moteur PHP5 développé en Java et distribué sous licence GPL.

  • Project Zero, le projet open source initié par IBM, et qui sert de base aux développements de WebSphere sMash, propose des fonctionnalités du même type.

PhpJavaQuercus.png

Quel choix ?

  • Services : environnements multi-langages, avec des besoins d’intégration importants et architectures orientées services

  • Pont : appels simples de classes Java depuis des pages PHP, dans le cadre de développements d’applications mixtes ou de modules d’intégration en PHP

  • In-process : applications mixtes PHP / Java, mais manque de recul sur la solution