java连载 |在服务器端更改域对象实现
java serialisation | change domain object implementation on server side
我们遇到了一个非常棘手的错误。 equals
- 我们域对象 DomainOrder
中的方法实施错误。问题是,域对象被我们的客户使用,包括。所有旧版本。所以客户端也必须更新。
客户端通过 RMI (JEE-6) 与服务器通信
我们必须尽快修复它,但是客户太多了。所以我们的想法是暂时在服务器端解决这个问题。但我不确定它是否有效。
当前情况,我们的结果 Set
只包含一个对象,导致 equals
returns true
对于不同的对象:
[...]
List<DBOrder> list = orderService.getOrders(criteria);
Set<DomainOrder> orders = new HashSet<>();
for(DBOrder dborder : list){
orders.add(convertDBOrderToDomain(dborder)); // mapping new DomainOrder(..)
}
[...]
我如何在服务器端修复它:
List<DBOrder> list = orderService.getOrders(criteria);
Set<DomainOrder> orders = new HashSet<>();
for(DBOrder dborder : list){
final DomainOrder domainOrder = convertDBOrderToDomain(dborder);
// temp fix for all old versions.
orders.add(new DomainOrder(){
private DomainOrder delegate = domainOrder ;
@Override
public Long getId(){
return delegate.getId();
}
[...]
@Override
public boolean equals(){
return [fix];
}
});
}
那么你认为它会起作用吗? iImportant 目标是:
- 客户将获得所有订单
- 客户端在反序列化结果时不会出现错误。
我希望在 java 序列化和 RMI 方面有经验的人可以帮助我。
The important goals are:
- The client will get all Orders
这只是您如何重新实现 equals()
的问题。
- The client will get NO error on deserialization of result.
这要求您不要更改相关 class 的 serialVersionUID
。如果没有,请在 serialver
工具 更改它之前 获取它。
我们遇到了一个非常棘手的错误。 equals
- 我们域对象 DomainOrder
中的方法实施错误。问题是,域对象被我们的客户使用,包括。所有旧版本。所以客户端也必须更新。
客户端通过 RMI (JEE-6) 与服务器通信
我们必须尽快修复它,但是客户太多了。所以我们的想法是暂时在服务器端解决这个问题。但我不确定它是否有效。
当前情况,我们的结果 Set
只包含一个对象,导致 equals
returns true
对于不同的对象:
[...]
List<DBOrder> list = orderService.getOrders(criteria);
Set<DomainOrder> orders = new HashSet<>();
for(DBOrder dborder : list){
orders.add(convertDBOrderToDomain(dborder)); // mapping new DomainOrder(..)
}
[...]
我如何在服务器端修复它:
List<DBOrder> list = orderService.getOrders(criteria);
Set<DomainOrder> orders = new HashSet<>();
for(DBOrder dborder : list){
final DomainOrder domainOrder = convertDBOrderToDomain(dborder);
// temp fix for all old versions.
orders.add(new DomainOrder(){
private DomainOrder delegate = domainOrder ;
@Override
public Long getId(){
return delegate.getId();
}
[...]
@Override
public boolean equals(){
return [fix];
}
});
}
那么你认为它会起作用吗? iImportant 目标是:
- 客户将获得所有订单
- 客户端在反序列化结果时不会出现错误。
我希望在 java 序列化和 RMI 方面有经验的人可以帮助我。
The important goals are:
- The client will get all Orders
这只是您如何重新实现 equals()
的问题。
- The client will get NO error on deserialization of result.
这要求您不要更改相关 class 的 serialVersionUID
。如果没有,请在 serialver
工具 更改它之前 获取它。