Servicesクラウドみなさん、こんにちは!フリューでモバイルサイト開発を行っている鷲見といいます。現在、あるソーシャルプラットフォーム上のアプリケーションを構築するプロジェクトでの、クラウド環境の導入の進行状況をそのまま記事にしています。Javaを用いてSimpleDBを操作するプログラムについて解説しました。1ヶ月導入記』と省略表記にしています。今回はSimpleJPAを使って、プログラムからSimpleDBへの接続を行うを方法を解説したいとおもいます。API(JPA)実装です。mapping)フレームワークです。SimpleDBのドメインから取得したアイテム情報をJavaオブジェクトに変換して操作することができます。Persistence特徴SimpleJPAには以下のような特徴があります。依存するライブラリSimpleJPAは以下のライブラリに依存しています。Javaを利用しています。SimpleJPAの制限SimpleJPAはAWSのサンプルプログラムでも利用されるフレームワークですので、非常に便利なのですが、その便利さの反面制限もあります。私が利用して気づいた制限は以下のとおりです。Javaで実装することをおすすめします。ドキュメントが少なく、日本語の資料はほとんど無いというデメリットも挙げられます。ちなみに弊社プロジェクトではSimpleJPAの利用も検討しましたが、上記のような制限が多く、自由度が低かったという点で利用は見送りました。サンプルプログラム前回と同じく、東京リージョンで以下のようなドメインを作り、データを投入し、情報を取得するといったサンプルプログラムです。factory.createEntityManager();クライアントはデフォルトのままではus-eastリージョンに接続するようになっているので、東京リージョンに設定するようにリージョンの設定を行います。SimpleJPAではEntityManagerを使って、データの操作を行います。リージョン情報などの情報を設定したMapを使ってEntityManagerのFactoryを生成し、FactoryからEntityManagerを生成します。EntityManagerFactoryImpl生成時に渡している”TEST”という文字列は、ドメイン名の接頭辞に使われます。Javaを利用しているため、アカウント情報はAWSCredentials.propertiesから読み込みます。Credentials.propertiesファイルの内容は以下のようになっています。Credentials.propertiesファイルをパス上に生成しておくことで、アカウント情報を自動的に設定してくれます。Javaではデータの投入前にドメインの作成を行なっていましたが、SimpleJPAではデータの投入時にドメインが存在しない場合は、自動的にドメインを生成します。Factory生成時に”TEST”という接頭辞を渡しているため、データ投入実行時に『TEST-Employee』というドメインが生成されます。ちなみにこの接頭辞は省略することはできません。空文字を渡した場合『-Employee』というドメイン名になってしまいます。データの投入はEmployeeドメインを表すJavaオブジェクトを生成、値の設定を行い、EntityManagerのpersistメソッドに渡すだけです。ドメインを表すクラスには@Entityアノテーションを付ける必要があります。ドメインを表すクラスには必ず@Idアノテーションが付いたフィールドが必要です。@Idアノテーションが付いた項目の値がそのままアイテム名となります。サンプルプログラムでは@Idがついたidフィールドの値がアイテム名となります。(上の例では『Emp1』がアイテム名となります。APIに相当するのがEntityManagerのfindメソッドを利用します。findメソッドにはドメインを表すクラスとアイテム名を引数で渡して、該当するドメインのアイテムを取得します。APIを呼び出すためにはJPAQueryを利用します。APIに渡すのと同等のクエリを渡します。『:unit』となっているのはプレースホルダーで、QueryのsetParameterで渡した値に置き換えてくれます。SimpleDB上ではドメイン名は『TEST-Employee』となっていますが、createQueryメソッドに渡すクエリ内では『Employee』で問題ありません。内部でSimpleJPAが『TEST-Employee』に変換してくれます。}1234}finally{entityManager.close();factory.close();}SimpleJPAではEntityManagerFactoryとEntityManagerは必ずcloseメソッドを呼び出す必要があります。上記のサンプルプログラムを実行した結果は以下のとおりになります。age:26]数値型の扱いサンプルプログラムではageフィールドが数値型となっています。フィールドの値』を文字列にした値が保存されています。上記Emp1の場合は『09223372036854775839』(9223372036854775808+31)となっています。SimpleDBの制限を回避する』で紹介した基準値を決めて数値型を扱う方法で、『9223372036854775808』を基準値としています。これにより64ビットの符号付き整数を扱うことができます。9223372036854775807となっているからだと思われます。SimpleDBからデータを取得したときにはSimpleJPAが内部で通常の数値型に変換してくれます。数値型のデータを実際に見ると24桁の数値なうえ、計算しないと元の値がわからないので、データを把握しづらいので注意が必要です。まとめ今回はSimpleJPAを用いてSimpleDBを操作するプログラムを解説しました。SimpleJPAでのSimpleDBプログラミングではEntityManagerからドメインを表すオブジェクトを通じてドメインの操作を行うドメインは存在しない場合は自動的にドメインが生成されるドメイン名には接頭辞が付く@Idがついているフィールドの値がアイテム名となる数値型はSimpleDBでは『9223372036854775808』を基準値とした文字列として扱われる。いうことを確認しました。SimpleJPAをつかえばSimpleDBから簡単にJavaオブジェクトへのマッピングを行うことができます。制限も強く自由度が低くなってしまうので、利用を検討する際には、制限やデメリットを確認して、要件にマッチするかを確認することが必要です。次回以降はSimpleDBから離れ、AWSでのデータバックアップなどについてお話ししたいと思います。