Вы находитесь на странице: 1из 3

PHPet Java

L'intégrationdu PHPet Java


Offrir d'avantage d'ouvertureet de compatibilitéentre les langages
estun paramètre en constante évolution.Lerenforcement de PHP5 sur
ledéploiementapplicatif et laportabilité
deJavafontdeceslangages deux
outilspuissants.
ll n'estcependant pasforcément facilede faireinteragir
et homogénéiser cesdeuxlangages lorsde miseen placedewebservices
ouapplications.

dleware,soit en passantpar un module ou pâr une


Cetarticleexplique: Cequ'ilfaut savoir: extension. Chacune de cestechniques a au niveau
. Vous allez voir comment utiliserJava et . ll vous faudra connaître le langage PHB le d'intégration, des avantageset des inconvénients.
PHPen utilisantdu XML-RPC et comment langage Java et les Servlet.Vous aurez aussi
interpréterdu PHPcommeune servlet.Vous besoin d'une bonne compréhension des Intégrationpar middleware
verrezégalementcommentutiliserdu code m é c a n i s m e ss o u s j a c e n t sa u x d e u x l a n g a g e s (XML.RPC}
Javadansdu PHP. et les notions de basedu langageXML et le Pour certains, un middleware est un pro-
protocole HTTP. tocole de communication, pour d'autres
il est considéré comme un logiciel servant
d'intermédiaireentre d'autreslogiciels.Géné-
jet ressemblantau langageC++, il a vu le jour ralement w middleware est utilisé en tant
' [Iî,:x qu'intermédiairede communicationentre des
en l99l dans les laboratoiresde la firme Sun
1- |-);i$l$
:'lir

Niveaude difficulté Microsystems.Le langagefut baptisédans un applicationscomplexes,distribuéessur un ré-


