Die Zend Java Bridge bietet als Bestandteil des Zend Server (auch Community Edition (CE)) die großartige Möglichkeit, aus PHP heraus direkte Java Aufrufe machen zu können. Beispiele dafür gibt es beispielsweise hier.
Wer allerdings glaubt, diese Funktionalität wäre mit einem einfachen Häkchen im Setup eingerichtet, täuscht sich. Zumindest in unserem Projekt mit dem Microsoft Windows Server 2003. Diese Anleitung / Tutorial zeigt euch (aus leidvoller Erfahrung), wie man letztendlich aber doch zum schnell Ziel kommt und diese großartige Funktion nutzen kann.
Schritt 1: PHP Zend JavaBridge installieren
Die Zend JavaBridge zu installieren ist nicht sonderlich schwierig. Dazu muss einfach bei der Installation des Zend Server ein entsprechendes Häkchen im Setup gesetzt werden.
Habt ihr es versäumt dies zu tun, könnt ihr dies einfach nachholen, indem ihr im Windows über Systemsteuerung > Programme & Funktionen > Installiere Anwendung modifizieren / Ändern (je nach Windows Version) die Funktionalität nachinstalliert.
Danach empfiehlt sich zunächst einmal ein Neustart des Systems.
Schritt 2: Den PHP Zend JavaBridge Dienst vorbereiten & starten
Damit die JavaBridge via Webinterface oder Zend Client-Tool aktiviert werden kann, muss der Start des entsprechenden Dienstes vorbereitet werden.
Versucht man diesen Dienst über die Dienste-Verwaltung zu aktivieren (Start > Systemsteuerung > Verwaltung > Dienste), so wird angezeigt (zumindest in unserem Fall), dass der Dienst gestartet aber vorerst in den Ruhemodus versetzt wurde. (Dienstname: Zend Java Bridge o. Ä.)
Auf diese Weise ist die Bridge also nicht nutzbar.
Stattdessen muss der Dienst unserer Erfahrung nach manuell gestartet werden (es mag auch am System oder dem verwendeten JRE liegen!). Wie dies funktioniert und welche Vorbereitungen zu treffen sind, erklärt der folgende Schritt:
Schritt 2.1: Java Classpass vorbereiten
Zunächst einmal müsst ihr den Pfad der Datei "javamw.jar" in den Java classpath einbinden. Warum dies nötig ist, könnt ihr einfach per Google herausfinden. Praktisch erledigt ihr dies, indem ihr eine entsprechende Umgebungsvariable anlegt:
Rechte Maustaste auf Arbeitsplatz > Eigenschaften (bzw. "Erweiterte Systemeigenschaften" > "Erweitert" > Umgebungsvariablen...!
Hier legt ihr eine neue Umgebugsvariable an:
Name der Variablen: "
classpath
"
Wert der Variablen: "
.;C:\Programme\Zend\ZendServer\bin\javamw.jar
"
(Der Pfad zur javamw.jar im ZendServer Installationsverzeichnis ist hier Standard, bitte prüft aber, ob er auch für euer System korrekt ist und passt ihn ggf. an!!)
Sollte die Variable bereits vorhanden sein, könnt ihr einfach den Pfad eurer "javamw.jar" mit einem ";" getrennt ergänzen.
Nach dieser Änderung ist ggf. ein System-Neustart oder Neustart der ggf. geöffneten Konsole nötig.
Schritt 2.2: PHP Zend Java Bridge Dienst manuell starten
Nun ist alles bereit, um die Zend Java Bridge startklar zu machen. Öffnet nun die Konsole (Start > Ausführen > cmd) und gebt hier folgenden Befehl ein:
JavaServer (Bridge) starten:
java com.zend.javamw.JavaServer
Wir haben dies für den späteren automatischen Script über ein Batch-Skript im Autostart gelöst, aber für die ersten Tests reicht uns hier der manuelle Start. Damit ist ja klar, wie es weiter gehen kann.
Wenn alles korrekt funktioniert, wird euch nun kein Fehler angezeigt und die JavaBridge kann im Zend Client-Tool oder Browser aktiviert werden!
Schritt 3: Nutzung der PHP Zend Java Bridge mit eigenen Java-Programmen
Generell sollten nun alle nötigen Schritte erledigt sein, damit eure Zend Java Bridge bereit zur ersten Nutzung aus dem PHP heraus ist.
Zum Test der Grundfunktionalität empfiehlt sich der unter:
http://files.zend.com/help/Zend-Server/working_with_the_java_bridge.htm angegebene Quellcode. Dieser verwendet ausschließlich Java Basisfunktionalität und sollte problemlos die beschriebenen Werte zurück liefern.
Etwas schwieriger (und leider schlechter dokumentiert) wird es, wenn ihr eigenen Java Quellcode oder entsprechende Bestandteile aus PHP heraus aufrufen möchtet. Das ist zwar leicht möglich, man sollte aber einige Tipps beachten:
- Euer Java Quellcode muss als ".jar"-Datei exportiert werden. Dies erfolgt schnell und einfach beispielsweise über die "Export"-Funktionalität von Eclipse. Achtet darauf, dass alle benötigten Abhängigkeiten mit eingebunden werden.
- Nach jeder Aktualisierung der verwendeten ".jar"-Datei muss der Webserver neu gestartet werden, damit das neue Paket eingelesen wird!
- Ich empfehle im Rahmen der Entwicklung unbedingt das PHP/Java Exceptionhandling zu aktivieren. Dazu einfach direkt vor Verwendung der Bridge: aufrufen.
- Eigene ".jar"-Bibliotheken müssen unbedingt via eingebunden werden. Beispiel: Hier reicht es nicht aus, diese in den classpath aufzunehmen!
- Achtet beim Schreiben des Java Codes in PHP unbedingt auf die Typsicherheit. Hinweise dazu werden hier ebenfalls gegeben: http://files.zend.com/help/Zend-Server/working_with_the_java_bridge.htm
- Statische Aufrufe erfolgen in ihrer Schreibweise identisch zu Methodenaufrufen und sind problemlos möglich!
Zuletzt noch etwas PHP-Beispielcode der Ausführung eines Java-Quellcodes zur Veranschaulichung:
// Caution: Requries Zend Server JavaBridge to be installed.
// Bridge configuration:
java_throw_exceptions(1);
// Include custom jar file!
java_require('C:\cygwin\home\www\files\jars\myLibrary.jar');
// Create Java object in PHP
$myClass = new Java("myPackage.MyClass");
// Call custom method
$result = $myClass ->myMethodCall($myParameter1);
return $result;
?>
Quellen & Weitere Informationen (gesammelt):
http://files.zend.com/help/Zend-Server/installed_components.htm
http://docs.oracle.com/javase/tutorial/essential/environment/paths.html
http://files.zend.com/help/Zend-Server/zend_java_bridge_-_configuration…
http://files.zend.com/help/Zend-Server/zend_java_bridge_-_php_api.htm
http://files.zend.com/help/Zend-Server/components.htm
Ich freue mich über euer Feedback zu eigenen Erfahrungen mit der Zend Java Bridge. Funktionierte bei euch alles einwandfrei nach der Installation? Hattet ihr andere Probleme?
Vielen Dank an Stephan Bautz, mit dem ich das Problem gemeinsam im Team gelöst habe, sodass nicht nur ich ein paar Haare verlieren musste. ;)
Ich hoffe unsere Tipps waren hilfreich!