l'intégration du php et java

3

Click here to load reader

Upload: dvdstory

Post on 07-Jun-2015

615 views

Category:

Documents


4 download

DESCRIPTION

PHP SOLUTIONS

TRANSCRIPT

Page 1: l'intégration du php et java

PHP et Java

L'intégration du PHP et JavaOffrir d'avantage d'ouverture et de compatibilité entre les langagesest un paramètre en constante évolution. Le renforcement de PHP 5 surle déploiementapplicatif et la portabilité deJava fontde ces langages deuxoutils puissants. ll n'est cependant pas forcément facile de faire interagiret homogénéiser ces deux langages lors de mise en place de webservicesouapplications.

Cet article explique:. Vous al lez voir comment ut i l iser Java et

PHP en uti l isant du XML-RPC et comment

interpréter du PHP comme une servlet. Vous

verrez également comment ut i l iser du code

Java dans du PHP.

Ce qu'i l faut savoir:. l l vous faudra connaît re le langage PHB le

langage Java et les Servlet. Vous aurez aussi

besoin d 'une bonne compréhension des

mécanismes sousjacents aux deux langages

et les not ions de base du langage XML et le

protocole HTTP.

dleware,soit en passant par un module ou pâr une

extension. Chacune de ces techniques a au niveau

d'intégration, des avantages et des inconvénients.

Intégration par middleware(XML.RPC}Pour certains, un middleware est un pro-

tocole de communication, pour d'autres

il est considéré comme un logiciel servant

d'intermédiaire entre d'autres logiciels. Géné-

ralement w middleware est utilisé en tant

qu'intermédiaire de communication entre des

applications complexes, distribuées sur un ré-

seau informatique. Il existe une pânoplie de

middlewares libres ou payants, faciles ou com-

plexes, les plus connus sont CORBA, DCOM,

SOAP et plus ou moins XML-RPC celui qu on

va utiliser pour notre intégration.

En réalité, nous ne pouvons pas parler

d'intégration âu sens large mais plutôt de

coopération, parce que les deux langages

vont uniquement échanger des données, par

analogie c'est un simple échange Client/Seruer

basé sur le protocole HTTP. Le client encode

Lf sting 1. Encodage XML de l'invocationd'une méthode

. :methodcal l >

<methodName>

sample . sumÀndDi f f erence

<r'methodName>

<params>

<param>

<va lue>

< i n t > 5 < / i n t >

<zrva lue>

<,i param>

<Param>

<value>

< 1 n t > 3 < / i n t >

</va lue>

</Param>

</params>

< /methodCall>

' [Iî,:x- | : ' l i r

Niveau de difficulté 1 -);i$l$

\ 3 , '

J nteropérabilité : nom feminin qui signifie

I la capacité de plusieurs systèmes, unités ou

I organismes dont les structures, les procédu-

res et les relations réceptives autorisent une aide

mutuelle qui les rend aptes à opérer de concert.

En informatique, I'interopérabilité c'est faire

face à une grande diversité de technologies dans

l'industrie (systèmes d'exploitation, réseaux

physiques et protocoles) elle doit nous permet-

tre, entre autre, d'intégrer des applications par

des tiers et aussi la coopération d'applications

sur des systèmes hétérogènes ou de technologies

differentes.L'interopérabilité, est un bien joli mot, mais

comment ça marche ? PHP est un langage de

script destiné principalement pour être inter-

prété par des serveurs web, apparu en 1997

sous le nom Personal Home Page Tools/ Form

Interpreter, utilisé par Rasmus Lerdorf son

créateur désirant conserver des traces des vi-

siteurs de son site. À I'origine c'était une bi-

bliothèque Perl transformée au fil du temps

en bibliothèque en C enrichie par plusieurs

fonctionnalités. Devenant par la suite PHP