premier temps Oak (chêne).Toutefois,puis- seau informatique. Il existe une pânoplie de
\ 3 ,' middlewareslibres ou payants,facilesou com-
que ce nom était deia utilise, il fut rebaptisé
Javaen I'honneur de l'île Javaoù on produit plexes,les plus connus sont CORBA, DCOM,
nteropérabilité: nom feminin qui signifie le cafe,la boissonpréferéedesprogrammeurs' SOAPet plus ou moins XML-RPC celui qu on
J
systèmes, unités ou Le but de Javaà l'époqueétait de constituerun va utiliser pour notre intégration.
I la capacitéde plusieurs
I organismesdont lesstructures, les procédu- langage de programmation pouvant être inté- En réalité, nous ne pouvons pas parler
reset les relationsréceptivesautorisent une aide gré danslesappareilsélectroménagers, afin de d'intégration âu sens large mais plutôt de
mutuelle qui les rend aptesà opérer de concert. pouvoir les contrôler, de les rendre interactifs, coopération, parce que les deux langages
En informatique, I'interopérabilité c'est faire et surtout de permettre une communication vont uniquement échangerdes données,par
faceà une grandediversité de technologiesdans entre les appareils.Étant donné que le langa- analogiec'estun simple échangeClient/Seruer
l'industrie (systèmes d'exploitation, réseaux ge C++ comportait trop de difficultés, James basésur le protocole HTTP. Le client encode
physiqueset protocoles)elle doit nous permet- Gosling un des acteurs du projet décida de
tre, entre autre, d'intégrerdes applicationspar créer un langageorienté objet reprenant les Lfsting 1. EncodageXMLde l'invocation
des tiers et aussila coopérationd'applications caractéristiques principalesdu C++, en élimi- d'uneméthode
sur dessystèmeshétérogènesou de technologies nant sespoints difficiles, en le rendant moins
.:methodcal l >
differentes. encombrantet plus portable.
<methodName>
L'interopérabilité,estun bien joli mot, mais Ces deux languagesdiffèrent au niveau de
sample . sumÀndDif f erence
comment ça marche? PHP est un langage de leur interprétation mais seregroupentau niveau <r'methodName>
script destiné principalement pour être inter- structurel et organisationnel;ce qui leur permet <params>
prété par des serveursweb, apparu en 1997
sous le nom PersonalHome PageTools/Form i:ïi::il:ii::,îï,'"ïHiîï'.'il:î: <param>
<value>
<int>5</ int>
Interpreter,utilisé par Rasmus Lerdorf son gies pour conserverdes applications existantes
<zrvalue>
créateur désirant conserverdes traces des vi- et surtout les applicationsayant nécessiGun dê
<,iparam>
siteurs de son site. À I'origine c'était une bi- veloppement et formant par là tn patrimoine, <Param>
bliothèque Perl transformée au fil du temps pour réutiliser un code éprouvé tout en chan- <value>
en bibliothèque en C enrichie par plusieurs geant de technologie ou pou{, chose qui arrive < 1 n t > 3< / i n t >
fonctionnalités. Devenant par la suite PHP souvent au sein de certaines entreprises, rê </value>
Hypertext Preprocessor(acronyme récursifl soudre des problèmes ponctuels lorsque l'on </Param>

elle intègre une complète programmation n'a pas de budget ou de temps à y consacrer. </params>
< /methodCall>
obiet et une gestion des erreurs baséesur les À ce jour nous disposonsde trois façons pour
exceptions.Alors que Javaest un langageob- pouvoir le faire: soit par I'intermédiaire d'un mià-

SuperPackT/2007(12)
les requêtesen format XML (Listing I ), in- tion utilisé. La réalisation de cette intégra- développer votre propre implémentation en
versementle serveurdécodeI'appel,invoque tion n'a pas besoin d'une mise en place par- vous basant sur les spécifications du proto-
la méthode, encodele résultat pour enfin le ticulière ou d'une installation au préalable, cole, si vous en avezle temps.
transmettre au client. Par ailleurs, I'utilisa- il suffit de téléchargerune implémentation Dans I'exemple suivant, nous montreront
teur n'a pas besoin de coder les mécanismes XML-RPC pour Javaparmi les cinq disponi- comment utiliser l'implémentation Apache
d'encodage ni les mécanismes d'échange, bles sur le site officiel et une implémentation pour PHP et Useful Inc pour Java. Premiè
puisqu'il doit utiliser une implémentation PHP parmi les neufs disponibles.Sachezque rement, vous allez voire comment mettre en
correspondanteau langagede programma- vous pouvezen trouver d'autres,ou même en placeun serveuren Java(Listing 2) qui aura la
chargede publier un servicedistant et un client
en PHP (Listing 3) capabled'invoquer les mê
thodesdu précédentservice.
Notez que le contraire est vrai il est possible
d'inverseret mettre en placeun serveuren PHP
et un client en Java.

PHPdansun environnement
de Servlet
Vous pouvez égalementintégrer PHP dans un
environnement de Servlet Javaen s'appuyant
sur le module SAPI (speechApplication Pro
gramminglnterface)qui s'interfaceavecun ser-
veur de Servlet.Cette interface est construite
Listlng 2. ServeurXML-RPC
enlavo sur un mécanismedéfini par I'extensionJava,
qui permet à PHP d'être exécutécomme une
/ /L' inplénentation XML-RPC servlet.
import org. apache.xmlrpc.WebServeri C'est une solution stableet efficacemais elle
publie class JavaService {
opère dans un sensunique (PHP => Java).Se'
// Méthode distante
lon PHP,I'avantageimmédiat de cette solution
public int sum(int a, inÈ b) {
System.out.println ("CIient request" ),'
est que les serveursweb, supportant les servlet
return a + b; gèrentrigoureusementles machinesvirtuelles.
) Or, nous estimons que cette gestion est du res-
pnblic static void main(String[] args) { sort du serveur.Si une aide lui est apportée il
// Instanciation d'un serveur HTTP sur le port 8090 serad'autant plus performant.
9 f , e b S e r v e rs e r v e r = new Webserver(8090);
La solution est très simple mais sa mise en
// Publication du service distant sous Je non JService
place n'est pas triviale pour les novicesen la
server.addHandler ("JServlce", ner rtavaServlce O );
pour qu'il accepte l.es connexlons
matière. Vous devez disposer de I'extension
// Lacenent du serveur
server. Etart O ;
phpjaua.d//, le module php\serulet.dll et I'ar-
) chive phpsruh.jar qu;i sont disponibles dans la
) collection desextensionsPECL (PHPExtension
CommunityLibrary) une bibliothèque regrou-
en PHP
Lfstlng 3. ClientXML-RPC pant plusieurs modules et extensionscomme
<?phP
ClibPDF (une extension qui vous permet de
//L' inpJénentatlon XML-RPC pour PHP
i n c l u d e ( " x m l r p c . 1 n c ") ;
créerdesdocumentsPDF), FTP (une extension
$server_port = 8090; // port du serveur HTTP
qui implémente un client FTP), GeolP(une ex-
$server_root = uftt; //le dosster du aerveur ht.tp tension permettant de localiserla ville, l'état, le
9server_hogt = 'rlocalhosL'i //h6ta du servear H?TP pays d'une adresseIP) et plein d'autres...No
//Inetanciatton dtun obJet ellent )ML-RPÇde Ia claçea xnlrpc_ellent tons que la version du PHP et PECL doit être
$cttent, = new xmlrpc_client ($eerver_rootr $gerver_host,$gerverSort) ; la même.
//Pour la débogaqe, très ut!Je pour obtentt daa lnfsrnaëlons rctaurnéaa par
La réalisation de cette solution nécessite
//Je aerveur,.,
une configuration au préalable. Au niveau
9 c 1 l e n t - > s e t D e b u(g1 ) ,
du PHP il faut ajouter ou dé<ommenter la li-
//Instanclatlon dtun obJat neasagede la eleaEe xnlrpenag danE le buE
//de le transnettta au sêrvêur, gne exÈension:php_java.d1ldans le fichier
//Le prenler paranêÊre eorreepondau nan da la néthode dtsten|â, php.iniportr que PHP puissechargerI'extension
//le deuxlène âux argunents, Java.Au niveau du moteur de servlet, Tomcat
//Les paranètrec aonï dea obJata de la elaasa xnlrpeval qul eonporïant par exemple, il faut copier I'archivephpsruh.jar
//dcux proprlétéar la typa at Ja valeur, dans le répertoire lib qui se trouve dans le ré
$ n e s s a g e= n e r x m l r p c m s g ( r r , J S e r v l c € . E u m t ' r a r r a y (xnnel r p c v a l ( f S i l r ( l n È i l ) '
pertoire I4ZEB-INFunsousrépertoire du projet
new xmlrpcval ('10'rr ttlnttt) ) ) ;
et ajouter la déclaration des Servlet (Listing 4)
/ftûéthoda du ellenE pour anvoyer la naEEagaau aetveuË
$reponae = $cllent->send($neggage); au fichier web.xmlle fichier descripteurde dé
//Exploltattan dçe réEul9atE ploiement de l'application.Pourterminer; ajou-
$valeur = 9reponse->value(); ter le chemin du répertoire PHP ou le répertoi-
echo $valeur->scalarval O t re où se trouve phpjaua.dll et phpîservlet.dll
//AfflehaEe du réEuItaE dans la variable d'environnement PATH et re
?>
démarrer le svstème.

www.phpsolmag.org
PHPet Java

Pour tester cette solution, créez un fichier o i:rr:


Javo.f
1 if hu r! ror rr -r Y
: r -r f - . \ vD. r n\ nr r! :vmY r q r r r !Éa' if çl oo c\ \J i a^ v" ^a . lesexceptionssont transforméesen alertes
PHP dans le répertoire de I'application conte- \jdk1.5.0 06\jre\bin\client\jvm.dll" PHP,et le résultat devient NULL.
nant le codesuivant: <zphpphpinfo() ; ?> (le chemin de la JVM),
Assurez-vousqu'il n'y a aucune erreur affi- . java.library.path:"C:\phpS\ext",' [le ou PHP/Java- Bridge
chée. Au lieu de cela vous obtenez un écran lescheminsdesrépertoiresdeslibrairies). Les deux dernières solutions, présentent une
avecI'information de PHP. grande capacité d'intégration pour que cha-
Pour tester cette solution, il faut créer un fi- cune des deux technologiesprofite des atouG
Java dans PHP chier contenant le code [Listing 5) qui permet de I'autre. Toutefois les deux utilisent une ex-
Cette solution est basée sur I'utilisation d'afficher I'ensembledes propriétés de la ma- tension expérimentalequi tend à devenir obso-
d'une extension PECL qui vous permet, chine virtuelle. Il faut savoirque cette intégra- lète. Cecidit I'extension peut disparaître mais
dans un code PHP, d'intégrer du code tion ne respectepastotalement I'approcheJava, le désir d'intégrer PHP et Javareste. En 2OO4,
Javapour en invoqueret utiliser les classesafin ce qui peut être dans certains cas très gênant, le module PHP/laua bridge à vu le jour pour
de profiter des potentialités de la plate-forme par exemple: remplacer I'extension expérimentale, c'est un
Java.À I'instar de la précédentesolution celle-ci protocole réseauoptimisé basésur )G4L réputé
opèreaussidansun sensunique (Java=> PHP) . une fois qu'une méthode est sélectionnée,les pour être 50 fois plus rapide qu'un middbware
et nécessiteune configuration au préalable. paramètressont transtypés, avecune perte et plus fiable qu'une communication par I'inter-
Dans le fichier php.ini ajoutez ou dé<om- d'information potentielle non négligeable, médiaire de JNI (JauaNatiuelnterfacà une inter-
mentez la ligne extension=php_java.dlr,et . les tables de hashagede PHP ne peuvent face qui permet d'étendre Javaavecdu code écrit
à la fin du fichier on ajoute les éléments de être indexées qu'avec des entiers ou des en C ou C++. L'utilisationde ce module comme
configuration de cette extension, on en énu- chaînes,et que le type primitif tableaude solution d'intégration nous permet de parler
mère quatre : Javane peut comporter de trous danslesin- d'une réelle intégration parceque nous pouvons
dex, oçÉrerdans lesdeux sensvoir même de partager
. java.class.path = "C:\phpS\ext\php _
. les noms de méthodes ne sont pas sensi- des donnéeset gérer des sessionsen commun.
java.jar;c:\fib" (le ou les chemins bles à la casse,ce qui augmentele nombre Enfin, sachezque son utilisation a augmentéau
des répertoires ou se trouvent les classes de conflits potentiels, cours de I'année 2006, ce malgré un comporte-
et archives), . les valeurs sont passéespar valeur, ce ment plus ou mois gênantqui serésumedansle
. java.home="C:\Program Fifes\Java\jdk1. qui peut être couteux en mémoire et en fait qu'il est difficile de répartir la chargegénérée
5.0 _ o6\bi.n" (lechemindu répertoireJava), temps, par les appelsJavaqui s'exécutentsur la même
machineque PHP en casde plantage.De plus,ces
et paramètresde l'applicotion
Listing 4. Lescoractéristiques processuslancésvia la JVM ont les mêmeslimi-
tations que lesscriptsPHP en terme de mémoire
otservLet,> eVou en temps d'exécution.[a mise en placede
..se rvJ.et-nane >php< I servlet-name > cette solution, ne nécessitepas trop de gymnas-
:servlet-class >net .php . servlet.:,j servlet-c1ass >
tique, nous trouvons dans I'archivedu projet, un
':.;'servlet >
fichier JauaBridge.warprêt à être déploye,des co-
.:servlet )
.:se rv l e t -name,,php- f o rna t t e r <.i's e rv l e t -n ame.'.
des sourcesqui permettent de tester la solution
'.'servlet-c Ias s >net . php . f ormatter <,'serv1 et - c 1 a s s ). et une documentation complète et précisepour
,<.,/servlet> I'installation.
'rservLet-mapping )
.:servJ.et-name:,php< r'servlet-name > Conclusion
. : u r 1 - p a t t e r n > * . p h p < , iu r l - p a t t e r n >
Cet article vous a présenté d'une manière gé
.:,,servf et-mapping :-'
nérale les differentes façons d'intégrer les deux
<servlet-mapping >
technologies PHP et Java. Ce qui va vous ouvrir
r s e rvl. e t - name>php- f o rmat te r <.i se rvl e t - name>
, : u r I - p a t t e r n > * . p h p s<r ' u r 1 - p a t t e r n > des nouvelles perspectives et vous fournir des
.:z'servlet-mapping> possibilités pour augmenter les performances
de vos applications et pouvoir les étendre. En
et paramèÛesde l'application
Listing 5. Lescoractéristiques outre, les problèmes liés à I'intégration au niveau
général de la configuration et au niveau des con-
'..',php / /Déclaration des varjables
tradictions entre les langues n'ont pas été abor-
9system = new Java ("java.Iang.System");
dés. Pour conclure, sachez que comme tout lan-
$props = new Java ("java.util.Properties") ;
gage de réseau, I'intégration nécessite une bonne
$enum= nen Java ("java.util.Enumeration") ;
$name= new Java ("java.lang.String" ); compréhension des mécanismes sous-jacents
$value = new Java("java.Iang.String" ) ; aux deux langages. Il faut également avoir un re.
// Récupération de tous Jes propriétés de la JW gard plus poussé sur la sécurité, les services opê
$props = $system-;'getProperties O ; rant et communiquant entre eux, cela peut faire
$enum = $props-.tpropertyNames O ;
apparaître de nouvelles failles.
f o r ( ; $ e n u m - > h a s M o r e E l e m e n t s ;( )) i
// récupere l-e non de la propriete
$name = $enum->nextElement() ;
MÂAMOUNBERNICHI
// récupere fa valeur 7a propriete
Môamoun Bernichi est un ingénieur en systè-
mesdistribués.ll prépareactuellementune thèse
$ v a I u e = S p r o p s - > g e t ( $ n a m e ), '
e c h o $ n a m e .t = t . $ v a l u e . | < b r > ' ;
à I'universitéParisXll, sonsujetporte sur la sécu-
rité informatiquebaséesur des agents mobiles.
En parallèle,il trovailleau seind'un grand grou-
pe de mutuellefrançoiseen tont qu'ingénieuren
développement.

(12)
SuperPackT/2007