• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

最新的PHP java bridge使用方法和遇到的问题 - jy_kwwl

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

最新的PHP java bridge使用方法和遇到的问题

最新的PHP java bridge使用方法和遇到的问题

 

在PHP中调用Java组件,在我对PHP的学习一开始就给我出了一个难题。google里一搜,介绍的文章还不少,大体上看来,有两种方法可以解决这个问题:1、使用php_java.dll扩展;2、使用PHP java bridge。

第一种方法不多说,修改php.ini,重启Apache似乎一切顺利,但是只要页面执行到调用java的地方,apache就弹出内存不能为read的错误,再找了找其它的资料,说把php.ini里的memory_limi设大些就解决了,可是直到设置为512M的时候,仍然出现相同的问题。没辙,只好采用第二种方法。

到sf.net上下载了php-java-bridge_4.0.3_j2ee.zip,可是问题又来了,网上的资料上都是3.0版本的,而且说里面有个java-x86-windows.dll,可是现在的4.0包里并没有,最要命的还是E文太差,里面的说明文档又看不懂,那怎么办,只能摸着石头过河了,每种配置方法都试着去弄,仍然不能正常运行,还是只能硬着头皮去看说明文档。

原来,它要先把JavaBridge.war解压开,在JavaBridge\WEB-INF\lib里有个JavaBridge.jar文件,命令行下调用java –jar JavaBridge.jar或者双击JavaBridge.jar,在弹出的窗口中选择监听端口。(这里要说明一下,安装Apache的时候最好弄成使用 80端口,而JavaBridge让它使用8080端口,这样省得倒处去搞配置,如果您的Apache是使用 8080端口,那么JavaBridge就只能使用其它端口,并且java/Options.inc里需要修改JavaBridge的端口。)

将JavaBridge里的java这个文件夹整个的复制到PHP目录中,然后加上如下代码:

require_once("java/java.inc");

try {

    $system = new Java(\'java.lang.System\');

    // demonstrate property access

    echo \'Java version=\' . $system->getProperty(\'java.version\') . \'<br/>\';

    echo \'Java vendor=\' . $system->getProperty(\'java.vendor\') . \'<br/>\';

    echo \'OS=\' . $system->getProperty(\'os.name\') . \' \' .

     $system->getProperty(\'os.version\') . \' on \' .

     $system->getProperty(\'os.arch\') . \' <br/>\';

}

catch (JavaException $e)

{

    echo $e->getCause();

}
,IE中刷新页面,可以看到以下运行结果:

Java version=1.6.0
Java vendor=Sun Microsystems Inc.
OS=Windows XP 5.1 on x86。

在这种情况,运行是很正常的,但是我是需要调用自己的组件的,加上一行代码,

require_once("java/java.inc");

 

$system = new Java(\'java.lang.System\');

 

java_require("C:\\AppServ\\www\\test\\EUCPCommHTTP.jar");

try {

    $system = new Java(\'java.lang.System\');

    // demonstrate property access

    echo \'Java version=\' . $system->getProperty(\'java.version\') . \'<br/>\';

    echo \'Java vendor=\' . $system->getProperty(\'java.vendor\') . \'<br/>\';

    echo \'OS=\' . $system->getProperty(\'os.name\') . \' \' .

     $system->getProperty(\'os.version\') . \' on \' .

     $system->getProperty(\'os.arch\') . \' <br/>\';

}

catch (JavaException $e)

{

    echo $e->getCause();

}

刷新页面时出现:

[[o:IllegalStateException]:"java.lang.IllegalStateException: java_require() not allowed for the HTTP tunnel. Use a context runner instead." at: #-7 php.java.bridge.JavaBridgeClassLoader.checkCl(JavaBridgeClassLoader.java:55) #-6 php.java.bridge.SimpleJavaBridgeClassLoader.forName(SimpleJavaBridgeClassLoader.java:187) #-5 php.java.bridge.JavaBridge.CreateObject(JavaBridge.java:514) #0 C:\AppServ\www\test\JavaBridge\java\Java.inc(151): java_ExceptionProxyFactory->getProxy(2, true) #1 C:\AppServ\www\test\JavaBridge\java\Java.inc(304): java_Arg->getResult(true) #2 C:\AppServ\www\test\JavaBridge\java\Java.inc(310): java_Client->getWrappedResult(true) #3 C:\AppServ\www\test\JavaBridge\java\Java.inc(489): java_Client->getResult() #4 C:\AppServ\www\test\JavaBridge\java\Java.inc(735): java_Client->invokeMethod(1, \'getCause\', Array) #5 C:\AppServ\www\test\JavaBridge\java\Java.inc(956): java_JavaProxy->__call(\'getCause\', Array) #6 [internal function]: java_exception->__call(\'getCause\', Array) #7 C:\AppServ\www\test\smsTest.php(39): java_InternalException->getCause() #8 {main}]

再刷新一次则又正常,问题交替出现。

至此,也再没有任何进展,这也许本来就是PHP java bridge的一个BUG,也正如此我不得不和客户商量其它的解决办法。

也希望有知道原因的朋友能给一些提示!


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
转 java调用php的webService发布时间:2022-07-10
下一篇:
java和php对接通用加解密方法整理发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap