PHP-Anwendungen mit Java-Backends verbinden

Es wächst zunehmend das Bedürfnis, etablierte Internet-Techniken wie PHP mit Java-Enterprise-Anwendungen zu kombinieren. Standardprodukte für die Verknüpfung sind zwar noch Mangelware, einige Ansätze jedoch vielversprechend.

In Pocket speichern vorlesen Druckansicht
Lesezeit: 13 Min.
Von
  • Markus Eisele
  • Jürgen Diercks
Inhaltsverzeichnis

Seit sich Unternehmensprozesse immer mehr ins Web verlagern, wächst das Bedürfnis, etablierte Internet-Techniken wie PHP mit Java-Enterprise-Anwendungen zu kombinieren. Standardprodukte für die Verknüpfung sind zwar noch Mangelware, einige Ansätze jedoch vielversprechend.

Wer sein Java-Backend mit dynamischen Webseiten, oft erstellt mit dem populären PHP, verbinden will, kann sich noch nicht aus einer reichen Auswahl an geeigneter Technik oder gar bei zahlreichen ausgereiften Produkten bedienen. Trotzdem lohnt es sich, einiges von dem Vorhandenen näher zu untersuchen.

Eine Ausführungsumgebung für die Skriptsprache PHP läuft je nach Betriebssystem als separater Dienst oder Prozess. Außer den Schnittstellen zu Webservern wie Apaches HTTPD oder Microsofts IIS bietet PHP keine standardisierten Objekt-Interfaces. Grundsätzlich gilt Letzteres auch für eine Java Virtual Machine (JVM). Will man nun PHP- und Java-Programme dazu bringen, miteinander zu reden, müssen geeignete Zwischenstücke her. Die docken sich an den rudimentären Schnittstellen der jeweiligen Prozesse an, ver- und entpacken übertragene Objekte, die die (für den Entwickler unsichtbare) Kommunikation über Prozessgrenzen hinweg abwickeln, und stellen Programmier-Interfaces (APIs) zur Verfügung.

Bei der Suche nach solchen Adaptern stößt man bald auf die PHP Java Extensions. Diese Erweiterungen nutzen das Object Overloading von PHP, um auf Java-Klassen zuzugreifen. Ruft ein PHP-Programm eine Java-Methode an einem Objekt auf, wird zuerst via Java Native Interface (JNI) eine JVM erzeugt. Der Rückgabewert lässt sich in den PHP-Seiten anzeigen. Die ersten Gehversuche mit dieser Lösung gestalten sich mühselig. Der Entwickler muss etliche Dinge konfigurieren, installieren, und die Kombination mit JNI verspricht nicht gerade sonderlich stabile Systeme. Unter Last geht diese Konstruktion schnell in die Knie. Schlimmstenfalls startet jeder Request eine komplette JVM. Für solche Experimente sollte ein Server mit großvolumigem Hauptspeicher zur Verfügung stehen. Instanz-Pooling oder andere Wiederverwertung findet hier nicht statt.