1

目前,我只知道一种在 Java 中为 POJO 执行 RPC 的方法,并且是使用非常复杂的 EJB/JBoss 解决方案。

有没有更好的方法来提供具有更薄层(在 Java EE 容器内或没有 Java EE 容器内)的类似功能,使用 RMI 或可以通过网络序列化和发送完整对象的东西?

我目前对 HTTP/JSON 序列化 BTW 不感兴趣。

编辑:澄清:我正在尝试用更易于在容器级别管理的东西替换旧的 EJB 2.1/JBoss 4 解决方案。我需要完全控制数据库(计划使用 iBATIS,这将允许我非常轻松地使用相当复杂的 SQL),但我想要保留的唯一内容是:

  • 调用查找/数据修改方法(此处为自动序列化)。
  • 透明的会话控制(认证/授权)。我仍然需要看看如何做到这一点。

当然,这两个项目都必须作为一个整体工作。不应授予没有凭据的用户访问权限。

因为我不太喜欢编写 webapps,所以我计划构建一个 GUI(Swing 或 SWT),它只管理 POJO、做一些报告并从容器调用方法。我希望序列化尽可能简单。

4

4 回答 4

2

几乎总是这样,春天来救援。从参考文档中,您将需要阅读第 17 章。使用 Spring 的远程处理和 Web 服务

有几种方法可供选择。Spring 的美妙之处在于您的所有接口和实现都是普通的 POJO。连接到 RMI 或 Spring 处理的任何东西。你可以:

  1. 使用 RMI 导出服务:可能是最简单的方法;
  2. 使用 HTTP 调用程序:如果远程访问是一个问题,这对于防火墙等可能比纯 RMI 更好;或者
  3. 使用 Web Services,在这种情况下,我更喜欢JAX-WS 而不是 JAX-RPC

Spring 的另一个好处是它可以轻松透明地为服务器和客户端进行连接。

我个人会选择(2)或(3)。HTTP 是网络友好的。在 Web 容器中部署很容易。 Jetty的长期连接让您可以选择通过 HTTP (有效地)进行服务器推送。

所有这些方法都允许通过网络发送复杂的对象,但它们在这方面略有不同。您需要考虑您的服务器和客户端是否要分开分发,以及如果您更改需要重新分发类文件的接口是否会成为问题。或者您可以使用定制的序列化解决方案(甚至是 XML)来避免这种情况。但这也有问题。

使用 Web 容器将允许您轻松插入Spring Security,刚开始可能会因为有很多选项而感到有些畏惧。此外,HttpSession可用于提供请求之间的状态信息。

于 2008-12-28T22:28:24.540 回答
1

简单 RPC 正是 RMI 的构建目的。如果你制作了一个可序列化的接口,你可以从另一个应用程序调用一个应用程序上的方法。

于 2008-12-28T19:58:12.393 回答
0

您可以通过 REST尝试 XStream ( http://x-stream.github.io/ )。易于应用于 e 预先存在的一组 pojo。

由于您对 rest/json 不感兴趣,您能否提供一些有关您要实现的目标的更多信息?

于 2008-12-28T19:52:27.927 回答
0

如果您只需要值对象,那么只需确保 POJO 实现 Serializable 并跨套接字写入对象(使用 ObjectOutputStream)。在接收端使用 ObjectInputStream 读取对象。接收端必须具有兼容版本的 POJO(请参阅 serialVersionUID)。Hessian/Burlap 'protocol-ize this: http://hessian.caucho.com/http://www.caucho.com/resin-3.0/protocols/burlap.xtp

于 2008-12-28T20:16:52.497 回答