在同一台机器上运行的其他java应用程序上调用服务

时间:2011-10-06 13:30:20

标签: java

我在为个人使用而创建的小型Java应用程序上创建了一个命令行界面。 目前cli与原始应用程序位于同一项目中,但我计划将其提取到自己的项目中,有效构建2个独立的可执行jar,使我能够根据需要启动cli并查询其他正在运行的程序以获取信息

我正试图找出在同一台机器上调用远程服务的最简单,最轻量级的解决方案。 我看了一下spring remoting,但许多提供的解决方案,如HttpInvoker,Hessian / Burlap,JAX RPC Web服务都基于HTTP或SOAP,因此不适合这项工作。 JMS似乎也有点矫枉过正。

这给我留下了RMI,它看起来相当重量级,可能还有JMX? 建议?

3 个答案:

答案 0 :(得分:1)

我认为这很大程度上取决于项目/功能的发展方向。 JMX很容易设置,你可以利用现有的客户端/ guis来查询和设置参数 - 这可以为你节省大量的工作。它还可以让您的系统与监控工具集成。

另一方面,如果功能与管理/监控没有多大关系,而且更多的是将数据输入和输出,一个选项可能是Apache MINA。我过去使用过它,效果很好。但你会有效地创建自己的协议!我怀疑MINA最终会比简单的RMI更“重量级”。

答案 1 :(得分:1)

JMX将使用下面的RMI进行远程访问。 JMX用于公开admin apis(监控/管理) - 不是用作通用的远程api。

从开发的角度来看,具有弹簧远程支持的RMI相当轻量级。即使是运行时,与您列出的其他选项相比,它也可以增加最少的开销。

此外,通过弹簧远程支持,您可以在以后需要时轻松切换到其他选项。

看看这个artcile,比较/基准以上选项的表现。

答案 2 :(得分:0)

在一个供个人使用的应用程序中,我会使用JMX,因为它应该是阻力最小的路径。我过去曾经有过这方面的经历。您将能够在几分钟内启动并运行,并且您不必考虑将数据移入的消息格式(只要您的bean为Serializable即可)。

在远程调用之前放置一个接口,以便稍后如果JMX不合适,您可以稍后再使用另一个实现。