恐らく、今日はGetとTransactionを読む予定になると思いますが、
Queryについても読み進めておく必要がありそうです。
まず、Getから。
GetはDatastore.java835行目の
public static <M> M get(Class<M> modelClass, Key key)
から読み進める事になると思います。
getメソッドの中では、メンバに持っているDatastoreDelegate#getが呼び出されます。(838行目)
これは、putの時と同じです。
DatastoreDelegate#getはいくつかメソッドがありますが、
748行目→769行目→771行目でカレントのトランザクションを取得し、
カレントのトランザクションを利用して1099行目を呼び出します。
1099行目のgetも、中身は非同期のgetAsync()を呼び出すだけです。
return FutureUtil.getQuietly(async.getAsync(tx, modelMeta, key));
FutureUtil.getQuietly()はFuture#get()を呼び出し、非同期の結果を受け取る+例外をキャッチするのみですので、結局「非同期で処理されるのを待つ」という感じでしょうか。
(これは2回目で読んだPutと同じです)
async変数はAsyncDatastoreDelegateクラスなのでそちらに進みます。
AsyncDatastoreDelegate#getAsync()はAsyncDatastoreDelegate.javaの630行目に
あります。
この中では、560行目のgetAsync()をwrapしているだけです。
560行目のgetAsync()は、中で1439行目のgetAsMapAsync()を呼び出します。
ここでは、DatastoreUtil#getAsMapAsync()を呼び出しているだけです。
DatastoreUtil#getAsMapAsync()はAsyncDatastoreService.getを呼び出し、データストアから実際に読み取ります。
ここまでの流れです。
- Datastore#get()からDatastoreDelegate#get()を呼び出す
- 748→769→771で、カレントのトランザクションを取得し、1099行目
- FutureUtil.getQuietly(async.getAsync())
- AsyncDatastoreDelegate.javaの630→560
- 1439行目のgetAsMapAsync()を呼び出す。
- DatastoreUtil.getAsMapAsync()を呼び出す。
- AsyncDatastoreService#get(tx, keys)
エンティティ→modelへの変換はAsyncDatastoreDelegateの640行目で
行われています。
この時点で、データストアから読みだしたタイミングで値を編集するpostGet()も呼び出されます。
明日以降の授業の準備もあるので、今日はここまで。
0 件のコメント:
コメントを投稿