JPAを利用した RESTful Webサービスの開発 研究者 : 鎌田祐貴 指導教員 : 越田高志
1.はじめに 情報を受け取る 変化 情報を発信・提供する(Web2.0) Webサービス 移行 複雑 シンプル
研究目標 「生産工程管理システム」に 実装されているリアルタイムでの 「工程進捗管理機能」をWebサービスで 実現することを目標とする。 ユーザ HTTPサーバ ネットワーク リクエスト RESTful Webサービス GETプロトコル MySQL レスポンス
2.要素技術について REST(Representational State Transfer) リソース(URL)をHTTPプロトコルで操作する方式 主な特徴 HTTPのGETプロトコルでXMLベースの情報を受け取ることができる。 URLからHTML情報の代わりにXML情報を取得している。 利点 Webサービスを利用する際に、スタブ(クライアントプログラム)を作成する必要がない。
アノテーション機能 ソースコード中に付加された注釈情報のこと。 Javaプログラムの記述をより簡潔かつ正確にできる。 主な例 @GET @Entity @Path など・・・
JPA(Java Persistence API) O/Rマッピング Javaのクラスをテーブルに対応させ、テーブルの各行をそのクラスのオブジェクトと関連付ける。 効率よいデータベース操作が可能になる。 JPA(Java Persistence API) O/Rマッピングを実現するためのクラスライブラリ。 アノテーションを利用して、O/Rマッピングを自動化でき、記述を簡潔にできる。
3.RESTful Web サービスの開発 開発環境 フレームワーク : NetBeans6.7.1 データベース : MySQL5.1.37 HTTPサーバ : GlassFish V3 Plelude
システムの機能 MySQLのnew_jobテーブルにアクセス。 指定されたロット番号に対する工程進捗情報を表示する。 ユーザは、ブラウザにWebサービスのURLと入力パラメータを直接指定し、実行する。
開始時間、終了時間、作業者ID、機械ID new_jobテーブル 終了時間 作業者ID ロット番号 開始時間 機械ID ロット番号(作番)を指定すると、 開始時間、終了時間、作業者ID、機械ID が表示される。
MySQL JPA new_job テーブル NewJob クラス time_end id_person no_lot O/Rマッピング
Webサービスの実行について http://10.50.25.11:8080/ProTestDB/resources/ http://--:8080/Webサービス?パラメータ名=パラメータ値 http://10.50.25.11:8080/ProTestDB/resources/ newJobs? query=SELECT%20e%20FROM%20 NewJob%20e%20where%20e.Lot%3D%27 M78%27 URLのコードはUTF-8 空白 → %20 「=」 → %3D 「 ’ 」 → %27
NewJobクラスで生成されたオブジェクト JPQLの例 new_jobデータベースの作番「M78」の開始時間、終了時間、作業者ID、機械IDの全てを表示する。 SELECT e FROM NewJob e where e.Lot = 'M78' NewJobクラスで生成されたオブジェクト
Webサービスプログラムの説明 ・・・・・・・・・・・・・・ @path("/newJobs/") クラスにURLのパスを割り当てる @path("/newJobs/") public class NewJobsResource{ public NewJobsResource(){ } @GET @Produces({"application/xml"}) ・・・・・・・・・・・・・・ GETプロトコルでリソースを取得する 出力データとしてXML形式を指定する。
実行結果
デモ ロット番号「K0007」を指定する。 全てのデータを表示する。 SELECT e FROM NewJob e クエリ(JPQL) SELECT e FROM NewJob e where e.Lot='K0003' 結果の表示 全てのデータを表示する。 クエリ(JPQL) SELECT e FROM NewJob e 結果の表示
4.今後の課題 入出力画面(GUI)の作成 URLのUFT-8への自動変換 Webサービスの実行と結果の確認が容易に行えるようにする。 ユーザが自分でUTF-8のコードを入力する必要がないように、入力したクエリ文を自動的にUTF-8に変換させる。