Hypertext Preprocessor (acronyme récursifl

elle intègre une complète programmation

obiet et une gestion des erreurs basée sur les

exceptions. Alors que Java est un langage ob-

jet ressemblant au langage C++, il a vu le jour

en l99l dans les laboratoires de la firme Sun

Microsystems. Le langage fut baptisé dans un

premier temps Oak (chêne). Toutefois, puis-

que ce nom était deia utilise, il fut rebaptisé

Java en I'honneur de l'île Java où on produit

le cafe, la boisson préferée des programmeurs'

Le but de Java à l'époque était de constituer un

langage de programmation pouvant être inté-

gré dans les appareils électroménagers, afin de

pouvoir les contrôler, de les rendre interactifs,

et surtout de permettre une communication

entre les appareils. Étant donné que le langa-

ge C++ comportait trop de difficultés, James

Gosling un des acteurs du projet décida de

créer un langage orienté objet reprenant les

caractéristiques principales du C++, en élimi-

nant ses points difficiles, en le rendant moins

encombrant et plus portable.

Ces deux languages diffèrent au niveau de

leur interprétation mais se regroupent au niveau

structurel et organisationnel; ce qui leur permet

i:ïi::il:ii::,îï,'"ïHiîï'.'il:î:gies pour conserver des applications existantes

et surtout les applications ayant nécessiG un dê

veloppement et formant par là tn patrimoine,

pour réutiliser un code éprouvé tout en chan-

geant de technologie ou pou{, chose qui arrive

souvent au sein de certaines entreprises, rê

soudre des problèmes ponctuels lorsque l'on

n'a pas de budget ou de temps à y consacrer.

À ce jour nous disposons de trois façons pour

pouvoir le faire: soit par I'intermédiaire d'un mià-

Super PackT/2007 (12)

Page 2: l'intégration du php et java

les requêtes en format XML (Listing I ), in-

versement le serveur décode I'appel, invoque

la méthode, encode le résultat pour enfin le

transmettre au client. Par ailleurs, I'utilisa-

teur n'a pas besoin de coder les mécanismes

d'encodage ni les mécanismes d'échange,puisqu'il doit utiliser une implémentation

correspondante au langage de programma-

tion utilisé. La réalisation de cette intégra-

tion n'a pas besoin d'une mise en place par-

ticulière ou d'une installation au préalable,

il suffit de télécharger une implémentation

XML-RPC pour Java parmi les cinq disponi-

bles sur le site officiel et une implémentation

PHP parmi les neufs disponibles. Sachez que

vous pouvez en trouver d'autres, ou même en

Listlng 2. Serveur XML-RPC en lavo

/ /L' inplénentation XML-RPC

impor t o rg . apache. xml rpc .WebServer i

publ ie class JavaService {

/ / Méthode d is tan te

public int sum(int a, inÈ b) {

S y s t e m . o u t . p r i n t l n ( " C I i e n t r e q u e s t " ) , '

return a + b;

)pnb l ic s ta t i c vo id ma in(St r ing [ ] a rgs) {

/ / Ins tanc ia t ion d 'un serveur HTTP sur le por t 8090

9f ,ebServer server = new Webserver (8090) ;

/ / Publication du service distant sous Je non JService

server .addHand ler ( "JServ lce" , ner r tavaServ lce O ) ;

/ / Lacenent du serveur pour qu' i l accepte l .es connexlons

server . E tar t O ;

))

Lf stlng 3. Client XML-RPC en PHP<?phP

//L' inpJénentatlon XML-RPC pour PHPinclude ("xmlrpc.1nc" ) ;$server_port = 8090; // port du serveur HTTP

$server_root = uftt; // le dosster du aerveur ht.tp

9server_hogt = 'rlocalhosL'i //h6ta du servear H?TP

//Inetanciatton dtun obJet ellent )ML-RPÇ de Ia claçea xnlrpc_ellent

$cttent, = new xmlrpc_client ($eerver_rootr $gerver_host, $gerverSort) ;//Pour la débogaqe, très ut!Je pour obtentt daa lnfsrnaëlons rctaurnéaa par

/ / Je ae rveur , . ,

9c1lent->setDebug ( 1 ) ,//Instanclatlon dtun obJat neasage de la eleaEe xnlrpenag danE le buE

//de le transnettta au sêrvêur,//Le prenler paranêÊre eorreepond au nan da la néthode dtsten|â,

//le deuxlène âux argunents,

//Les paranètrec aonï dea obJata de la elaasa xnlrpeval qul eonporïant

//dcux proprlétéar la typa at Ja valeur,

$nessage = ner xmlrpcmsg(rr ,JServlc€.Eumt ' rarray(ner xnlrpcval( f Si l r ( lnÈi l ) 'new xmlrpcval ('10'r r tt lnttt) ) ) ;

/ftûéthoda du ellenE pour anvoyer la naEEaga au aetveuË

$reponae = $cllent->send($neggage) ;//Exploltattan dçe réEul9atE

$valeur = 9reponse->value() ;echo $valeur->scalarval O t

//AfflehaEe du réEuItaE? >

développer votre propre implémentation en

vous basant sur les spécifications du proto-

cole, si vous en avez le temps.Dans I'exemple suivant, nous montreront

comment utiliser l'implémentation Apachepour PHP et Useful Inc pour Java. Premiè

rement, vous allez voire comment mettre enplace un serveur en Java (Listing 2) qui aura la

charge de publier un service distant et un client

en PHP (Listing 3) capable d'invoquer les mê

thodes du précédent service.Notez que le contraire est vrai il est possible

d'inverser et mettre en place un serveur en PHP

et un client en Java.

PHP dans un environnementde ServletVous pouvez également intégrer PHP dans un

environnement de Servlet Java en s'appuyant

sur le module SAPI (speech Application Programminglnterface) qui s'interface avec un ser-

veur de Servlet. Cette interface est construite

sur un mécanisme défini par I'extension Java,qui permet à PHP d'être exécuté comme une

servlet.C'est une solution stable et efficace mais elle

opère dans un sens unique (PHP => Java). Se'

lon PHP, I'avantage immédiat de cette solution

est que les serveurs web, supportant les servletgèrent rigoureusement les machines virtuelles.

Or, nous estimons que cette gestion est du res-

sort du serveur. Si une aide lui est apportée il

sera d'autant plus performant.

La solution est très simple mais sa mise enplace n'est pas triviale pour les novices en la

matière. Vous devez disposer de I'extensionphpjaua.d//, le module php\serulet.dll et I'ar-

chive phpsruh.jar qu;i sont disponibles dans la

collection des extensions PECL (PHP Extension

Community Library) une bibliothèque regrou-pant plusieurs modules et extensions commeClibPDF (une extension qui vous permet decréer des documents PDF), FTP (une extensionqui implémente un client FTP), GeolP (une ex-

tension permettant de localiser la ville, l'état, lepays d'une adresse IP) et plein d'autres... No

tons que la version du PHP et PECL doit être

la même.La réalisation de cette solution nécessite

une configuration au préalable. Au niveau

du PHP il faut ajouter ou dé<ommenter la li-gne exÈension:php_java.d1l dans le f ichierphp.iniportr que PHP puisse charger I'extension

Java. Au niveau du moteur de servlet, Tomcatpar exemple, il faut copier I'archive phpsruh.jar

dans le répertoire lib qui se trouve dans le répertoire I4ZEB-INFun sous répertoire du projet

et ajouter la déclaration des Servlet (Listing 4)

au fichier web.xml le fichier descripteur de déploiement de l'application. Pour terminer; ajou-ter le chemin du répertoire PHP ou le répertoi-re où se trouve phpjaua.dll et phpîservlet.dll

dans la variable d'environnement PATH et redémarrer le svstème.

www.phpsolmag.org

Page 3: l'intégration du php et java

PHP et Java

Pour tester cette solution, créez un fichierPHP dans le répertoire de I'application conte-nant le code suivant : <zphp phpinfo ( ) ; ?>

Assurez-vous qu'il n'y a aucune erreur affi-chée. Au lieu de cela vous obtenez un écranavec I'information de PHP.

Java dans PHPCette solution est basée sur I'utilisation

d'une extension PECL qui vous permet,

dans un code PHP, d'intégrer du codeJava pour en invoquer et utiliser les classes afinde profiter des potentialités de la plate-forme

Java. À I'instar de la précédente solution celle-ciopère aussi dans un sens unique (Java => PHP)et nécessite une configuration au préalable.

Dans le fichier php.ini ajoutez ou dé<om-mentez la l igne extension=php_java.dlr, et

à la fin du fichier on ajoute les éléments deconfiguration de cette extension, on en énu-mère quatre :

. j a v a . c l a s s . p a t h = " C : \ p h p S \ e x t \ p h p _

j a v a . j a r ; c : \ f i b " ( l e o u l e s c h e m i n s

des répertoires ou se trouvent les classeset archives),

