在WEB開發市場中,Java和PHP都是目前應用的熱門技術。Java的強大是不容置疑的,不僅體現在WEB開發上,在各個軟件應用領域,Java無所不在。而PHP在開源力量及ZEND,IBM,Oracle等公司的推動之下也日漸繁榮。不一定會有人相信互聯網先鋒人物Marc Andreessen 的預言“PHP將比Java更受歡迎”,但是“PHP瞄准企業市場,和Java展開正面較量”確實正在進行中,全球2200萬個網站所采用的技術讓人不得不重視。
兩種技術可以激烈競爭,也可以緊密合作。從客戶的角度來說,技術之間的融合非常重要,因為一個龐大的應用系統,通常不可能由單一語言/和技術獨立完成。PHP/Java Bridge的出現就將成為PHP和Java間的一道橋梁,為需要結合PHP與Java的企業提供一個良好的選擇。
//Haohappy對J2EE了解不深,如果有相關內容理解錯誤,歡迎批評指教。
(一)什麼是JSR,什麼是JSR223 ?
JSR(Java 規范請求)是指向JCP(Java Community Process)提出新增一個標准化技術規范的正式請求。任何人都可以提交JSR(Java 規范請求),以向Java平台增添新的API和服務。JSR已成為Java界的一個重要標准。
在Java Servlet規范(Servlet 2.4,JSR-154)中,定義了一系列核心的抽象概念(WEB程序處理過程中需要考慮的各種對象)來讓Java程序員編寫WEB程序,包括session,request,response等等。當程序員在編寫程序的時候,可以很方便安全地與這些對象進行通訊。JSR223描述的是這些Java對象如何向用其它腳本語言編寫的WEB頁面開放,使其它語言也可以訪問這些對象。當前這個規范將被用於PHP,不過這種概念是獨立於腳本語言的,也就是說在將來可能被應用於PHP之外的其它腳本語言。一句話,JSR223的目的是將腳本語言集成到Java平台之上。
(二) 什麼是PHP/Java Bridge ?
PHP/Java Bridge包含一個PHP模塊(包括java.so,php_java.dll)和一個相關的後端程序(JavaBridge.jar,JavaBridge.war或MonoBridge.exe),用於連接PHP的對象體系到Java或ECMA 335(CLI, Microsoft .NET Framework的重要子集)虛擬機。 它完全實現了JSR 223規范請求,可以使PHP腳本訪問基於CLR(如VB.NET,C#)或Java(Java,KAWA,JRuby)的應用程序。PHP/Java Bridge通過本地socket用一個高效的通訊協議與虛擬機進行通訊。一個多進程的HTTP服務器的每個處理請求的PHP進程都會有一個相應的虛擬機進程。
多個HTTP服務器的請求會被集中發送到一個運行著PHP/Java Bridge的應用服務器,或者每個HTTP服務器都有一個PHP/Java Bridge並和一個J2EE應用服務器進行通訊,必需的客戶端類庫(ejb client.jar)將在運行時被加載。
如果在ECMA虛擬機內至少有一個後端程序在運行,例如Novell的MONO或Microsoft的 .NET,那麼基於ECMA 335的類就可以被訪問,也可以支持varargs, reflection,assembly loading等特性。
如果在J2EE環境中有一個後端程序運行,PHP和JSP間就可以實現session共享,可以實現集群和負載平衡。
和以前的嘗試 (ext/java 或 JSR223 的示例)不同,PHP/Java Bridge不再使用JNI(Java本地接口)。PHP對象將從HTTP(Apache/IIS)池而來,而Java/J2EE的對象從後端程序中分配而來。對象間通過“通訊傳遞樣式(continuation passing style)”來進行通訊,見下面的java_closure()。一旦一個PHP對象崩潰,不會影響到Java應用服務器和servlet引擎。
從PHP/Java Bridge version 3.0開始,我們也可以把Java作為PHP腳本的一個運行環境。Java代碼可以分配和調用PHP腳本,通過一個外部或內部的Java池。腳本對象可以來自於外部的HTTP池,或內部的php FastCGI池或直接使用php CGI。這個功能需要Java 6(預計2006年上半年推出) 或外部的javax.script包。