Jakarta ee JMS与可移植性

Jakarta ee JMS与可移植性,jakarta-ee,jms,message-driven-bean,Jakarta Ee,Jms,Message Driven Bean,我想知道哪些是实现MDB可移植性的最佳实践。 我正在开发一个应用程序,它使用连接工厂和队列和主题。 在一些应用服务器(主要是glassfish 3.1.2.2和JBoss EAP 6.1)上测试应用程序时,我发现如下注释的资源: @Resource(name="jms/myConnectionFactory", lookup="java:/jms/myConnectionFactory") private ConnectionFactory myConnectionFactory; @Reso

我想知道哪些是实现MDB可移植性的最佳实践。 我正在开发一个应用程序,它使用
连接工厂
队列
主题
。 在一些应用服务器(主要是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;
我在某个地方读到,在
@Resource
中使用
mappedName
属性被认为是不可移植的,因为它是特定的。但我也在为上述方法而挣扎,实际上是在Glassfish上工作,而不是在JBoss上。是否有一种真正可移植的方法来定义JMS实体


非常感谢。

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

如果您的源代码已经只使用JMS,那么唯一真正不同的是获取
连接工厂的方法。除此之外,我没有遇到任何分歧

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

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


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

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

如果您的源代码已经只使用JMS,那么唯一真正不同的是获取
连接工厂的方法。除此之外,我没有遇到任何分歧

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

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


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

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


JBoss的问题在于它。

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


JBoss的问题在于它是独立的。

我想将源代码和配置分开绝对是一个好方法。正如您所说,使用As-specific部署描述符有助于保持源代码的干净性和真正的可移植性。我不得不说,没有对资源使用注释真的很遗憾。我想将源代码和配置分开绝对是一个好方法。正如您所说,使用As-specific部署描述符有助于保持源代码的干净性和真正的可移植性。我不得不说,不使用注释作为资源真的很遗憾。