在Glassfish中管理不受支持的事务属性

时间:2017-10-26 10:51:00

标签: java glassfish

我需要使用事务属性NEVER

来注释消息驱动的bean
@TransactionAttribute(value=NEVER)

并将企业应用程序部署到许多应用程序服务器。不幸的是,其中一个(Glassfish 3.1.2)不接受/支持这样的属性

Invalid transaction attribute for message-driven bean

在Glassfish中运行时从不使用该bean,但它必须是代码库的一部分。要解决不受支持的属性,可以使用

进行注释
@TransactionAttribute(value=NOT_SUPPORTED)

我的问题是:在构建版本时我怎么可能管理这个?我想到了一个“强力”方法:保留两个版本的MDB.java文件(一个作为默认值,一个用于Glassfish),然后调用构建过程两次,每次都替换.java文件。但是会有更聪明的方法吗?

1 个答案:

答案 0 :(得分:0)

我认为,对于消息驱动的bean使用事务属性NEVER是没有意义的,因为MDB没有客户端。以下是EJB 3.2规范的摘录:

  

对于消息驱动bean的消息侦听器方法(或接口),只能使用REQUIRED和NOT_SUPPORTED事务属性。

否则,您可以使用部署描述符覆盖@TransactionAttribute(value=NEVER)。 pseodocode如下所示:

<ejb-jar>
    ...
    <assembly-descriptor>
    ...
        <container-transaction>
            <method>
                 <ejb-name>here_mdb_name</ejb-name>
                 <method-name>onMessage</method-name>
            </method>
            <trans-attribute>NotSupported</trans-attribute>
        </container-transaction>
        ..
    </assembly-descriptor>

</ejb-jar>

并使用构建工具将描述符文件复制到jar文件的META-INF文件夹中。这应该有效,因为部署描述符中的设置会覆盖注释中的设置。