RMIシリアル化によって同時にアクセスされるオブジェクトがいくつかあります。最近、カスタムシリアル化メソッドを作成しました。
/** This method is made to omit serialization of this.order */
private void writeObject(java.io.ObjectOutputStream out)
throws java.io.IOException
{
Order tmpOrder = this.order;
this.order = null;
out.defaultWriteObject();
this.order = tmpOrder;
}
private void readObject(java.io.ObjectInputStream in)
throws java.io.IOException, ClassNotFoundException
{
in.defaultReadObject();
}
同時RMIスレッドでthis.orderを台無しにすることを許可したくありません。
- writeObjectを同期させる必要がありますか?また
- RMIフレームワークは、オブジェクトへのアクセスを同期するために最善を尽くしていますか?
2番目のケースでは、同期によってRMIでデッドロックが発生する可能性もあります。JAVA APIの一般的な契約では、特に明記されていない限り、メソッドは1つのスレッドによって呼び出されます。したがって、ルールに従う必要がある場合は、writeObject
同期なしのままにしておく必要があります。これは正しいです ?
質問に答えずに私の問題に対する別の解決策は確かに宣言することprivate static final ObjectStreamField[] serialPersistentFields
です。(オブジェクトはDTOであるだけでなく、JPAエンティティでもあるため、フィールドを一時的にすることはできません)