4.9.8. 发布之间的 JMS 序列化行为变化


JMS 1.1 和 JMS 2.0.0 之间更改了 javax.jms.JMSExceptionserialVersionUID。这意味着,如果 JMSException 或其子 类的实例使用 JMS 1.1 进行序列化,它就无法使用 JMS 2.0.0 进行反序列化。反之亦然。如果 JMSException 实例使用 JMS 2.0.0 序列化,它就无法使用 JMS 1.1 进行反序列化。在这两种情况下,它会引发类似如下的异常:

javax.jms.JMSException: javax.jms.JMSException; local class incompatible: stream classdesc serialVersionUID = 8951994251593378324, local class serialVersionUID = 2368476267211489441
Copy to Clipboard Toggle word wrap

这个问题已在 JMS 2.0.1 维护版本中解决。

下表详细介绍了 JBoss EAP 的每个发行版本的 JMS 实施。

Expand
表 4.4. 每个 JBoss EAP 版本的 JMS 实施
JBoss EAP 版本JMS 实施JMS 版本

6.4

HornetQ

JMS 1.1

7.0

Apache ActiveMQ Artemis

JMS 2.0.0

7.1 及更新的版本

Apache ActiveMQ Artemis

JMS 2.0.1 或更高版本

请注意,在以下情况下,serialVersionUID 不兼容可能会导致迁移问题:

  • 如果您使用 JBoss EAP 6.4 客户端发送包含 JMSException 的消息,将消息传递数据迁移到 JBoss EAP 7.0,然后尝试使用 JBoss EAP 7.0 客户端对该消息进行反序列化,则取消序列化将失败,它将引发异常。这是因为 JMS 1.1 中的 serialVersionUID 与 JMS 2.0.0 中的 不兼容
  • 如果您使用 JBoss EAP 7.0 客户端发送包含 JMSException 的消息,将您的消息传递数据迁移到 JBoss EAP 7.1 或更高版本,然后尝试使用 JBoss EAP 7.1 或更高版本以降序该消息,则反序列化将失败,它将引发异常。这是因为 JMS 2.0.0 中的 serialVersionUID 与 JMS 2.0.1 或更高版本中的 serialVersionUID 不兼容

请注意,如果您发送一条消息中包含使用 JBoss EAP 6.4 客户端的 JMSException,将您的消息传递数据迁移到 JBoss EAP 7.1 或更高版本,然后尝试使用 JBoss EAP 7.1 或更高版本的客户端对该消息进行反序列化,因为 JMS 1.1 中的 serialVersionUID 与 JMS 2.0.1 或更高版本中的 serialVersionUID 兼容。

重要

红帽建议您在迁移消息传递数据前执行以下操作:

  • 在将消息传递数据从 JBoss EAP 6.4 迁移到 JBoss EAP 7.0 之前,务必先使用包含 JMSExceptions 的所有 JMS 1.1 消息。
  • 在将消息传递数据从 JBoss EAP 7.0 迁移到 JBoss EAP 7.1 或更高版本之前,务必先使用包含 JMSExceptions 的所有 JMS 2.0.0 消息。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat