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

这个问题已在 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

© 2026 Red Hat
返回顶部