SourceForge桥接器
该桥接器是封装了Zend核心引擎的免费的开源产品。配置之后使用与上文演示的Zend Platform桥接器相同的方式进行操作(即作为Apache/PHP配置和Java EE Server的连接)。该桥接器也可在其他的配置中运行:可以将它作为Java servlet部署,如图2所示:
安装SourceForge Java桥接器:
1.从SourceForge site下载一个版本,本教程使用的是php-java-bridge_3.2.1_j2ee.zip。
2.打开压缩文件并提取java-bridge.war文件。
3.把java-bridge.war文件解压到Eclipse工作间的新文件夹。(我们称之为“JavaBridge”)
4.如果希望使用Workshop Studio:
必须使用3.2版本或者更高的版本。可从这里下载。
使用新的Workshop Studio New Project Wizard,在该工作间中创建一个Dynamic Web Project From Existing Source。把Web环境的根目录设置到JavaBridge。
指向存放解压了的.war文件的文件夹。(遗憾的是,WTP目前存在的一个问题使得不能够将.war文件作为项目导入。)
5.使用Studio或者其他工具将应用程序部署到WebLogic Server。
6.将Web浏览器指向http://localhost:7001/Javabridge。index.php将显示几个演示该桥接器的示例程序。 
图2:把SourceForge Java Bridge作为PHP servlet运行
在该配置中:
1.收到PHP请求,并由WebLogic Server映射到桥接器的PHP servlet。
2.PHP 脚本传递至php-cgi加以处理。
3.桥接器通过向Java Gateway servlet发出请求,将对Java对象的调用传递到WebLogic Server JVM。
4.此时,可以以正常方式访问JNDI资源。
有益的提示:
在servlet默认配置下,该桥接器为每一个PHP调用提供一个CGI进程,该进程可以在请求完成后终止。在多于一个PHP请求运行的情况下,可能会导致性能问题。桥接器发行版包含配置FastCGI的说明,FastCGI可以维护PHP地址空间并为闲置的地址空间分配分派到来的请求。这种方式避免了为每个请求启动和终止操作系统进程的开销。根据操作系统平台的不同,设置这一功能的难度也有所不同。
示例代码:访问WebLogic Server上的资源
我们提供了使用桥接器功能的示例EJB和PHP客户机程序。该代码可以使用两种桥接器。下载部分提供了PHP 脚本,Trader EJB的ERA,以及客户机jar文件。(EAR文件也包括所有Java类型的源代码。)要运行示例程序:
1.将ejbref.php添加到JavaBridge Web根目录(或添加到之前介绍的SourceForge 桥接器提到的Eclipse项目,或者添加到包含test.php的Zend平台的目录里)。
2.使桥接器可以使用TraderClient.jar:将其添加到Zend桥接器的环境类路径中,或将其添加到为SourceForge桥接器部署的servlet应用程序中的 WEB-INF/lib。
3.将Trader.ear文件部署到 WebLogic目标服务器。
4.将浏览器指向部署了的ejbref.php脚本并运行。
在这个代码示例中可看到ejbref.php的源代码。它加载了一个表单,当用户发回请求时,它使用本文第一个代码示例中使用的方法实例化WebLogic Server上的EJB。
<html><head><title>Buy or Sell shares</title></head>
<body>
<?php
if (isSet($_POST['ticker'])) {
$trader = getBean();
if (isSet($_POST['buy'])) {
$result = $trader->buy($_POST['ticker'], ($_POST['shares'] + 0) );
$action = 'bought';
}
else {
$result = $trader->sell($_POST['ticker'], $_POST['shares'] + 0);
$action = 'sold';
}
$trader->remove();
print <<<__HTML__
<i>{$result->getNumberTraded()} shares of {$result->getStockSymbol()} $action.</i>
__HTML__;
}
else {
print <<<__HTML__
<form action="http://localhost:7001/Java桥接/ejbref.php" method="post">
Ticker Symbol: <input type="text" size="4" name="ticker"/><p>
Number of Shares: <input type="text" size="6" name="shares"/><p>
<input type="submit" name="buy" value="buy"/> <input type="submit" name="sell" value="sell"/>
__HTML__;
}
function getBean() {
$envt = array(
"java.naming.factory.initial" => "weblogic.jndi.WLInitialContextFactory",
"java.naming.provider.url" => "t3://localhost:7001"
);
$ctx = new Java('javax.naming.InitialContext', $envt);
$home = $ctx->lookup('TraderHome');
return $home->create();
}
?>
</body>
</html>
工具
两个可用的工具分别是Zend Studio,一种商业产品,还有Eclipse PHP Development Tools (PDT)。可以从Zend Eclipse更新站点http://www.zend.com/pdt下载Eclipse PDT的稳定版本。(还可以从Eclipse PDT Project上直接下载新版本。)Workshop Studio release 3.2版本或更高版本可能已经安装了PDT,(但Workshop for WebLogic还不支持该功能)。PDT提供PHP编辑工具(代码着色,自动完成,语法错误检查),Workshop Studio能帮助您将SourceForge PHP Servlet配置部署到WebLogic Server。
Zend Studio调试器(商业产品)可以与Zend Platform桥接器很好地工作。与SourceForge桥接器一起发布的PHP核心引擎没有安装服务器端的调试器。因此它不能立即与Zend Studio一起使用。关于这一点,Eclipse调试器还是一个有待改进的产品。在撰写本文时,还无法将它用于任何一种桥接器。
结束语
本教程介绍了PHP-Java桥接器的设置方法,也充分演示了创建和管理这种配置所涉及到的复杂性。我们将继续探寻PHP与位于JVM上的Java的集成。对于希望在自己的应用程序中组合这两种语言的开发人员来说,我们相信这项研究将使他们的工作更加轻松。可访问我的博客了解未来规划。