はじめに
前回、GroovyでGAEを利用する基本について説明を行いましたが、正直、「GAEを利用する」という意味はあまり感じられなかったかもしれません。別にTomcatで動かしてもよかったんじゃ...と思った方もいることでしょう。
GAEを利用する最大の利点は、「Googleが提供する各種サービスをそのままアプリケーション内から利用できる」という点にあります。今回は、主なサービスの利用について説明していきます。
対象読者
- JSPを書くのは正直しんどい...と近頃感じる人
- Ruby on Railsスタイルの開発に興味があるという人
- MVCフレームワークをJavaで学びたいという人
- JavaによるGoogle App Engineプログラミングに興味がある人
BigTableとデータストア
Googleが提供するサービスの中で、最も重要なものと言えば「データストア」でしょう。これは、Googleがサイト内で利用しているデータベース「BigTable」をアプリケーションから利用するためのものです。
BigTableは、Googleの各種サービスの根幹を支える技術の1つです。GoogleマップやYouTubeなど、Googleのサービスの多くは、BigTableによってデータ管理されています。このBigTableは、一般に広く使われているSQLを使ったリレーショナルデータベースではありません。このため、普通にSQLのクエリーを送信してアクセス...といった方法ではなく、GAEに用意されているライブラリを使用してアクセスする必要があります。これが「データストア」と呼ばれるものです。
GAEのJava版では、データストアは「JDO(Java Data Objects)」というものを利用しています。JDOはオブジェクトの永続化のために用意された仕様ですが、これをそのままデータストアで利用します。データストアのデータベースは、SQLのようにテーブルを設計してそこにレコードを書き込んで...といったものではなく、「保存したいクラスのインスタンスを作ってほいほい放り込んでおく」ようなものなのです。データストアに保管されるのは、基本的に「オブジェクト」であり、必要に応じて「このクラスのオブジェクトを全部ちょうだい」と、オブジェクトを取り出して利用します。従って、オブジェクトの永続化のためのJDOは、データストアを利用するためにまさに格好のものというわけです。
PMFクラスの用意
データストアを利用するためには、いくつかのプログラムを用意する必要があります。「PersistenceManagerFactory
」というものを準備するためのクラス、JDOを利用するための設定ファイル、実際にデータストアに保管するオブジェクトを定義したクラス、そして、実際にデータを保存したり取り出したりする処理を行うプログラム類です。
まず最初に用意するのが、PersistenceManagerFactory
を取得するためのクラスです。このPersistenceManagerFactory
は、JDOでオブジェクトを扱うための機能を提供するPersistenceManager
クラスを生成するためのものです。このPersistenceManagerFactory
インスタンスの作成には非常にコストがかかるため、アプリケーションごとに1つだけインスタンスを用意し、それを使いまわすようにします。
import javax.jdo.* class PMF { private static PersistenceManagerFactory pmfInstance = JDOHelper.getPersistenceManagerFactory("transactions-optional") static PersistenceManagerFactory get() { return pmfInstance } }
ここでは、PMF
クラスのget
メソッドで、PersistenceManagerFactory
を取得しています。PersistenceManagerFactory
を利用する場合は、常にこれを利用する形になります。
PersistenceManagerFactory
インスタンスは、JDOHelper.getPersistenceManagerFactory
メソッドを呼び出して取得しています。直接、PersistenceManagerFactory
のインスタンスを作成しないのは、そもそもPersistenceManagerFactory
はインターフェースであり、状況に応じて用意された実装クラスのインスタンスが得られるためです。