技术开发 频道

揭秘WebSphere中SCA组件的事务实现

【IT168 专稿】    SCA作为一种新的编程模型,自然也需要提供完整的事务支持。所幸的是WPS本身是基于WebSphere Application Server的,底层天然就具有了强大的事务处理能力。因此,在SCA层次上只需要考虑事务的语法是什么,然后在合适的阶段把它映射到WAS的事务上就可以。本文从SCA容器开始说起,分别介绍SCA的事务模型及其和J2EE事务的映射规则,最后给出一个简单的例子来看整个过程是如何运作的。

1. SCA容器

    要了解SCA的事务是如何运作的,首先得先知道SCA容器是如何工作的。

    和大部分的容器一样,SCA容器的设计也是基于责任链的——在请求被路由到真正的服务实现之前,无论是在调用端还是服务提供端都有多个handler来先对请求进行处理。同理,在产生响应消息后,结果也是经过多个消息处理器后才返回给调用者的。这些消息处理器各司其责,有的处理安全、有的对消息进行验证,有的则处理事务等等。这种设计模式在AXIS架构中得到了充分的体现。

    而SCA容器提供的的编程风格和Web服务的动态调用也很类似。例如,在调用一个Web服务时,个典型的Web服务的动态调用代码如下:

    Service service = factory.createService(new QName(qnameService));
    Call call = service.createCall(port);
    String result = (String)call.invoke(params);

    而在SCA中,对应的代码如下:

    Service service = ServiceManager.INSTANCE.locateService(referencename);
    String result = (String) service.invoke("target method name",parameters);

    无论是Web服务调用时候面对的Call,还是SCA调用时候的Service,他们都只是服务的一个代理。这个代理通过调用预先配置好的消息处理器对请求消息进行处理,然后把消息传递给本地或者远程的服务实现端的代理,服务实现端的代理执行类似的操作后调用服务实现。

    在Web服务编程模型中,除了系统预定义的消息处理器,我们还可以加入用户自定义的消息处理器来实现特定的功能。但在目前的WPS的SCA实现中,目前没有提供公开的接口来支持自定义的消息处理器:(。

0
相关文章