使用PHP调用在现有JVM中运行的Java对象

时间:2011-06-27 15:13:53

标签: java php servlets jvm

我正在进入一个现有项目,这意味着许多远程对象在一起进行通信以计算和传输数据。

我的目标是创建一个Web应用程序,允许最终用户输入一些数据,并在处理后通过现有的分布式应用程序获得结果。

关于这一点,我找到了一种使用PHP调用现有Java对象的方法,但在大多数情况下,它是关于如何直接在PHP中创建JVM和实例化对象,而不是访问现有的和正在运行的JVM

那么,有什么可能是更好的方法呢?我也听说过创建一个servlet,但我目前还没有真正的知识,所以我将一个SOS装在一个瓶子里给StackOverflow社区,希望有人(我相信有)能得到一个很好的答案。那个问题: - )

感谢您的时间!

3 个答案:

答案 0 :(得分:2)

您需要修改java应用程序。您必须为该应用程序添加某种远程接口,然后可以由PHP使用。如果你没有java经验,那你就不走运了。

上面描述的一个选项是servlet,它基本上意味着通过REST或SOAP接口公开你的java应用程序。这可能是也可能不是最简单的解决方案,具体取决于您的Java应用程序。如果它是一个webapp,你很幸运。您可以尝试使用JAX-WS来执行此操作。缺点是这种通信带来了开销。如果您的Java应用程序是命令行程序,您可以使用嵌入式servlet容器(如Jetty)或尝试使用WSpublish(内置于java 6中)。

你可以尝试一下Hessian。它是一个支持PHP和Java的二进制Web服务协议。我在java-only环境中广泛使用它,但它也可以在php-java场景中使用。 http://hessian.caucho.com/

正如你所看到的,有很多选择,但它们都需要JAVA的知识和经验,不能用一两句话来描述。

我见过的最简单的java WS示例可以在这里找到: http://java.dzone.com/articles/jax-ws-hello-world?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed:+javalobby/frontpage+(Javalobby+/+Java+Zone

答案 1 :(得分:1)

也许您可以尝试PHP / Java Bridge项目:http://php-java-bridge.sourceforge.net/pjb/

答案 2 :(得分:1)

正在运行的java虚拟机有一扇门:java管理扩展。门必须从内部解锁,因此应用程序必须提供一些托管bean,并且必须使用一些参数启动jvm。

但是一旦设置正确,那么你就有了一个开放的端口,你可以从中读取和设置实例上的数据或执行方法。

我无法确切地知道从“其他语言”使用这个连接到jvm是多么困难,也许你只需要能够用php模拟javas对象序列化。但它可能会为您的实际问题提供解决方案。