下面列出了SOA框架中进行交互的各种组件。这是一种典型的MVC 2框架。
·客户(Client):用户通过Web浏览器与不同的应用程序交互,浏览器作为应用程序的客户。比如,出纳部门的用户可能要输入帐单细节并把信息提交给应用程序。可以使用JSP页面和XHTML来呈现客户页面。
·应用程序控制器(Application controller):应用程序控制器是您的主控制器servlet。它负责初始化、委派请求和响应请求处理程序。
·请求处理程序(Request processor):这是一个Java类,通过调用相应的请求执行程序完成要求的处理,对请求进行预处理。这种调用采用命令模式。
·请求执行程序(Request handlers):请求执行程序完成具体请求的活动,比如与服务交互,向不同的企业信息系统(enterprise information systems,EIS)增加或检索信息。请求执行程序依靠业务定位程序发现相应的服务,然后通过这些服务访问需要的EIS信息。
·业务定位程序(Business locators):这些程序负责隐藏查找服务的复杂性,并提供缓存逻辑。业务定位程序可以采用多种形式,比如Web服务定位程序、EJB组件定位程序或者JMS定位程序。
·会话Facades(Session Facades):通过聚合来自多个系统或服务的方法,简化复杂对象的视图。会话facades是EJB Web服务方法的包装器。
·EJB Web服务(EJB Web services):根据EJB 1.4规范,Web服务端点可以模型化为无状态的会话bean。如前所述,这种技术有许多优势。
·数据访问接口(Data access interfaces):使用不同的技术(比如 EJB-CMP、JDO、DAO)和不同的持久性技术访问EIS,所使用的访问技术取决于接口需求以及获取、插入或更新的数据量。这一层负责与EIS进行交互,并以相应的EJB Web服务方法所期望的格式把数据返回给这些方法。
·MQSeries/JCA/CCF:现有的基于主机的服务可以公开为Web服务,从而向外界展示它们。Web服务客户使用基于HTTP的SOAP协议与EJB Web服务交互。EJB方法通过JMS协议向MQSeries队列发送请求。(使用MQSeries是与基于主机的应用程序交互的一种方式。)主机端的MQSeries服务器触发相应的基于COBOL的程序,后者为与后台系统(比如IMS DC)进行交互提供必要的逻辑。然后这些程序把响应返回到队列中,应用程序逻辑检索这些响应并返回给EJB方法。SOAP消息可以通过不同协议进行传输,比如HTTP、HTTPS和JMS,但为了统一起见,本例子只使用HTTP和HTTPS。
这些组件提供了企业内部应用程序面向服务体系结构的基础。接下来讨论把服务向外界公开。
向外界公开服务
如果准备向外部用户公开服务,您需要某种安全约束来保证只有授权的用户才能访问服务。一种方法是提供另外的Web服务层,过滤掉禁用的Web服务请求,并提供登录和安全约束。这种过滤方式还应提供一种工具,向每一客户只公开授权给该用户的服务子集。
图3说明了企业外部应用的面向服务体系结构。它向外界公开了细粒度的服务。
以下是这种体系结构的基本功能单元:
·外部客户(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说明了企业外部应用的面向服务体系结构的下一次迭代过程。这个版本的体系结构向外界公开粗粒度的服务。
这里,主要的实现仍然和图3中所示的相同。唯一的区别在于已经公开了Session Facades作为Web服务端点。EJB Web服务可以模型化为本地接口而不是远程接口。使用会话facades和方法级安全性,可以限制要执行的服务。使用Web Service Gateway也能为Web服务客户施加安全措施。根据需要,可以实现粗粒度服务和细粒度服务的某种结合,通过调整Web服务网关中间件来向外部客户公开两种服务。(关于使用Session Facades与企业 Web服务的更多信息,请参阅参考资料。)
结束语
采用WSDL文件形式的Web服务接口可以发布到商业注册中心,从而使客户能够动态查找这些接口。如果交易伙伴已经知道这些服务,也不一定要进入商业注册中心,但是全球服务需要公共注册中心,以便客户能够查找可用的服务。例如,各个航空公司可以把它们的机票价格服务放在注册中心,普通客户可以发现所有这类服务,并查找航空公司所提供的最低票价。
我希望本文能够有助于您开始使用Web服务和新的J2EE 1.4规范所提供的特性构建面向服务的体系结构。您可以修改和调整本文所述的SOA Web服务框架以适应您的业务需要。
关于作者
Naveen Balani将大部分时间都用在设计和开发基于J2EE的产品上。过去,他曾为IBM撰写过各种文章,涵盖的主题有Web服务、CICS、JMS、AXIS、J2ME、DB2 XML Extender、WebSphere Studio、MQSeries、Java Wireless Devices和DB2 Everyplace for Palm、Java-Nokia、Visual Studio .Net以及无线数据同步。可以通过naveenbalani@rediffmail.com与他联系。
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
相关推荐
-
SAP收购CallidusCloud 与Salesforce竞争
一直被称为后台办公巨头的SAP现在似乎也想在前台办公大展拳脚。 最新的迹象是SAP收购CallidusClou […]
-
API设计如龙生九子 各不相同
IT咨询管理公司CA Technologies对API产业做了个问卷调查,问卷内容涉及API设计风格以及管理部署的新动向。调查结果表明,JSON与XML可谓两分天下。
-
从头开始实现领域驱动设计
领域描述业务;它是驱动企业的概念和逻辑的集合。如果遵循领域驱动设计(DDD)这一本质,那么领域就是应用程序中最重要的组成部分。
-
走出思维定式 数据库/大型机现代化不再是问题
升级和改变组织的主要利益驱动应用的前景,正处于一个压倒性的位置,所以组织将要面临一系列的改变。