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

Managing unsupported transaction attribute in Glassfish

我需要用事务属性 NEVER 注释消息驱动的 bean

@TransactionAttribute(value=NEVER)

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

Invalid transaction attribute for message-driven bean

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

对其进行注释
@TransactionAttribute(value=NOT_SUPPORTED)

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

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

For a message-driven bean’s message listener methods (or interface), only the REQUIRED and NOT_SUPPORTED transaction attributes may be used.

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

<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文件夹中。这应该有效,因为部署描述符中的设置会覆盖注释中的设置。