Shoeisha Technology Media

CodeZine(コードジン)

記事種別から探す

Javaで軽快に使える「軽量フレームワーク」特集
~本格的なRoRスタイルフレームワーク「Play!」(2)

第8回

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2010/01/28 14:00

 注目の軽量フレームワークをフットワーク軽く取り上げていく本連載。連載第8回目となる今回は、Javaの本格的RoRスタイルフレームワーク「Play!」の第2回として、データベースアクセスのための「モデル」と、高速開発を支援する2つのモジュールについて解説していきます。

目次

はじめに

 StrutsやJSFといった従来のJavaフレームワークは、標準でデータベース関係の機能をあまり用意していません。しかし、RoR(Ruby on Rails)以降のMVCフレームワークでは、データベースとのやりとりを行う「モデル(Model)」は重要な役割を果たしています。

 Play!は、データベースとのやりとりに「JPA(Java Persistance Architecture)」を採用しています。これはJava EEに用意されている、オブジェクトの永続化のための技術です。多くのWebアプリケーションでは、データベースとのやりとりにSQLのクエリーを送信するなどしていますが、Play!では、SQLはほとんど登場しません。「モデル(Model)」と呼ばれるクラスを定義し、そのメソッドを呼び出すだけでほとんどの操作を行うことができます。

 また、データベースを利用するようになった場合、データベースの基本操作や、特定の人間がログインして操作するようにするための仕組みなども必要になってきます。こうした機能を素早く構築する方法についてもあわせて説明しましょう。

対象読者

  • Javaで手ごろなフレームワークを探している技術者
  • 最近のフレームワークをごくざっと理解しておきたい方
  • Web開発の手法がどうも気に入らない、と常々考えているJavaプログラマ

データベースの設定

 Webアプリケーションとデータベースは切っても切り離せない関係にあります。しかし、Javaでは、これまでデータベースアクセスと言うと「JDBCでSQLのクエリーを送ってデータを取り出す」といったアプローチが一般的でした。HibernateなどのO/Rマッピングによりだいぶそのあたりの事情は変わりましたが、Strutsなどでは標準でこうした技術は組み込まれておらず、自分でそれらを組み込むなりして使わなければいけませんでした。Play!では、標準でデータベースアクセスのための機能がちゃんと用意されています。

 MVCアーキテクチャーでは、データベースとのやりとりは「モデル」によって行われます。データベース操作は、まず必要なモデル・クラスを定義し、それを呼び出すことで行うわけです。こうすることで、データベース固有の処理をプログラム本体から切り離すことができます。Play!でも、モデルを定義することが、データベース利用の基本となります。では、実際にやってみましょう。

 まずは、使用するデータベースに関する設定を用意します。Play!には、標準でHSQLというpure javaなデータベースプログラムが内蔵されており、学習レベルならこれで十分と言えるでしょう。application.confを開き、そこに次のように記述してください。

db=mem

 これは、HSQLでメモリ上にデータを保管するモードを示します。メモリに保管されますから、サーバを終了すると同時に消えてしまいます。プログラムの動作確認であれば、これで十分でしょう。データをきちんと保管したい場合は「db=fs」としてください。これはファイルにデータを保管するモードを示すものです。

 今回は使用しませんが、HSQL以外のデータベースもPlay!では使用できます。例えば、MySQL5を使う場合は、次のように設定を追記します。

db=mysql:ユーザー名:パスワード@データベース名

 いずれにせよ、ただ1行の設定を書くだけです。設定を書き換えるだけで、それ以外のプログラムはまったく変更せずにデータベースを切り替えることができます。これがモデルを利用する最大の利点でしょう。「データベースを切り替えることなんてそんなにないだろう」と思うでしょうが、例えば開発時にはダミーのデータベースを使い、正式リリース時には正規のデータベースにアクセスさせる、というようなことはよくあるのではないでしょうか。こうしたとき、コード内にSQL文が直接埋め込まれている場合、どれだけ大変か容易に想像できるでしょう。

モデルの作成

 では、モデルを作成しましょう。今回は、ごく単純なメッセージを保管するデータベースを考えてみます。名前とメモと作成日時だけを保存するシンプルなモデルを作成しましょう。「app」内の「models」フォルダ内に、新たに「MsgData.java」というソースコードファイルを作成し、次のように記述をします。

package models;

import java.util.Calendar;
import java.util.Date;
import javax.persistence.Entity;
import play.db.jpa.Model;

@Entity
public class MsgData extends Model {
	private static final long serialVersionUID = 1L;
	public String message;
	public String name;
	public Date time = Calendar.getInstance().getTime();
	
	public MsgData(String message,String name){
		this.name = name;
		this.message = message;
	}
}

 これが、今回扱うメモのデータを保管するクラスです。クラスの定義直前に「@Entity」というアノテーションが記述されています。これは、このクラスがJPAの「エンティティ」であることを示すものです。エンティティとは、Java EEで扱われるデータオブジェクトで、JPAでデータを永続化するためには、それがエンティティであることを示しておく必要があるのです。

 今回作成したMsgDataクラスは「play.db.jpa.Mode」というクラスを継承して作成しています。モデルは、このクラスを継承するのが基本と考えてください。クラス内には、messagenametimeといったフィールドがあり、ここに各データを保管します。このうち、日時であるdateはインスタンスを作る段階で既に現在の日時が保管されるようにしてあります。messagenameは、引数に渡されたものをそのまま使ってインスタンスを作成できるようコンストラクタを用意してあります。

 エンティティというのがなじみがないかもしれませんが、クラスの定義そのものはごくありふれたBeanであることが分かるでしょう。データの検索や保存などに関する処理などもまったくありません。ただ、データを保管するフィールドとコンストラクタを用意しているだけです。


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

著者プロフィール

  • 掌田 津耶乃(ショウダ ツヤノ)

    三文ライター&三流プログラマ。主にビギナーに向けたプログラミング関連の執筆活動をする傍ら、ログハウスの普及活動にいそしんでいる。(掌田津耶乃のWebサイトはこちら) ※現在、入門ドキュメントサイト「libro」、カード型学習サイト「CARD.tuyano.com」を公開中。またGoogle+プロフ...

バックナンバー

連載:Javaで軽快に使える「軽量フレームワーク」特集

もっと読む

All contents copyright © 2005-2017 Shoeisha Co., Ltd. All rights reserved. ver.1.5