. j a v a . h o m e = " C : \ P r o g r a m F i f e s \ J a v a \ j d k 1 .

5.0 _ o6\bi.n" (lechemindu répertoireJava),

o i : r r : 1 i h r r r r r : r r f - . \ D r n n r : m É ' i l o c \ i ^ " ^J a v o . f f u ! o r - Y - v . \ r ! v Y r q r r r ! a f ç o \ J a v a

\ j d k 1 . 5 . 0 0 6 \ j r e \ b i n \ c l i e n t \ j v m . d l l "

(le chemin de la JVM),. j a v a . l i b r a r y . p a t h : " C : \ p h p S \ e x t " , ' [ l e o u

les chemins des répertoires des librairies).

Pour tester cette solution, il faut créer un fi-

chier contenant le code [Listing 5) qui permet

d'afficher I'ensemble des propriétés de la ma-

chine virtuelle. Il faut savoir que cette intégra-tion ne respecte pas totalement I'approche Java,ce qui peut être dans certains cas très gênant,par exemple :

. une fois qu'une méthode est sélectionnée, lesparamètres sont transtypés, avec une perte

d'information potentielle non négligeable,. les tables de hashage de PHP ne peuvent

être indexées qu'avec des entiers ou deschaînes, et que le type primitif tableau deJava ne peut comporter de trous dans les in-dex,

. les noms de méthodes ne sont pas sensi-bles à la casse, ce qui augmente le nombrede conflits potentiels,

. les valeurs sont passées par valeur, cequi peut être couteux en mémoire et entemps,

Listing 4. Les coractéristiques et paramètres de l'applicotion

