我需要使用事务属性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文件。但是会有更聪明的方法吗?
答案 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
文件夹中。这应该有效,因为部署描述符中的设置会覆盖注释中的设置。