- 论坛徽章:
- 0
|
我的java程序中加载了一个c写的so库,然后java作为api接口供php调用,现在遇到了一个问题,就是php调用java时,java会去连so库,然后第一次页面显示正常,再刷新就出现问题了,错误提示如下:
Fatal error: Uncaught [o(Exception):"java.lang.Exception: CreateInstance failed: new StreamFountJava.SFountAPI. Cause: java.lang.UnsatisfiedLinkError: Native Library /usr/lib/libsfount_api.so already loaded in another classloader"] thrown in /home/mbos/php_java.php on line 10
再次刷新出现:
Fatal error: Uncaught [o(Exception):"java.lang.Exception: CreateInstance failed: new StreamFountJava.SFountAPI. Cause: java.lang.ClassNotFoundException: Unresolved external reference: java.lang.NoClassDefFoundError. -- Unable to call constructor because it or one of its parameters refer to the mentioned external class which is not available in the current "java_require()" url path. Remember that all interconnected classes must be loaded with a single java_require() call, i.e. use java_require("foo.jar;bar.jar") instead of java_require("foo.jar"); java_require("bar.jar"). Please check the Java Bridge log file for details."] thrown in /home/mbos/php_java.php on line 10
StreamFountJava.SFountAPI是我做的一个package,已将其打成.jar给php调用了,libsfount_api.so 是我的so库
第一次是显示正常的!
再次刷新产生的错误是由于第一个错误引起的,因为第一个错误提示说我的so库已经存在于其他的classloader中了,所以导致第二次刷新的时候出错,天呢,调用so库的不是同一个.jar里的class嘛
顺便提一下无关的问题,我在VMware里的linux下执行刷新页面不会出错,只有重新将我的SFountAPi.class连同目录打包成.jar后才会出现上述问题,可是在纯正的linux环境下直接刷新就会出现这个问题,这是为什么?
我用的是apache2+php5+php-java-bridge来完成php调用java的。
PS:重启apache就能再正确显示一次,是不是因为重启apache的时候将php-java-bridge这个模块一起重新加载了一次,所以释放了之前的so库?
现在由于某些原因,没用jsp做,望各位用过php-java-bridge的大虾和版主们帮帮忙!很急啊! |
|