日期:2014-05-19  浏览次数:20729 次

J2EE集成层模式--服务激活器
问题:

    需要异步调用某些服务

    在企业应用中,大多数处理都是同步式进行的:客户端调用给一个业务服务,然后等待业务服务完成处理并返回结果。但是,又是业务处理需要耗费想当客观的时间和资源,还可能跨越多个应用程序,甚至需要结合企业内外的多个应用程序才能完成。对于这些耗时较长的处理,要求应用程序客户端一直等待它完成是不切实际的。

约束:

    --需要以异步形式调用业务服务、POJO或者EJB组件。

    --为了实现异步处理服务,需要集成发布/订阅和点到点的消息机制。

    --需要执行的业务任务在逻辑上由多个任务组合而成。

解决方案:

   用服务激活器接受异步的请求,并且调用一个或者多个业务服务。

   服务激活器用给一个JMS监听器来实现,它代表了可以监听、接受JMS消息的服务。如果应用程序使用了EJB组件,并且EJB容器实现了EJB2或者以后的版本,就可以用消息驱动bean来接受异步请求;如果应用程序没有使用ejb技术,或者EJB容器,就必须用用JAVA消息服务JMS实现定制的解决方案。

   如果客户端需要异步调用一个业务服务比如EJB或者POJO服务,他就要创建一条消息,并将其发送给服务激活器,后者对消息进行分析,一解释客户端的请求。解析出客户端的请求之后,服务激活器找到正确的业务服务组件,调用它来异步处理客户端的请求。

   处理完成之后,客户端可能需要接受处理的结果。为了将处理的结果告知给客户端,服务激活器可以想客户端发送一个相应,在其中告知客户端处理是否成功,并且将结果或者只想结果的句柄提供给客户端。如果处理失败,相应中更可以包含失败的详细信息,告诉客户端如何从失败中恢复--重新提交请求,或者改正造成失败的原因。服务激活器可能会使用服务定位器来定位服务组件。

   客户端提交请求时,可以在请求中包含一个独一无二的请求标识符。处理请求的服务激活器或者业务服务可以将这个标识符附着在结果中,并随相应返回。

效果:

--将JMS集成到企业应用中

服务激活器使得可以在POJO企业系统使用POJO服务激活器和EJB企业应用系统<使用MDB服务激活器策略>中利用JMS。不论应用系统运行在什么平台上,只要拥有JMS运行时环境,就可以在应用系统中实现服务激活器模式,以提供异步处理的能力。

--为任何业务层组件提供异步处理能力

  服务激活器模式使您能够为任何类型的EJB(包括无状态session bean ,有状态session bean和entity bean )提供异步调用功能。服务激活器在客户端和业务服务之极爱你扮演“中间人”角色。为任何实现业务服务的组件提供异步的能力。

--可以作为独立的JMS监听器运行

POJO服务激活器可以作为独立监听器运行,无须任何的容器的支持。但是在关键的应用程序中,需要对服务激活器进行监控,以确保其可用性。可以给应用程序加上额外的管理和维护功能,但是这会带来开销。MDB服务激活器是有应用服务器来监管的,因此是更好的选择。