カスタムタグからPolymorphicModelなモデルをDatastore.queryすると怒られる

カスタムタグのクラス内でDatastore.queryしたときに、検索対象のクラスがPolymorphicModelだと次のエラーが出る。GAEにdeployすると問題なし。Aはクラス名で、共に同じものが入る。ちなみにPolymorphicModelじゃない通常のモデルだと、カスタムタグのクラスから普通に検索できていた。

IllegalArgumentException The model class(A) is not assignable from entity class(A)

問題はDatastoreUtilのgetModelMetaメソッドで発生する。
PolymorphicModelじゃなければ、classHierarchyListがnullなので問題ない。PolymorphicModelの場合は次のif文でClass#isAssignableFromを用いて本当にサブクラスかチェックしているのだけれど、そこでチェックに失敗し例外が出る。クラス名を見る限り同じ名前なのでなぜチェックに失敗するのかは不明。Slim3はアクセス毎にクラスローダを生成するとのことで、それ関連かな?同じ名前だけど内部的には違ってるとか。

CoolクラスからHotクラスにアクセスした際に出る「CoolBridge使えよ!」と言ういつものエラーではないのでとまどうかもしれないけれど、CoolBridgeを使うことで問題は解決する。

PolymorphicModelじゃ無ければ問題が出ないのが何かスッキリしないけどまぁいいや。

なおSlim3のバージョンは1.0.6。

No Comments

Post a Comment

コメントを投稿するには、下の計算の答えを入力する必要があります。答えは半角数字で入力してください。 * Time limit is exhausted. Please reload the CAPTCHA.