otse rvLet,>.. se rvJ.et-nane >php < I servlet-name >

:serv le t -c lass >net . php . serv le t . : , j serv le t -c1ass >

': . ; 'servlet >

. :serv le t )

.: se rv l e t -name,,php- f o rna t t e r <. i's e rv l e t -n ame .'.

' . 'se rvlet-c Ias s >net . php . f ormatter <, 'serv1 et - c 1 a s s ).

,< . , / serv le t>

'rservLet-mapping )

. :servJ.et-name :,php < r 'servlet-name >

. :u r1-pa t te rn >* . php<, i u r l -pa t te rn>.:, , servf et-mapping :- '

<serv le t -mapp ing >

r s e rvl. e t - name >php - f o rma t te r <.i se rvl e t - name >

, :u r I -pa t te rn >* . phps < r 'u r1 -pa t te rn >

.: z 'servlet-mapping>

Listing 5. Les coractéristiques et paramèÛes de l'application

' . . ' ,php / /Déclarat ion des varjables

9 s y s t e m = n e w J a v a ( " j a v a . I a n g . S y s t e m " ) ;

$ p r o p s = n e w J a v a ( " j a v a . u t i l . P r o p e r t i e s " ) ;

$ e n u m = n e n J a v a ( " j a v a . u t i l . E n u m e r a t i o n " ) ;

$ n a m e = n e w J a v a ( " j a v a . l a n g . S t r i n g " ) ;

$ v a l u e = n e w J a v a ( " j a v a . I a n g . S t r i n g " ) ;

/ / Récupération de tous Jes propriétés de la JW

$props = $sys tem- ; 'ge tProper t ies O ;

$enum = $props-.tpropertyNames O ;

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->nextE lement ( ) ;

/ / récupere fa va leur 7a propr ie te

$vaIue = Sprops->get ($name) , '

e c h o $ n a m e . t = t . $ v a l u e . | < b r > ' ;

. les exceptions sont transformées en alertesPHP, et le résultat devient NULL.

PHP/Java - BridgeLes deux dernières solutions, présentent unegrande capacité d'intégration pour que cha-cune des deux technologies profite des atouGde I'autre. Toutefois les deux utilisent une ex-tension expérimentale qui tend à devenir obso-lète. Cecidit I'extension peut disparaître maisle désir d'intégrer PHP et Java reste. En 2OO4,le module PHP/laua bridge à vu le jour pourremplacer I'extension expérimentale, c'est unprotocole réseau optimisé basé sur )G4L réputépour être 50 fois plus rapide qu'un middbwareet plus fiable qu'une communication par I'inter-médiaire de JNI (JauaNatiue lnterfacà une inter-face qui permet d'étendre Java avec du code écriten C ou C++. L'utilisation de ce module commesolution d'intégration nous permet de parler

d'une réelle intégration parce que nous pouvons

oçÉrer dans les deux sens voir même de partager

des données et gérer des sessions en commun.Enfin, sachez que son utilisation a augmenté aucours de I'année 2006, ce malgré un comporte-ment plus ou mois gênant qui se résume dans lefait qu'il est difficile de répartir la charge généréepar les appels Java qui s'exécutent sur la mêmemachine que PHP en cas de plantage. De plus, cesprocessus lancés via la JVM ont les mêmes limi-

tations que les scripts PHP en terme de mémoireeVou en temps d'exécution. [a mise en place decette solution, ne nécessite pas trop de gymnas-

tique, nous trouvons dans I'archive du projet, unfichier JauaBridge.war prêt à être déploye, des co-des sources qui permettent de tester la solutionet une documentation complète et précise pour

I'installation.

ConclusionCet article vous a présenté d'une manière gé

nérale les differentes façons d'intégrer les deux

technologies PHP et Java. Ce qui va vous ouvrir

des nouvelles perspectives et vous fournir des

possibilités pour augmenter les performances

de vos applications et pouvoir les étendre. En

outre, les problèmes liés à I'intégration au niveau

général de la configuration et au niveau des con-

tradictions entre les langues n'ont pas été abor-

dés. Pour conclure, sachez que comme tout lan-

gage de réseau, I'intégration nécessite une bonne

compréhension des mécanismes sous-jacents

aux deux langages. Il faut également avoir un re.

gard plus poussé sur la sécurité, les services opê

rant et communiquant entre eux, cela peut faire

apparaître de nouvelles failles.

MÂAMOUN BERNICHIMôamoun Bernichi est un ingénieur en systè-mes distribués. ll prépare actuellement une thèseà I'université Paris Xll, son sujet porte sur la sécu-rité informatique basée sur des agents mobiles.En parallèle, il trovaille au sein d'un grand grou-pe de mutuelle françoise en tont qu'ingénieur endéveloppement.

Super PackT/2007 (12)