技术开发 频道

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

3. 映射规则

    在开始我们就提到WPS是建立在WAS上的,所以虽然在这儿它提出了不同于J2EE的事务的限定符,但最终它还是会被映射到J2EE的事务上。这种映射如下表所示:

    那么接下来的问题就是这种映射是如何发生的呢?

    这个秘密就在自动生成的EJB部署描述符中。我们可以在WID里面做一个简单的SCA模块,Build后看自动生成的EJB项目,通过查看其EJB部署描述符可以看到在container-transaction部分有如下的一些方法的声明:

<container-transaction>
    <method>
        <ejb-name>Module</ejb-name>
        <method-intf>Local</method-intf>
        <method-name>transactionNotSupportedActivitySessionNotSupported</method-name>
    </method>
    <method>
        <ejb-name>Module</ejb-name>
        <method-intf>Local</method-intf>
        <method-name>transactionNotSupportedActivitySessionRequired</method-name>
    </method>
    <method>
        <ejb-name>Module</ejb-name>
        <method-intf>Local</method-intf>
        <method-name>transactionNotSupportedActivitySessionSupports</method-name>
    </method>
    <trans-attribute>NotSupported</trans-attribute>
</container-transaction>

    根据SCA模块中事务限定符的配置的不同,你所能看到的方法也不太一样,但总共就只有九种组合。

    到这儿大家基本上都能知道SCA的这些限定符是如何被映射到J2EE的世界里面的了。没错,这就是利用了WAS提供的容器管理器的事务(CMT)的方式来把SCA世界的事务和J2EE的事务联系在一起。在运行的时候,SCA容器中的事务消息处理器首先根据消息所处的阶段,比如是在接口、实现还是在引用,查找到对应的事务限定符,然后发起一次EJB调用,调用的方法就是上述的这些方法。这些方法因为有确定的事务属性,所以EJB容器在接收到调用后就知道如何处理事务。在下面一小节中我们将通过一个实例来验证这个推断。

0
相关文章