0
我們有一個非常困難的錯誤。 equals
- 我們的域對象DomainOrder
中的方法實施錯誤。問題是,我們的客戶使用域對象。所有舊版本。所以客戶也必須更新。java序列化|更改服務器端的域對象實現
客戶端與服務器通過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可以幫助我。
是的,我會使用相同的'serialVersionUID' – dit
但客戶端會得到新的equals實現還是會使用他自己的舊的'DomainOrder'? – dit
@dit客戶端將在他的類路徑中獲得該類的任何版本。除非您已經在使用代碼庫功能,否則RMI無法幫助您。 – EJP