我在考虑:EJB3、Hessian、SOAP、JMS。每种方法都有其优缺点。
各位,您有什么意见或经验?
你的意思是远程运行?也就是在不同的环境中运行,因此具有不同的可用性特征?还有网络开销吗?
如果是这样,我的第一步将是采取服务方法,暂时放下调用技术。只考虑您的服务的设计和含义。您知道它们相对昂贵,因此小而繁忙的接口往往是不好的。您知道服务系统可能会在调用之间失败,因此您可能更喜欢无状态服务。您可能需要在失败后重试请求,因此您可能更喜欢幂等服务设计。
然后考虑可用性关系。您的客户端是否可以在没有远程系统的情况下工作。在某些情况下,如果无法访问 HR 系统,则无法启用员工,因此您根本无法继续进行。在其他情况下,您可以采用“先发射再告诉我”的哲学;排队请求并稍后处理响应。
如果存在可用性依赖关系,则简单地公开同步接口似乎很合适。如果一切都是 Java EE,您可以使用 SLSB EJBs 进行操作。我倾向于概括,期望如果我的服务有用,则非 Java EE 客户端也可能需要它们。因此,SOAP(或REST)往往是有用的。现在,将 Web 服务接口添加到 SLSB 中非常简单。
但是我的宠物理论是,任何足够大的IT系统最终都需要异步通信:您需要解耦可用性约束。因此,我倾向于寻找类似JMS的关系。在您的服务前面放置一个MDB外观,或者使用SOAP / JMS并不太难。这种方法往往会突出显示可能潜伏的故障案例设计问题,JMS往往会让您思考:“假设我没有得到答案?假设我的答案来晚了?”
我会选择SOAP。
JMS可能更高效,但您需要为每个接口编写一个消息驱动的bean。
另一方面,SOAP带有许多有用的工具包,可以在给定EJB时生成消息定义(WSDL)和所有必要的处理程序(客户端和服务器)。
使用SOAP,您可以(但不必)处理证书安全性和公共网络上的安全连接。由于默认协议是HTTP over port 80,因此您将在防火墙等方面遇到最少的问题。 SOAP也非常适合异构客户端(在您的情况下,任何不是J2EE的东西),并且支持大多数常见语言和平台。