jms和枚举的不同版本

问题描述

| 我的团队通过jms为公司中的另一个团队提供服务。这涉及到一个枚举,该枚举作为较大对象的一部分传递给我们。他们很快将更改枚举的定义-但是,我想先更改它,以便在更改前几天将我们的服务投入生产。更改将只涉及在末尾添加另一个常量。 我可以安全地这样做吗?     

解决方法

从Java Object Serialization Specification 6.0版开始(重点是我的):   枚举常量的序列化形式仅由其名称组成; [...]。要序列化枚举常量,
ObjectOutputStream
写入由枚举常量的
name
方法返回的值。要反序列化枚举常量,
ObjectInputStream
从流中读取常量名称;然后,通过调用java.lang.Enum.valueOf方法,将常量的枚举类型与接收到的常量名称一起作为参数来获取反序列化的常量。 这意味着: 在序列化中向
enum
添加新值是向后兼容的 对现有
enum
值进行重新排序是向后兼容的(与使用
ordinal()
的默认JPA
enum
持久性策略相反) 从ѭ3中删除值通常不向后兼容,因为删除的值可能已用于序列化目的 重命名
enum
值不向下兼容(请参见上文)     ,如果我理解正确,则包含枚举的对象将作为ObjectMessage的一部分发送。在这种情况下,它使用常规的Java序列化对枚举对象进行编码和解码。 枚举的序列化按名称进行-实际上,它们正在发送枚举值的名称(连同其类的标识符)。只要实际发送的值存在于另一接收方,就不会有问题。 当然,您必须确保消息的含义不会因更改而改变。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...