SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Adobe Developer Connection(AD)

Google App Engine for Java + BlazeDSでハマらない方法
~Flex/AIRハマり帳(後編)~

  • このエントリーをはてなブックマークに追加

PersistenceManagerはクローズする

 もうひとつ筆者がハマった点は、「必ず PersistenceManagerをクローズしてからオブジェクトをBlazeDSに渡す」という点です。PersistenceManagerは、 Entityオブジェクトの保存に加えて、上述のような親オブジェクトから子オブジェクトへの参照取得(ナビゲーション)にともなうBigTableの読み込みを司ります。つまり、上記コードのfinally節にて記述されている「pm.close()」によってPersistenceManagerがクローズされるまでは、「EntityオブジェクトとPersistenceManagerがひも付いている状態」となります。

 この状態のままEntityオブジェクトをBlazeDSのリモート呼び出しの戻り値として渡してしまうと、リモート呼び出し時に例外が発生してしまいます(これと同様のことはHibernateにてセッションをクローズしない場合にも起こります)。よって、リモート呼び出しの戻り値は、必ず上記 finally節の外側で戻す必要があります。

主キーは「Key as Encoded String」にする

 最後の落とし穴は、Entityクラスの主キーです。Datastore APIにて主キーを定義するもっとも簡単な方法は、long型のidフィールドを用意することです。そこで筆者は当初long型のidを用いていました。しかしこのタイプの主キーでは、上述したような親オブジェクトから子オブジェクトへのナビゲーションに対応していません。親から子へのナビゲーションを使うには、BigTableにおける主キーを表す「com.google.appengine.api.datastore.Key」型のフィールドを設ける必要があります。

 しかし、これでも不具合があります。このKey型のフィールドは、BlazeDSにてAMFのシリアライズを実施すると、キーの内容が失われてしまうのです。そこで筆者はさらに修正を加えて、Datastore APIのドキュメント上で「Key as Encoded String」と分類されている方法で主キーを実装しました。これは、上記のKeyオブジェクトの内容をString型にエンコードする方法で、主キーのフィールドには以下のようなアノテーションを追加します。

@Extension(vendorName="datanucleus", key="gae.encoded-pk", value="true")
              
private String key;

 これによって、やっとEntityクラスの主キーを無事にFlexクライアントにも渡すことが可能となりました。

 以上、本稿では「ご都合.com」の開発を通じて筆者が得た「GAE/J+BlazeDS」のtipsを紹介しました。ここで紹介した落とし穴さえ避ければ、この2つの技術のコンビはじつに強力な生産性を発揮します。ぜひ皆さんもお試しください。

「FlexではじめるRIA開発」特集、絶賛公開中!

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
Adobe Developer Connection連載記事一覧

もっと読む

この記事の著者

スティルハウス 吉川和巳(ヨシカワカズミ)

テクニカルライター。Adobe FlexおよびAIRなどのリッチ・インターネット・アプリケーション分野をはじめ、Javaサーバサイド・プログラミング、データベース開発、仮想化技術などを中心に執筆活動を行っている。また技術文書や書籍の翻訳も手がけており、翻訳書に「XML構築ガイド」(ピアソンエデュケー...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/4629 2009/11/26 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング