我们遇到了一个非常难的问题。我们的域对象equals
中的DomainOrder
- 方法实现错误。问题是,域对象由我们的客户使用。所有旧版本。所以客户也必须更新。
客户端通过RMI(JEE-6)与服务器通信
我们必须尽快修复它,但客户太多了。所以我们的想法是在服务器端修复暂时问题。但我不确定它会起作用。
目前的情况,我们的结果Set
只包含一个对象,因为equals
会为不同的对象返回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经验的人可以帮助我。
答案 0 :(得分:0)
重要目标是:
- 客户将获得所有订单
醇>
这只是你重新实现equals()
的问题。
- 客户端在反序列化结果时不会出错。
醇>
这要求您不要更改相关课程的serialVersionUID
。如果没有,请在之前从serialver
工具中获取它。