以下是这种体系结构的基本功能单元:
*外部客户(External clients):可以包括基于 Web 的客户、移动客户或者使用 .NET 环境、Perl 或其他编程语言编写的客户。所有这些客户都为不同的服务发送请求。只要遵循 WS-I Profiles 就不会出现互操作性的问题。
*企业防火墙(Corporate firewall):根据其安全策略,这家公司在 intranet 和 Internet 之间架起了防火墙,对收到的分组信息进行限制。
*Web 服务网关(Web Services Gateway):本例中,我选择使用 WebSphere Application Server 5.0 中的 Web Services Gateway 产品作为公开外部服务的网关。 Web Services Gateway 是一种中间件产品,在调用 Web 服务时提供了 Internet 和 intranet 之间的中间框架。使用 Web Services Gateway,开发人员和 IT 经理可以安全地对外公开 Web 服务,防火墙之外的客户也能调用这些服务。它包括一个服务管理模型(部署、取消部署,等等)和过滤器(对流经网关的请求和响应起作用的自定义代码)。它只处理收到的 SOAP/HTTP 请求,通过网关的请求可能发送给 Java 类、EJB 组件或者 SOAP 服务器(该服务器甚至还可能是另一个网关)。它可以为单个的 Web 服务方法提供保护(基本授权),也可以保护整个网关。使用 Web Services Gateway,来自客户的请求可以被转换成服务所要求的任何消息协议。例如,客户的请求可能是 HTTP 上的 SOAP,但在内部可以使用 JMS 协议上的 SOAP,Web Service Gateway 能够提供从一个协议到另一个协议的转换。
*EJB 服务(EJB services):EJB 服务没有任何变化。过程的其他部分和 图 2 所示体系结构提供的基于 intranet 的服务类似。
使用 EJB 组件实现粗粒度的服务
迄今所见到的过程都是向客户公开细粒度的 Web 服务。只要每个业务服务作为单个业务过程执行,这种设置就能很好地工作。但是假设客户要进行在线资金转移,这种情况下提供单一的、粗粒度的接口显然更加合理,让用户提供所有必要的信息,包括传输的金额、发出和接收的银行信息,等等。此外,这类情形中验证必须在执行任何业务逻辑之前完成。在设计 Web 服务方法时必须考虑到这些问题,还要记住除了网络调用之外还有解析与规划 XML 请求和响应的开销。
考虑到这些因素,可以把 Session Facades 模型化为 EJB Web 服务端点。Session Facades 可以在把请求委派给相应的 Web 服务方法之前首先验证请求。这样,您就可以向 Web 服务客户提供粗粒度的服务。
下面的 图 4 说明了企业外部应用的面向服务体系结构的下一次迭代过程。这个版本的体系结构向外界公开粗粒度的服务。
图 4. 提供粗粒度服务的面向服务体系结构

这里,主要的实现仍然和 图 3 中所示的相同。唯一的区别在于已经公开了 Session Facades 作为 Web 服务端点。EJB Web 服务可以模型化为本地接口而不是远程接口。使用会话 facades 和方法级安全性,可以限制要执行的服务。使用 Web Service Gateway 也能为 Web 服务客户施加安全措施。根据需要,可以实现粗粒度服务和细粒度服务的某种结合,通过调整 Web 服务网关中间件来向外部客户公开两种服务
结束语
采用 WSDL 文件形式的 Web 服务接口可以发布到商业注册中心,从而使客户能够动态查找这些接口。如果交易伙伴已经知道这些服务,也不一定要进入商业注册中心,但是全球服务需要公共注册中心,以便客户能够查找可用的服务。例如,各个航空公司可以把它们的机票价格服务放在注册中心,普通客户可以发现所有这类服务,并查找航空公司所提供的最低票价。
我希望本文能够有助于您开始使用 Web 服务和新的 J2EE 1.4 规范所提供的特性构建面向服务的体系结构。您可以修改和调整本文所述的 SOA Web 服务框架以适应您的业务需要。