message facade
一个ejb客户端想要在一个环境的用例中调用多个ejb的
方法,并且不需要从服务器的立即的反映。
怎样才能让ejb客户端在一个事务中调用多个session
bean或entity bean的方法,不需要被阻塞并且等待
每个bean的反映?
特别在大型系统中,伸缩性指明一个用例的商业逻辑
与客户端的分离执行,不需要客户端等待执行完毕。
这种类型的行为,叫做异步行为,允许客户端用最大的
反应时间和用户界面(UI)交互,因为他们不需要坐下来
等待他们启动的用例执行。这种方法允许大型系统伸缩,
因为用例能在一个批处理中排队并被执行,对用户透明,
用户可以马上转移到UI的下一个部分。如果排队的用例
的大部分已经开始发展,系统执行用例的部分也能被伸
缩并且通过系统升级,都不需要改变对客户端的可用性
和质量。
考虑一个简单的基于web的航线注册系统,在这个系统中
一个servlet接受为一个用户的特定的一个航班预定一个
座位的请求。在这种场景中,一个servlet必须用一个
航线注册一个用户,决定如果座位在一次航班上是否可用,
为一个用户预定一个座位,如图1.5所示。
在这个例子中,我们有一个客户端为了执行一个用例完成
对服务器的多个异步调用。这个过程的每一步需要一个
分离的网络调用并阻塞客户端的部分。在一个像航线
预定应用一样巨大的系统中,这个瓶颈显然是无法接受的。
还有,在这样的风格下执行逻辑减少了系统的可维护性和
可重用性,并且不为用例提供事务的一致性和分离性。
最通常的解决方案是使用session facade模式。用这个模式
,一个应用程序创建一个包含充满商业用例的商业逻辑的
session bean层。每个session bean在一个大块(bulk)调用中
代表客户端完成对entity bean或其他服务器端资源的大
块(bulk)操作,如session facade模式的图1.3所示。不幸的是,
即使整个用例是被session