目前,我只知道一种在 Java 中为 POJO 进行 RPC 的方法,并且使用非常复杂的 EJB/JBoss 解决方案。
有没有更好的方法可以使用 RMI 或可以通过网络序列化和发送完整对象的方法,通过更薄的层(在 Java EE 容器内或没有 Java EE 容器内)提供类似的功能?
顺便说一句,我目前对 HTTP/JSON 序列化不感兴趣。
编辑:澄清一下:我正在尝试用更易于在容器级别管理的解决方案替换旧的 EJB 2.1/JBoss 4 解决方案。我需要完全控制数据库(计划使用 iBATIS,这将使我能够非常轻松地使用相当复杂的 SQL),但我唯一想通过网络保留的内容是:
- 调用查找/数据修改方法(此处为自动序列化)。
- 透明的 session 控制(身份验证/授权)。我仍然需要看看如何实现这一目标。
当然,这两个项目都必须作为一个整体发挥作用。不应向没有凭据的用户授予访问权限。
因为我不太喜欢编写 Web 应用程序,所以我计划构建一个 GUI(Swing 或 SWT),它仅管理 POJO、执行一些报告并从容器调用方法。我希望序列化尽可能简单。
最佳答案
几乎总是如此,Spring来救援。来自 reference documentation ,您将需要阅读 Chapter 17. Remoting and web services using Spring .
有多种方法可供选择。 Spring 的美妙之处在于您的所有接口(interface)和实现都是普通的 POJO。连接到 RMI 或其他由 Spring 处理的内容。您可以:
- Export services using RMI : 可能是最简单的方法;
- Use HTTP invoker :如果远程访问是一个问题,这对于防火墙等来说可能比纯 RMI 更好;或
- Use Web Services ,在这种情况下我会赞成 JAX-WS over JAX-RPC .
Spring 还有一个额外的好处,它可以轻松、透明地为服务器和客户端进行连接。
我个人会选择(2)或(3)。 HTTP 是网络友好的。在 Web 容器中部署很容易。 Jetty的长期连接使您可以选择通过 HTTP(有效)进行服务器推送。
所有这些方法都允许通过网络发送复杂的对象,但它们在这方面略有不同。您需要考虑您的服务器和客户端是否要单独分发,以及如果更改需要重新分发类文件的接口(interface)是否会出现问题。或者您可以使用定制的序列化解决方案(甚至 XML)来避免这种情况。但这也有问题。
使用 Web 容器可以让您轻松插入 Spring Security ,一开始可能会有点令人畏惧,因为有太多选择。此外,HttpSession
可用于提供请求之间的状态信息。
关于java - 通过容器 session 管理在 Java 中使用 POJO RPC 比 JBoss 更简单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/396569/