// Vous lisez...

PHP

Interroger une API Java à travers PHP/JavaBridge

Interroger l’API de PSNext éditée par Sciforma

PHP/JavaBridge est une interface permettant de faire communiquer PHP avec une machine virtuelle Java.

 Pré-requis

PHP5 et une version récente de Java :

  1. ashorlivs:webapps ashorlivs$ java -version
  2. java version "1.6.0_29"
  3. Java(TM) SE Runtime Environment (build 1.6.0_29-b11-402-10M3527)
  4. Java HotSpot(TM) 64-Bit Server VM (build 20.4-b02-402, mixed mode)

 Installation de Tomcat 7

La procédure pour OS X est décrite par Wolf Paulus sur son blog. Le but étant de pouvoir accéder au manager de Tomcat :

 Enregistrement du brige

Il suffit de placer JavaBridge.war dans la liste des webapps du manager. On peut ensuite y accéder par http://localhost:8080/JavaBridge/

 Incorporation de l’API PSNext

PSNext est un logiciel de gestion de projet dont l’éditeur Sciforma a eu la bonne idée de proposer une API.

Cette manipulation est sensée fonctionner quelle que soit votre appli, temps que vous possédez un .jar

La solution que j’ai trouvée consiste à reconstruire le .war et à l’utiliser comme application.
- Se rendre dans le dossier des webapps de Tomcat. Dans notre install il s’agit de /usr/local/apache-tomcat-7.0.16/webapps
- L’appli JavaBridge est visible sous forme de .war (celui que l’on a uploadé tout à l’heure dans le manager) mais pendant son exécution le dossier est également décompressé cd JavaBridge/
- On place les librairies de l’API PSNext dans le sous-dossier WEB-INF/lib

  • PSClient.jar
  • PSClient_en.jar
  • utilities.jar
    - Et on recréer le .war (avec un autre nom pour ne pas confondre) :
  1. ashorlivs:JavaBridgeTemplate621 ashorlivs$ sudo jar -cvf PSNext.war *
  2. Password:
  3. manifest ajout?
  4. ajout : WEB-INF/ (entr?e = 0) (sortie = 0) (0% stock?)
  5. ajout : WEB-INF/cgi/ (entr?e = 0) (sortie = 0) (0% stock?)
  6. ajout : WEB-INF/cgi/x86_64-mac/ (entr?e = 0) (sortie = 0) (0% stock?)
  7. ajout : WEB-INF/cgi/x86_64-mac/conf.d/ (entr?e = 0) (sortie = 0) (0% stock?)
  8. ajout : WEB-INF/cgi/x86_64-mac/ext/ (entr?e = 0) (sortie = 0) (0% stock?)
  9. ajout : WEB-INF/cgi/x86_64-mac/launcher.sh (entr?e = 109) (sortie = 94) (13% compress?s)
  10. ajout : WEB-INF/cgi/x86_64-mac/php-cgi.MISSING.README.txt (entr?e = 76) (sortie = 69) (9% compress?s)
  11. ajout : WEB-INF/lib/ (entr?e = 0) (sortie = 0) (0% stock?)
  12. ajout : WEB-INF/lib/JavaBridge.jar (entr?e = 436954) (sortie = 414520) (5% compress?s)
  13. ajout : WEB-INF/lib/php-script.jar (entr?e = 58673) (sortie = 52504) (10% compress?s)
  14. ajout : WEB-INF/lib/php-servlet.jar (entr?e = 58252) (sortie = 54164) (7% compress?s)
  15. ajout : WEB-INF/lib/PSClient.jar (entr?e = 16954308) (sortie = 14660791) (13% compress?s)
  16. ajout : WEB-INF/lib/PSClient_en.jar (entr?e = 943325) (sortie = 789581) (16% compress?s)
  17. ajout : WEB-INF/lib/utilities.jar (entr?e = 3157382) (sortie = 2824147) (10% compress?s)
  18. ajout : WEB-INF/pear/ (entr?e = 0) (sortie = 0) (0% stock?)
  19. ajout : WEB-INF/web.xml (entr?e = 1779) (sortie = 623) (64% compress?s)
  20. ajout : WEB-INF/weblogic.xml (entr?e = 239) (sortie = 150) (37% compress?s)
  21. ajout : index.php (entr?e = 3871) (sortie = 1450) (62% compress?s)
  22. ajout : java/ (entr?e = 0) (sortie = 0) (0% stock?)
  23. ajout : java/Java.inc (entr?e = 62439) (sortie = 13636) (78% compress?s)
  24. ajout : java/JavaProxy.php (entr?e = 613) (sortie = 354) (42% compress?s)
  25. ajout : test.php (entr?e = 19) (sortie = 19) (0% compress?s)
  26. ashorlivs:JavaBridgeTemplate621 ashorlivs$ ls
  27. ashorlivs:JavaBridgeTemplate621 ashorlivs$ cd ../
  28. ashorlivs:webapps ashorlivs$ ls
  29. PSNext          PSNext.war      ROOT            docs            examples        host-manager    manager

À l’arrivée, un .war à placer dans le manager de Tomcat et à l’utiliser en lieu de place de JavaBridge.war.

 La connexion avec PHP

Il vous faudra créer un vhost. Dans un fichier .php, essayez :

  1. require_once("http://localhost:8080/PSNext/java/Java.inc");
  2. $System = java("java.lang.System");
  3. print_r($System->getProperties());

Si tout va bien, pas d’erreur et un beau et long var dump à lire.

 Les services de l’API PSNext

Cette partie est en cours de rédaction, et sera mise à jour dès que possible...