技术开发 频道

利用已有异构服务 轻松构建SOA应用

用JBI实现在线旅行社
  
  本文实现的在线旅行社可以提供用户预订机票和旅店,并向用户发送邮件确认用户的预约。为实现这一功能,网站将向工作流引擎发送用户以XML格式提供的所有信息,然后该工作流引擎会联系航空公司订购机票,并向旅店连锁机构预订房间,最后它会通过邮件引擎向用户发送一封确认信。
  
  尽管此过程中所使用的数据交换格式是XML,但各种服务请求或提供的XML模式不尽相同。因此,可扩展样式表转换语言(XSLT)引擎就被用来进行从XML向其它格式的转换。
  
  后文会详细讨论这个业务过程,这里先看图1。图1描述怎样使用Petals ESB构建整个应用。
  

  
  图1 应用架构
  
  现在我们来讨论该架构的各个关键组成部分。
  
  服务装配器
  
  服务装配器(service assembly)描述如何配置一个JBI组件使其能集成到应用中。它以一个简单的zip压缩包方式部署在JBI容器中。容器分析压缩包中的所有内容,并根据这些内容配置相关的组件。组件的配置即是一个服务单位(service unit)。当我们使用服务单位来配置一个组件时,我们称之为部署一个配置(artifact)。请注意,服务单位的内容对容器来说是不透明的,它只提供给组件。
  
  如果服务装配器包含对服务之间关系的定义(即连接,connections),容器就会创建这些连接。可以视连接为真正的服务终端别名。
  
  如图2,服务装配器是一个zip压缩包,它包含XML描述符文件,定义向哪个组件提供服务单位以及服务之间的连接。服务装配器还包含要向各个组件部署的服务单位。这些服务单位也是zip压缩包。
  

  
  图2 服务装配器
  
  简单地说,服务装配器的作用就是定义一系列服务之间的关系,从而以SOA的方式创建应用。如果容器中有多个服务装配器,那么这些服务装配器应该可以在同样的服务上运行,并共享这些服务。
  
  服务单位
  
  服务单位是一系列部署到JBI组件中的元素。它包含一个组件能够读取的XML描述符,以及任何组件可以获取的配置。比如,一个XSLT引擎的服务单位包含一个XSL样式表,描述符文件告诉组件如果接收到某个特定服务终端发来的消息就必须使用该样式表。


  
  图3 服务单位
  
  ESB将服务单位包放在一个目录里,然后告诉组件的服务单位管理器(JBI组件的一部分)有新的服务单位可以调用,并指出存放服务单位的目录位置。组件的服务单位管理器把新服务注册到JBI环境中,然后配置组件以使用已注册的服务终端。


  
  图4 在组件上配置服务单位
  
  当组件收到调用某个服务终端消息的时候,它就会知道该用哪一个配置。
  

  
  图5 为特定服务终端使用配置
  
  连接器
  
  连接器是在服务配置器的描述符里定义的,可以视其为真正的服务终端的别名。比如,一个组件可以描述“我要向一个称作My Endpoint的服务终端发送一条消息”,连接器就可以认为My Endpoint实际上就是My Real Endpoint。这样,当组件向My Endpoint发送消息时,消息就会被发送到My Real Endpoint。
  
  使用这样一种机制的意义在于,可以动态地对组件之间的连接进行重新配置。比如,配置一个组件——旅行社的工作流程引擎——来调用叫做“航空服务终端”的服务。后来,由于旅行社与航空公司合作关系的变化,连接器要把航空服务终端连接到“低消费的航空公司终端”或“另一个航空公司终端”。服务使用者不需要做出任何变更,通过部署包含不同连接器的各种服务配置器,应用就会动态地更改所使用的服务。
  

  
  图6 更换一个连接器

0
相关文章