2011-03-03 8 views
1

私はRMIサーバに1つの "マネージャ"クラスをエクスポートしています。 RMIクライアントはサーバに接続し、 "Manager"クラスのインスタンスを取得します。次に、 "Manager.createBox()"を呼び出してボックスを作成し、次に "Manager.getBox(0)"を呼び出してボックスを取得します。RMIはリモートオブジェクトをインスタンス化します

ここで、取得したばかりの「ボックス」に変更を加えて変更し、「Manager.getBox(0)」をもう一度呼び出すと、元のボックスが変更されずに再び取得されます。私はクライアント側でBoxに対して行った変更を「コミット」しますか?または、マネージャにメソッドを追加する必要がありますか?

答えて

2

単純なシリアライズ可能なクラスの場合、その状態は単純にシリアル化され、ワイヤで送信され、getBoxが呼び出されるとクライアント上でデシリアライズされます。したがって、クライアントは、元のものではなくボックスのコピーを変更する。

変更されたボックスをサーバー上に置く場合は、サーバーに戻すか(manager.modifyBox(box))、Boxをリモートオブジェクトにします(BoxImpl具象クラスUnicastRemoteObjectを拡張しています)。

関連する問題