1

我想知道为了实现 MDB 的可移植性,哪些是最佳实践。我正在开发一个使用 a ConnectionFactoryand both Queueand的应用程序Topic。在一些应用程序服务器(主要是 glassfish 3.1.2.2 和 JBoss EAP 6.1)上测试应用程序时,我发现一个资源注释如下:

@Resource(name="jms/myConnectionFactory", lookup="java:/jms/myConnectionFactory")
private ConnectionFactory myConnectionFactory;

@Resource(name="jms/myTopic", lookup="java:/jms/myTopic")
private Topic myTopic;

我在某处读到使用mappedName属性 in@Resource被认为是不可移植的,因为它是特定于 AS 的。但是我也在为上述方法而苦苦挣扎,实际上是在 Glassfish 上工作,而不是在 JBoss 上。是否有一种真正可移植的方法来定义 JMS 实体?

非常感谢。

4

2 回答 2

1

例如,如果您从 WebSphere MQ API 更改为通用 JMS,您可能会发现 MQ 中的一些特殊功能没有映射到 JMS。

如果您的源代码已经只使用 JMS,那么唯一真正不同的是获取ConnectionFactory. 最重要的是,我没有遇到任何差异。

如果您在没有应用程序服务器的情况下使用 JMS 队列(= 没有 JNDI),通常只有连接方式不同。

如果您在应用程序服务器中使用 JMS 队列(= 使用 JNDI),通常只有 JNDI 名称不同。

对于 MDB,我更喜欢在应用程序服务器特定的描述符文件(而不是源)中配置连接工厂——以保持源和配置分开。无论如何,配置应用程序是数据中心的责任。它可能有助于为不同的环境和/或应用程序服务器构建不同的包。

于 2013-06-03T10:15:02.140 回答
0

最佳实践是使用 JMS 2.0 注释(当然在支持它的 JMS 实现上)。JMS 2.0 定义了许多注释以及注入它们的方法,这将有助于您的情况。

JBoss 的问题是它只在 8.0 中支持这些

于 2013-06-03T23:38:31.867 回答