9.2.7. 例
以下のように単純な例で、アクティベート、終了、コミットの関係を説明します。
例9.4 アクティベーション、終了、コミットの関係
{ . . . O1 objct1 = new objct1(Name-A);/* (i) bind to "old" persistent object A */ O2 objct2 = new objct2(); /* create a "new" persistent object */ OTS.current().begin(); /* (ii) start of atomic action */ objct1.op(...); /* (iii) object activation and invocations */ objct2.op(...); . . . OTS.current().commit(true); /* (iv) tx commits & objects deactivated */ } /* (v) */
上記のコードを実行すると、以下の順序でアクティビティが行われます。
- バインドを作成しオブジェクトを永続化します。これには、スタブオブジェクトを作成し、リモートオブジェクトを呼び出す必要があるかもしれません。上記の例では、
Name-A
にて特定された既存の永続オブジェクトおよび新規永続オブジェクトを再度バインドしています。リモートオブジェクトのネーミングシステムにより、オブジェクト名と場所のマッピングを管理しており、これについては後の章で説明しています。 - アトミックトランザクションの開始
- 操作の呼出し。特定の呼出しの一部として、このオブジェクト実装が読み取りまたは書き込みモードでロックされ、必要があれば、ロックの矛盾がない前提でオブジェクトストアからの最新のコミット状態で初期化されるようにします。トランザクションのオブジェクトでロックを初めて取得したときに、オブジェクトステートもオブジェクトストアから取得します。
- トップレベルアクションのコミット。これにはオブジェクトストアにある変更オブジェクトのステートを更新することも含まれます。
- 以前に作成したバインドを破棄