Heute geht es um eine interessante Erweiterung von PHP, nämlich die PHP/Java Bridge. Manchmal möchten man PHP-Anwendungen um Funktionalitäten erweitern, die nicht zwingend im direkten PHP-Umfeld beheimatet sind. In meinem konkreten Fall ging dabei kürzlich um die Verwendung von Jasper Reports zur Erstellung unterschiedlicher Auswertungen. Bei Jasper handelt es sich um eine OpenSource-Reporting Lösung, welche komplett auf Java basiert. Doch wie bringt man nun PHP dazu, mit einer solchen Java-Implementierung zu arbeiten? Die Antwort lautet PHP/Java Bridge.
Diese Brücke erlaubt es in PHP, Java-Klassen zu instanziieren und aktiv damit zu arbeiten. Dabei scheint es auf den ersten Blick, als würde es sich tatsächlich um PHP-Klassen handeln, lediglich ein paar Besonderheiten sind dabei zu beachten, doch dazu später mehr. Zunächst möchte ich kurz und knapp auf die Funktionsweise und die Installation der Brücke eingehen.
Funktionsweise der PHP/Java Bridge
Man benötigt natürlich zu aller erst einen HTTP-Server, wie beispielsweise Apache, auf welchem die PHP-Anwendung läuft. Zusätzlich benötigt man noch einen Java-Service wie Tomcat, welcher die Java-Seite der Brücke realisiert. Über das PHP/Java Bridge Protocol sollen diese beiden Seiten anschließend miteinander kommunizieren. Die Installation der Brücke ist dementsprechend relativ einfach und wird im Folgenden kurz erläutert. Vorrausgesetzt wird lediglich, dass bereits ein funktionierender HTTP-Server mit PHP vorhanden ist.
Vorbereitung:
- Herunterladen des Java-Services: z.B. Apache Tomcat
- Herunterladen der JavaBridge.war
- Ggf. JDK herunterladen und installieren. Es wird mindestens die Version 1.4 benötigt!
Installation:
- Apache Tomcat installieren
- Die JavaBridge.war (befindet sich in der eben heruntergeladenen zip-Datei), in das Verzeichnis “webapps” im Tomcat kopieren
- Tomcat starten
Das wars eigentlich schon. Mit dem Starten von Tomcat wird die Brücke deployed und kann sofort genutzt werden. Die gewünschten Java-Libraries müssen jetzt nur noch ins das Verzeichnis /apache-tomcat/webapps/JavaBridge/WEB_INF/lib/ kopiert werden und schon steht alles was man braucht zur Verfügung. Man sollte nun allerdings noch darauf achten, dass man eine durchdachte Schnittstelle auf der PHP-Seite verwendet um die Java-Libraries anzusprechen. Solch ein fertiges Schnittstellen-Script werde ich in Kürze nachreichen.
Bei der Verwendung der Brücke muss man allerdings noch darauf achten, dass viele Datentypen, wie Array, Date, File, usw. vor der Verwendung in Java erst von PHP-Datentypen in Java-Datentypen konvertiert werden müssen, was allerdings mit einem kleinen Script schnell erledigt sein sollte.
Meine ersten Erfahrungen mit der Brücke waren durchaus positiv. Nach ein paar Startschwierigkeiten (wie ansatzweise eben beschrieben) ist das Handling wirklich einfach und geht gut von der Hand. Man kann auf weitere Entwicklungen gespannt sein und bereits jetzt viele Vorzüge genießen. Alles in Allem wird hierdurch wiedermal bewiesen, dass es bei PHP eben nicht nur um eine Skriptspache handelt.
Hallo Herr Thaler,
gibts ne Möglichkeit, dass Sie noch ein paar weiterführende Informationen zur PHP/Java Bridge veröffentlichen?
freundliche Grüße
haben sie konkrete Vorstellungen bzw. möchten Sie etwas bestimmtes wissen?
Hallo Herr Thaler,
das hat sich jetzt eigentlich erledigt, habe es mit einer Pipe gelöst. Was damals mein Problem war weiß ich nicht mehr wirklich, aber sicher wäre „..eine durchdachte Schnittstelle auf der PHP-Seite(..) um die Java-Libraries anzusprechen.“ mal zu zeigen als „(..)ein fertiges Schnittstellen-Script(..)“ sinnvoll, wie Sie es angekündigt hatten. Geht das? Interessieren würde es mich dennoch, sicher kann ich es später bei einen anderen Projekt mal gebrauchen.
freundliche Grüße
Hallo Herr Thaler,
könnten Sie ein einfaches Beispiel zeigen, wie man Java-Klassen aus PHP aufrufen kann?
Viele Grüße