使用RMI或JMS在Web和业务层之间有什么优缺点?

3
对于典型的Web客户端 -到- Servlet/WS -到- 业务层(Spring或EJB)应用程序,除了基本的同步/异步方面,像远程RPC或消息传递这样的方法对于Web(Servlet)层到远程业务层有什么权衡之处?
3个回答

3

您是否指Web浏览器作为Web客户端?如果是的话,我推荐使用DWR或JAX-RS等技术。只有在两端都是Java代码时,RMI或JMS才能真正发挥作用。

任何远程技术的最大问题是它们对您的业务对象产生的侵入性。例如,在所有地方使用RMI接口/异常或在您的业务代码中使用JMS API。

我的建议是在Java中到处使用POJO,然后使用类似于Spring Remoting的技术将中间件层分离出来,无论是RMI还是JMS或其他什么 - 但完全将中间件代码与业务逻辑分离,以便随时在各种技术之间切换(并使业务逻辑代码更简单,更专注于您的业务问题)。

例如,查看 Spring Remoting的Camel实现,这样就可以使用任何这些传输和协议,如RMI、JMS甚至是普通的HTTP、电子邮件、文件或XMPP——然后通过简单的URI字符串更改轻松地在它们之间切换。

1

我们使用Spring通过RMI,发现它非常易于使用,相当健壮和快速。虽然我们的要求是一个相当响应迅捷的链接,并没有真正需要添加消息组件。


0

SUN RMI 对我们来说出了问题。

对于一个运行时间非常长并且不断进行消息传递的应用程序,设置和垃圾回收非常重要。我们正在打补丁来让它持续工作。我们运行的JMS应用程序不会遇到内存不足错误或GC问题,而RMI会。任何需要定期调用System.gc()并且不能使用增量收集来恢复资源的内容都是编写错误。

JDK 6和正确的属性设置可以提高RMI的可靠性,但是这是一个糟糕的框架。通过在nio中使用通道并修复sun nio使用的system.gc(),可以大幅改善RMI。

正确的答案-将通信机制与领域代码分离。RPC紧密耦合,协议和应用程序可能会互相干扰。 JMS将协议与应用程序分开,这是一种更好的范例。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接