feature pack for web2.0 / osgi / jpa2public.dhe.ibm.com/software/dw/jp/websphere/was/... · 07....
TRANSCRIPT
2
2 WAS V7 最新動向WorkshopWAS V7 最新動向Workshop
07. Feature Pack for Web2.0 / 07. Feature Pack for Web2.0 / OSGiOSGi / JPA2.0/ JPA2.0
Disclaimerこの資料は日本アイ・ビー・エム株式会社ならびに日本アイ・ビー・エム システムズ・エンジニアリング株式会社の正式なレビューを受けておりません。
当資料は、資料内で説明されている製品の仕様を保証するものではありません。
資料の内容には正確を期するよう注意しておりますが、この資料の内容は2010年12月現在の情報であり、製品の新しいリリース、PTFなどによって動作、仕様が変わる可能性があるのでご注意下さい。
今後国内で提供されるリリース情報は、対応する発表レターなどでご確認ください。
3
3 WAS V7 最新動向WorkshopWAS V7 最新動向Workshop
07. Feature Pack for Web2.0 / 07. Feature Pack for Web2.0 / OSGiOSGi / JPA2.0/ JPA2.0
Agenda
§1. WAS Feature Packとは
§2. Web 2.0 FP
§3. OSGi FP
§4. JPA 2.0 FP
4
4 WAS V7 最新動向WorkshopWAS V7 最新動向Workshop
07. Feature Pack for Web2.0 / 07. Feature Pack for Web2.0 / OSGiOSGi / JPA2.0/ JPA2.0
§1. WAS Feature Packとは
5
5 WAS V7 最新動向WorkshopWAS V7 最新動向Workshop
07. Feature Pack for Web2.0 / 07. Feature Pack for Web2.0 / OSGiOSGi / JPA2.0/ JPA2.0
WAS Feature Packとは
WAS V7に特定のテーマに沿った最新/拡張機能を追加– WAS V7上に追加インストール
WASのライセンスをお持ちのお客様に無償で提供
Passport Advantageによる正式サポート対象
Web 2.0 Feature Pack
OSGiFeature Pack
WAS V7
OSGiをご利用になりたいお客様
Web 2.0をご利用になりたいお客様
V7の現状機能を維持したいお客様
WAS Feature Packとは、WASのバージョン・アップをすることなく、新機能を追
加するオプションの追加モジュールです。
特定のテーマごとにFeature Packとして提供されますので、必要な機能のみを追
加することができます。
WASのライセンスをお持ちであれば、追加のライセンスは必要なく、無償で利用することができます。また、正式な製品の一部ですので、Passport Advantageによる正式サポートがあります。
6
6 WAS V7 最新動向WorkshopWAS V7 最新動向Workshop
07. Feature Pack for Web2.0 / 07. Feature Pack for Web2.0 / OSGiOSGi / JPA2.0/ JPA2.0
現在WAS V7で提供されているFeature Pack
2009 2010
WAS V7WAS V710月 V7.0.0.13
Web 2.0Web 2.0 V1.0.1
XMLXML
Service Component Architecture (Service Component Architecture (SCASCA)) V1.0.1
Dynamic Dynamic ScriptingScripting
OSGiOSGi Applications and Java Persistence API (Applications and Java Persistence API (JPAJPA) ) 2.02.0
Modern Modern BatchBatch
Communications Enabled Applications (Communications Enabled Applications (CEACEA))
2008
3月
11月
8月
11月
3月
6月
10月
12月
10月
V1.0.1.9
V1.0.0.7
V1.0.0.7
V1.0.0.1
V1.0.1.1
WAS V7のFeature Packは、現在7つ提供されています。
このセッションでは、Feature Pack for Web 2.0 (以下、Web 2.0 FP) と、Feature Pack for OSGi Applications and JPA 2.0 (以下、OSGi FPとJPA 2.0 FP) について紹介します。次のセッションで、Feature Pack for Modern Batchと、Feature Pack for Service Component Architecture (SCA) について紹介します。
各Feature Packごとにバージョンがあり、WAS本体とは別にFix Packも提供されます。
最新のFeature Packについては、下記のサイトを参照ください。
WAS Support「Feature packs by version for WebSphere Application Server」http://www-01.ibm.com/support/docview.wss?uid=swg27008534
7
7 WAS V7 最新動向WorkshopWAS V7 最新動向Workshop
07. Feature Pack for Web2.0 / 07. Feature Pack for Web2.0 / OSGiOSGi / JPA2.0/ JPA2.0
§2. Web 2.0 FP
8
8 WAS V7 最新動向WorkshopWAS V7 最新動向Workshop
07. Feature Pack for Web2.0 / 07. Feature Pack for Web2.0 / OSGiOSGi / JPA2.0/ JPA2.0
Web 2.0 FP機能概要
JavaScriptライブラリー
– Dojo toolkit 1.4/1.5
サーバー・サイドAjaxサポート
– JAX-RS– JSON Library– Ajax Proxy– RPC Adapter– Webメッセージング
– Feedサポート
Ajax(JavaScriptAjax(JavaScript/REST)/REST)の使用の使用・・ 対話型、差別化された対話型、差別化されたUIUIや操作性や操作性・・ ブラウザー側での非同期処理による早い応答、ブラウザー側での非同期処理による早い応答、
ユーザー処理中断の削減ユーザー処理中断の削減
V1.0.1New
V1.0.1/V1.0.1.1
Update
•• カスタマー・ロイヤリティーの向上カスタマー・ロイヤリティーの向上•• サイト滞在時間向上、ファン獲得サイト滞在時間向上、ファン獲得
•• エンド・ユーザーの生産性の向上エンド・ユーザーの生産性の向上
Ajax
Web 2.0 FPは、Dojo toolkitと、サーバー・サイドでAjaxをサポートする各種機能を提供します。
Ajaxとは、ブラウザー内で非同期通信を行い、ユーザーの処理を中断することなくダイナミックにページの一部を書き換えることで、ユーザー・エクスペリエンスの高いインターフェースを実現する概念です。
Dojo toolkitを使用することで、容易にAjax通信を行なえるだけでなく、ブラウザー上で稼動する多くのリッチなUIのJavaScript部品も使用することができます。また、DojoやAjaxを使用すると、ブラウザー側に別途プラグインは必要なく、ブラウザーの機能のみで実現できるという特徴もあります。
DojoとAjaxを使用することで、差別化されたサイトやユーザーの処理の中断の少ないサイトを構築することができますので、カスタマー・ロイヤリティーの向上や生産性の向上につながります。
Web 2.0 FPが提供する各コンポーネントの概要は下記のページを参照ください。
IBM Software「WebSphere Application Server Feature Pack for Web 2.0」http://www-01.ibm.com/software/webservers/appserv/was/featurepacks/web20/
Ajax/RESTを採用するメリットは、下記の記事も参考になります。
DeveloperWorks-Japan「Ajax と REST、第 1 回」
http://www.ibm.com/developerworks/jp/web/library/wa-ajaxarch/DeveloperWorks-Japan「Ajax と REST、第 2 回」
http://www.ibm.com/developerworks/jp/web/library/wa-ajaxarch2.html
9
9 WAS V7 最新動向WorkshopWAS V7 最新動向Workshop
07. Feature Pack for Web2.0 / 07. Feature Pack for Web2.0 / OSGiOSGi / JPA2.0/ JPA2.0
Dojo toolkit (1/2)
JavaScriptライブラリー– リッチUIの追加
– JavaScript/DHTML/Ajaxの実装の簡略化
– ブラウザーごとのDOM操作などJavaScriptの動作の差異の吸収
JavaScriptJavaScriptの開発を簡単にの開発を簡単に!!!!開発生産性の向上開発生産性の向上
例・レイアウト・コンテナ・データ・グリッド・インタラクティブなフォーム
Dojo toolkitはJavaScriptライブラリーであり、Webアプリケーションにリッチなユーザー・インターフェースを追加したり、JavaScript/DHTML/Ajaxの実装を容易に行なうことができます。また、JavaScriptの実装においては、ブラウザーごとに差異が
多くあり、クロスブラウザーへの対応に多くの労力が必要になりますが、そのような差異をDojoが吸収してくれます。これにより、JavaScriptを使用したインタラクティブ
なページの開発生産性を向上することができます。
さまざまなDojoが提供するUI部品やDojoの詳細は下記サイトを参照ください。
Dojo toolkithttp://dojotoolkit.org/DeveloperWorks-Japan「WAS Feature Pack for Web 2.0 ワークショップ資料」-「02 Dojo」http://www.ibm.com/developerworks/jp/websphere/library/was/was_web20fep_ws/
10
10 WAS V7 最新動向WorkshopWAS V7 最新動向Workshop
07. Feature Pack for Web2.0 / 07. Feature Pack for Web2.0 / OSGiOSGi / JPA2.0/ JPA2.0
Dojo toolkit (2/2)
Dojoを使用したAjax通信Dojoなし Dojoあり
<script type="text/javascript">function loadJSON(){
var httpObj;if (window.ActiveXObject){ //IE用
try {httpObj = new ActiveXObject(“Msxml2.XMLHTTP”); //IE V6以降
} catch (e){try{httpObj = new ActiveXObject(“Microsoft.XMLHTTP”); //IE V6以前
} catch (E){ }}
} else if (window.XMLHttpRequest) { //IE以外try {httpObj = new XMLHttpRequest();
} catch (e){ }}httpObj.onreadystatechange = function() {
if ((httpObj.readyState == 4) && (httpObj.status == 200)){var jsonobj = eval("("+httpObj.responseText+")");document.getElementById("result").value = jsonobj.msg;
} else { }}httpObj.open("GET","jaxrs/hello/myName",true);httpObj.send(null);
}</script>
<script type="text/javascript" src="/contextRoot/dojo/dojo/dojo.js" djConfig="parseOnLoad: true"></script>
<script type="text/javascript">function loadJSON(){dojo.xhr("GET", {
url:"jaxrs/hello/myName",handleAs:"json",load: function(data,ioargs){
var jsonobj = dojo.fromjson(data);dojo.byId("result").value = jsonobj.msg;
},error: function(error,ioargs) { }
});}</script>
ブラウザーの差異を吸収ブラウザーの差異を吸収
Dojoを使用した場合と、Dojoを使用しなかった場合でのAjax通信を行なうときのコード例です。Dojoを使用せず、JavaScriptのコードを直接記述した場合には、ブラウザーごとの差異を考慮して開発する必要があります。Dojoを使用することで、IEとその他のブラウザーなどのブラウザーの違いに悩まされることなく開発を行なうことができます。
Dojoを使用したAjax開発については、下記のワークショップ資料も参考になりますので、ご参照ください。
DeveloperWorks-Japan「WAS V7 アプリケーション・デザイン・ワークショップ資料」-「3. プレゼンテーション層設計(Ajax/Dojo)」http://www.ibm.com/developerworks/jp/websphere/library/was/was7_app_design/
11
11 WAS V7 最新動向WorkshopWAS V7 最新動向Workshop
07. Feature Pack for Web2.0 / 07. Feature Pack for Web2.0 / OSGiOSGi / JPA2.0/ JPA2.0
RESTful Webサービス
REST (Representational State Transfer)– Webのアーキテクチャー・スタイル
– リソース指向• サーバーにあるリソース (情報の断片) に対してオペレーションを実行• 各リソースは、ユニークなURIにより識別• HTTPを利用した統一インターフェース
– 処理命令はHTTPメソッドを使用– 処理結果はHTTPステータスコードを使用
• HTMLだけでなくXMLやJSON、RSS/Atomも使用
– ステートレス (アプリケーション状態を持っていない)
Aさんの社員情報
リソース: Aさんの社員情報URL: http://xxx.com/employee/A
Aさんの
情報を取得
Aさんの
情報を更新
GET http://xxx.com/employee/A
JSONAさんの情報
PUT http://xxx.com/employee/A
XMLAさんの情報
HTTP
HTTP
AjaxAjax通信では、クライアント・サイドにロジックが移り、通信では、クライアント・サイドにロジックが移り、データのみの通信となりデータのみの通信となりRESTfulRESTfulな通信が行なわれるな通信が行なわれる
RESTとは、Webのアーキテクチャーです。HTTPプロトコル規格の著者の一人であるRoy Fieldingが書いた博士論文にはじめて現れ、広く使用されています。
RESTには、ユニークなURIによって識別されるリソースに対してオペレーションを
実行するというリソース指向という特徴があります。また、このオペレーションの実行には、“GET”、“POST”、“PUT”、“DELETE” などのすでにHTTPで規定されている
少数のオペレーションを用い、サーバー側でステートを保持しないステートレスな情報の交換を行ないます。このようなRESTアーキテクチャーにしたがって情報交換
を行なうことで、汎用的で、拡張性の高いシステムを構築することが可能です。
通常のHTMLを交換するWebシステムと比較して、 Ajax通信においては、クライアント側にロジックが移り、サーバー側でセッション情報を保持する必要性が小さくなり、必要な情報のみをやり取りするようになります。Ajax通信においては、よりRESTアーキテクチャーに従ったスタイルでの情報交換が可能になり、また、推奨さ
れます。
12
12 WAS V7 最新動向WorkshopWAS V7 最新動向Workshop
07. Feature Pack for Web2.0 / 07. Feature Pack for Web2.0 / OSGiOSGi / JPA2.0/ JPA2.0
Java EEとREST
難しそう
Servletで開発するの?
JSONって簡単に送受信できるの?
フォーム・データ以外の受信って面倒
では?
独自のフレームワークが必要?
JAXJAX--RSRS標準標準APIAPI登場登場 (Java EE 6(Java EE 6に含まれるに含まれる))
Java EEのサーバー・サイドのアプリケーションで、Ajax/REST通信を処理することに、どのようなイメージを持っていますでしょうか? これまでの、サーブレットやJSPを使用して、フォーム・データのGET/POST要求を受信して、HTMLを応答するの
とは異なりますので、不安な点があるかと思います。
Java EEの世界で、RESTfulな通信を行なう標準仕様/APIとしてJAX-RSが規定されました。JAX-RSを使用することで、容易にRESTfulなWebサービスを開発することができます。また、JAX-RSはJava EE 6に含まれる仕様ですが、Web 2.0 FPを使用することで、Java EE 5に準拠するWAS V7上で、JAX-RSを使用することが
できます。
(注) Web 2.0 FPは、WAS V6.0以降に適用することが可能ですが、JAX-RSはアノテーションの使用を前提とした仕様であり、JDK 1.4で稼動するWAS V6.0ではJAX-RSを使用することはできませんので、ご注意ください。WAS V6.1の場合は、JAX-RSも使用できます。
13
13 WAS V7 最新動向WorkshopWAS V7 最新動向Workshop
07. Feature Pack for Web2.0 / 07. Feature Pack for Web2.0 / OSGiOSGi / JPA2.0/ JPA2.0
JAX-RSとは
JAX-RS (Java API for RESTful Web Services) / JSR 311– RESTful WebサービスをJavaによって実現するための仕様
• XMLやJSONなどのHTTP要求/応答をPOJO+アノテーションで処理
• URI、HTTPヘッダー情報をPOJOのメソッド引数などにインジェクション
• 仕様では、RESTful WebサービスのプロバイダーAPI/コンテナ実装を規定
従来のWeb JAX-RS
Servlet/JSP
Servlet/JSP
JAX-RSResource
Class(POJO)
JAX-RSResource
Class(POJO)
JAX-RSResource
Class(POJO)
GET /aaa
HTML
POST /bbb + FormData
HTML
GET /aaa
JSON/XML
GET /bbb + queryParam
JSON/XML
PUT /ccc + JSON/XML
JSON/XML
RESTfulRESTfulななWebWebサービスを容易に開発サービスを容易に開発
URIとPOJOのマッピングを
アノテーションで指定
GET/POSTだけでなくPUT/DELETEも
容易に操作
HTTPヘッダーやパラメータも容易に操作
JSONやXMLとJavaBeanの変換は
Engineが実施
JSR 311で規定されたJAX-RS (Java API for RESTful Web Services) 1.0/1.1は、JavaにおけるRESTful Webサービスの実装/APIを規定したものです。Java EE 6に含まれる仕様の一つです。Web 2.0 FP V1.0.1を使用するとJAX-RS 1.0が利用可能になります。
JAX-RSでは、HTTPのリクエスト/レスポンスを直接操作するのではなく、抽象化されたAPIによって、RESTful Webサービスを容易に作成可能です。Java EEでRESTスタイルのWebサービスを作成する場合は、通常JAX-RSを利用することに
なると思われます。
14
14 WAS V7 最新動向WorkshopWAS V7 最新動向Workshop
07. Feature Pack for Web2.0 / 07. Feature Pack for Web2.0 / OSGiOSGi / JPA2.0/ JPA2.0
JAX-RSコード概説
REST HTTPREST HTTPデータを容易データを容易&&自由に操作自由に操作
package com.ise;
import javax.ws.rs.*;import com.ibm.json.java.JSONObject;
@Path("hello")public class MyJSONResource {
@Path("{lang}")@PUT@Produces("application/json")public JSONObject echoHello(
@PathParam("lang") String lang,JSONObject namejson){
String name = (String)namejson.get("name"); JSONObject respjson = new JSONObject();if(lang.equals("EN")){
respjson.put("greet", "Hello "+name+" !");}else if(lang.equals("JA")){
respjson.put("greet", "こんにちは "+name+"。");}return respjson;
}}
Javaクラス/メソッドに対応するURIとHTTP
メソッドを指定
URI情報やクエリーパラメーター、HTTPヘッダー情報はメソッド引数にインジェクション
リクエスト/レスポンスのEntityボディー情報はメソッドの引数やリターンのJava
オブジェクトに自動的にマッピング
リクエスト
レスポンス
PUT /HelloJSONWeb/jaxrs/hello/EN HTTP/1.1Accept: application/jsonContent-Type: application/json; charset=UTF-8
{"name": "Bob"}
HTTP/1.1 200 OKContent-Type: application/json
{"greet":"Hello Bob !"}
JAX-RSのコード例
JAX-RSのコード開発の概要です。JAX-RSでは、RESTリクエスト/レスポンスを処理するクラス/メソッドをPOJOで開発を行ないます。このクラス/メソッドはそれぞれリソース・クラス/リソース・メソッドと呼ばれます。このクラス/メソッドが処理するURIとHTTPメソッドを@PATHや@HTTP_Method_Nameのアノテーションで指定します。サーブレットのdoGet、doPostメソッドをアノテーションで指定するようなイメージです。URIの指定には、固定値だけでなく、変数や正規表現での指定も可能です。上記の例では、http://hostname:port/ContextRoot/servlet_mapping/hello/{変数(任意の文字列)} のURIに対するリクエストをechoHelloメソッドが処理します。
HTTPのエンティティー・ボディーのデータは、リソース・メソッドの引数と戻り値のJavaのオブジェクトに自動的にマッピングされます。上記の例では、JSONデータをWeb 2.0 FPが提供するJSON4Jのオブジェクトにマップしています。JSON4JのJSONObjectは、Mapを継承したクラスであり、キーに対する値を容易に取得/設定することができます。
また、HTTPのURIの情報や、パラメーター(クエリー・パラメータやフォーム・データ)、HTTPヘッダー情報は、リソース・メソッドの引数にアノテーションで指定することでインジェクションすることができます。上記の例では、URI情報の取得として、@Pathで使用した{lang}の変数(/hello/に続く任意の文字列)を@PathParamアノテーションを使用してインジェクションを行なっています。
開発の詳細は、APIドキュメントや下記のInfoCenter、DeveloperWorksのガイドを参照ください。
Web 2.0 FP InfoCenter「JAX-RS Web アプリケーションの計画」
http://publib.boulder.ibm.com/infocenter/wasinfo/v7r0/topic/com.ibm.websphere.web20fepjaxrs.doc/info/ae/ae/container_wbs_jaxrs_goal_planning.htmlDeveloperWorks-Japan「WAS Feature Pack for Web 2.0によるJAX-RSアプリケーション開発ガイド」
http://public.dhe.ibm.com/software/dw/jp/websphere/was/was7_fep_guide/fpguide_web20.pdf
JSON4JのAPIについては、下記のAPIドキュメントを参照ください。
Web 2.0 FP InfoCenter「JSON4JライブラリーAPI」http://publib.boulder.ibm.com/infocenter/wasinfo/v7r0/topic/com.ibm.json.help/javadoc/index.html
15
15 WAS V7 最新動向WorkshopWAS V7 最新動向Workshop
07. Feature Pack for Web2.0 / 07. Feature Pack for Web2.0 / OSGiOSGi / JPA2.0/ JPA2.0
JAX-RSのWAS上での動作
WAR設定– web.xmlにIBM REST Servletを指定
• servlet/init-param経由でリソース・クラスを指定
– JAX-RSのライブラリーをWEB-INF/libディレクトリーに配置
インフラ設定– Web 2.0 FPの適用以外には、特別な設定は必要なし– JAX-RSのライブラリーを共用ライブラリーに指定する場合は、共用ライブラリーの設定
HTTPクライアント
WAS with Web 2.0 FPWebコンテナ
WASJAX-RS エンジン
WASREST
Servlet
サービスロジック
リソースクラス
リソースメソッド
インジェクション
リクエストプロセッサー
コール
リターン
・リクエストの解析
・データフォーマット変換
・レスポンス生成
コール
リターン
HTTPリクエスト
HTTPレスポンス
データ
データ
データ
データ
・・・ 開発が必要なもの
JAX-RSのクラスがランタイムによって呼び出される動作は上記のようになります。WAS REST Servlet (com.ibm.websphere.jaxrs.server.IBMRestServlet) がRESTリクエストを受信し、リクエスト・プロセッサーがリクエストを解析し、呼び出すリソース・クラス/リソース・メソッドを判別します。また、リソース・メソッドの引数となるデータのJavaオブジェクトへのデシリアライズや、要求パラメーターのインジェクションを行ないます。
WARをパッケージングするときに、web.xmlのサーブレットとして、IBM REST Servletを指定します。また、リソース・クラスの一覧を表すjavax.ws.rs.core.Applicationクラスを継承したクラス(Applicationサブクラス)を作成し、web.xmlのサーブレットのinit-paramで指定します。Applicationサブクラスと、web.xmlの指定例は下記のようになります。
・Applicationサブクラスの例-------------------------------------------package com.ise;
import java.util.Set;import java.util.HashSet;import javax.ws.rs.core.Application;
public class MyApplication extends Application {@Overridepublic Set<Class<?>> getClasses() {
Set<Class<?>> classes = new HashSet<Class<?>>();classes.add(com.ise.MyJSONResource.class);return classes;
}}------------------------------------------------------------------------------
16
16 WAS V7 最新動向WorkshopWAS V7 最新動向Workshop
07. Feature Pack for Web2.0 / 07. Feature Pack for Web2.0 / OSGiOSGi / JPA2.0/ JPA2.0
ノート続き
・web.xmlのIBM REST ServletとApplicationサブクラスの指定例---------------------------------------<servlet>
<servlet-name>JAX-RS Servlet</servlet-name><servlet-class>com.ibm.websphere.jaxrs.server.IBMRestServlet</servlet-class><init-param>
<param-name>javax.ws.rs.Application</param-name><param-value>com.ise.MyApplication</param-value>
</init-param><load-on-startup>1</load-on-startup>
</servlet>-----------------------------------------------------------------------------------------------------------------------
Applicationサブクラスとweb.xmlの指定方法、WEB-INF/libディレクトリーまたは共用ライブラリーに配置するライブラリー(jar)の詳細は下記のInfoCenterの記載を参照ください。
Web 2.0 FP InfoCenter「RESTful アプリケーションでのリソースの URI パターンの定義」
http://publib.boulder.ibm.com/infocenter/wasinfo/v7r0/topic/com.ibm.websphere.web20fepjaxrs.doc/info/ae/ae/twbs_jaxrs_defresource_uri.htmlWeb 2.0 FP InfoCenter「JAX-RS サーブレット用 web.xml ファイルの構成」
http://publib.boulder.ibm.com/infocenter/wasinfo/v7r0/topic/com.ibm.websphere.web20fepjaxrs.doc/info/ae/ae/twbs_jaxrs_configwebxml.htmlWeb 2.0 FP InfoCenter「JAX-RS Web アプリケーションのアセンブル」
http://publib.boulder.ibm.com/infocenter/wasinfo/v7r0/topic/com.ibm.websphere.web20fepjaxrs.doc/info/ae/ae/twbs_jaxrs_assemble.html
17
17 WAS V7 最新動向WorkshopWAS V7 最新動向Workshop
07. Feature Pack for Web2.0 / 07. Feature Pack for Web2.0 / OSGiOSGi / JPA2.0/ JPA2.0
Hints&Tips:JSON4Jでの日本語
JSON4Jで日本語をシリアライズ → Unicodeエスケープされたデータ
– JSONの仕様(RFC4627)では、すべての文字はUnicodeエスケープされてもよい
– クライアント・サイドで正しく変換される
– 受信データは、Unicodeエスケープされていなくても受信可能
@GET@Produces("application/json")public JSONObject getName(){
JSONObject jsonobj = new JSONObject();jsonobj.put("name", "あいう");return jsonobj;
}
{"name":"¥u3042¥u3044¥u3046"}
JSON応答
JAX-RSコード
問題判別時などに驚かないように問題判別時などに驚かないように
JAX-RSで、JSON4Jのライブラリーを使用する場合の注意点です。
JSON4Jのライブラリーを使用して、日本語データをシリアライズした場合、日本語データは、Unicodeエスケープされたデータが送信されます。JSONの仕様であるRFC4627では、すべての文字はUnicodeエスケープされても良いことになっていますので、クライアント・サイドのJavaScriptのコードでは、このUnicodeエスケープ
されたデータを意識することなく日本語を処理することが可能です。
問題判別やテスト結果を残すために、TCP/IPモニターなどで、キャプチャーした場合、日本語データはUnicodeエスケープされたデータとしてキャプチャーされま
すので、ご注意ください。
18
18 WAS V7 最新動向WorkshopWAS V7 最新動向Workshop
07. Feature Pack for Web2.0 / 07. Feature Pack for Web2.0 / OSGiOSGi / JPA2.0/ JPA2.0
Dynamic Scripting FP
WebSphere sMashをベースとしたFeature Pack– WebSphere sMash
• PHP、Groovyの実行環境を提供
• Dojo toolkitを同梱
WASライセンスを持つ
サーバーWebSphere sMash 1.1
Dynamic Scripting FP中身は
WAS
インストール
AJAX/RESTAJAX/RESTを活用して、スクリプト言語により、を活用して、スクリプト言語により、シチュエーショナル・アプリケーションを効率的に開発シチュエーショナル・アプリケーションを効率的に開発
WASWASのラインセンスがあれば、のラインセンスがあれば、sMashsMashをインストールをインストール//使用可能使用可能(Dynamic Scripting FP(Dynamic Scripting FPの導入先の導入先OSOSに必ずしもに必ずしもWASWASのインストールは必要ないのインストールは必要ない))
今年6月にFeature Pack for Dynamic Scripting (以下、Dynamic Scripting FP) が提供されました。Dynamic Scripting FPもDojoを同梱しており、AjaxやRESTアプリケーションの開発が可能です。
Dynamic Scripting FPは、WASではなく、WebSphere sMashをベースとしています。
sMashは、PHPとGroovyの動的スクリプト言語の実行環境を提供しますので、動的スクリプト言語を使用したアプリケーションを迅速/効率的に開発/稼動させること
ができます。
19
19 WAS V7 最新動向WorkshopWAS V7 最新動向Workshop
07. Feature Pack for Web2.0 / 07. Feature Pack for Web2.0 / OSGiOSGi / JPA2.0/ JPA2.0
Web 2.0 FP まとめ
Web 2.0 FP– Ajax/RESTをサポートする機能拡張をWASに追加
• Dojo• JAX-RS
– Dojo/Ajax/REST• ブラウザー・サイドでの非同期通信により、Webアプリケーションにユーザー・
エクスペリエンスの高いインターフェースを実現
– JAX-RS• RESTful WebサービスをJavaで実装する標準仕様
• RESTful Webサービスを簡単に開発
• Java EE 6に含まれる
Java EEJava EE上で、上で、RESTfulRESTful WebWebサービスを簡単かつ標準に準拠して開発サービスを簡単かつ標準に準拠して開発
V1.0.1New
Web 2.0 FPのまとめです。
Web 2.0 FPは、Ajax/RESTをサポートする機能拡張をWASに追加します。
Web 2.0 FP V1.0.1で、新たにJAX-RSが追加されました。JAX-RSはRESTfulWebサービスをJava EE上で実装する標準仕様です。
JAX-RSを使用することで、Java EE上で、RESTful Webサービスを簡単かつ標
準に準拠して開発することができます。
20
20 WAS V7 最新動向WorkshopWAS V7 最新動向Workshop
07. Feature Pack for Web2.0 / 07. Feature Pack for Web2.0 / OSGiOSGi / JPA2.0/ JPA2.0
§3. OSGi FP
21
21 WAS V7 最新動向WorkshopWAS V7 最新動向Workshop
07. Feature Pack for Web2.0 / 07. Feature Pack for Web2.0 / OSGiOSGi / JPA2.0/ JPA2.0
OSGi (Open Services Gateway initiative)
OSGi– The Dynamic Module System for Java
– Javaに基づいたオープンなソフトウェア部品化技術• 元々、組込機器/モバイル端末への適用を目的としていた
• IDEやJava EEランタイム/アプリケーションにおいてもその有用性が認められる
• Javaのパッケージやクラスの管理を詳細に規定
Java EEとの関連– モジュール(jar) 管理の側面に注目
1999年3月OSGi Alliance設立
(IBMなど)
2006年6月WAS V6.1リリース
内部モジュール管理にOSGi採用
2004年6月Eclipse 3.0リリース
本体、PluginのコンテナとしてOSGi採用
2009年9月OSGi 4.2仕様公開“OSGi EnterpriseSpecification”追加
2010年3月WAS V7 OSGi FP
リリース
OSGiは、元々、組込機器やモバイル端末などで、ネットワークを介してソフトウエ
ア部品をダウンロードする事によって新しいサービスの追加や機能の変更、利用者の嗜好に応じたカスタマイズ、また不具合の改修などを容易に実現する事を目的として標準化が始まり、そのような分野でも標準技術して広く使用されています。
さらに、OSGiのモジュール管理の側面に注目し、WASなどのJava EEサーバーやEclipseの内部実装として使用されています。
OSGi FPを使用することで、Java EEのユーザー・アプリケーションにおいても、OSGiの機能が使用できるようになります。
22
22 WAS V7 最新動向WorkshopWAS V7 最新動向Workshop
07. Feature Pack for Web2.0 / 07. Feature Pack for Web2.0 / OSGiOSGi / JPA2.0/ JPA2.0
OSGiのメリット
OSGiを使用するメリット– jar/packageの依存関係の管理
• アクセス制御
• バージョン管理
OSGiなし OSGiあり
WAS
WEB-INF/classes・・・WEB-INF/libourWebFW.jarourLoggingFWv1.jaropenUtilFW.jaropenLoggingLibv1.jar・・・
Appl-A
WEB-INF/classes・・・WEB-INF/libourWebFW.jarourLoggingFWv2.jaropenUtilFW.jaropenLoggingLibv2.jar・・・
Appl-B
WAS
WEB-INF/classes・・・
Appl-A
WEB-INF/classes・・・
Appl-B
openLoggingLibv2.jar
ourLoggingFWv2.jar
openUtilFW.jar
ourWebFW.jar
openLoggingLibv1.jar
ourLogginFWv1.jar
クラス、変数、メソッドのクラス、変数、メソッドのprivate, public, protectedprivate, public, protectedののアクセス修飾子を超えたアクセス修飾子を超えた
アクセス制御アクセス制御
高い独立性高い独立性//変更に強いシステム変更に強いシステム
OSGiのモジュール管理を使用することで、jarの依存関係を制御することが可能
になります。
OSGiを使用しない場合、javaのクラスやメソッドのアクセス制御は、private、publicなどのアクセス修飾子でしか制御することができません。つまり、publicなアクセス修飾子をもったクラスやメソッドは、外部のクラスから自由に/意図せずアクセスすることができます。このように通常のjavaでは、柔軟なアクセス制御ができませんので、他のアプリケーションへの意図しない影響を削減するために、WASのクラスローダーの階層構造を利用し、WEB-INF/libディレクトリーに多くのフレームワーク
やライブラリー・ファイルが含まれる構造となってしまう場合があります。
一方、OSGiでは、javaのアクセス修飾子だけではなく、jarの単位で他のjarのパッケージとの依存関係を指定することができます。これにより、同じバージョンのライブラリーは複数のアプリケーションで共有し、異なるバージョンのライブラリーを使用する場合には、それぞれが異なるバージョンのライブラリーを使用し、同時に稼動させることができます。また、このようにjarの間の依存関係が明確になることにより、特定のjarに依存しているjarが明確になります。これにより、jarに修正/変更を行なう
場合に影響範囲が明確になりますので、テストなどが容易になり、実行時の予期しないクラスローディングの問題を削減することができます。
OSGiを利用すると、jarの独立性を高め、変更に強い(変更しやすい)システムを構築することができます。
23
23 WAS V7 最新動向WorkshopWAS V7 最新動向Workshop
07. Feature Pack for Web2.0 / 07. Feature Pack for Web2.0 / OSGiOSGi / JPA2.0/ JPA2.0
OSGiのモジュール管理
OSGiではアプリケーション部品(jar)を「バンドル」と定義– 開発者がバンドル間の依存関係を規定する/できる
• デプロイ時に依存関係をOSGi frameworkがチェック
OSGi framework
bundle(jar)
公開パッケージ:com.ise.aaa
非公開パッケージ:com.ise.bbb
bundle(jar)
MANIFEST.MFExport-Package: com.ise.aaa
MANIFEST.MFImport-Package: com.ise.aaa
ClassOK
NG
明示していないパッケージは外部バンドル
から参照不可
OSGiでは、jarをアプリケーション部品とし、「バンドル」と定義しています。
そして、バンドル間の依存関係をアプリケーションのメタデータを記載するMANIFEST.MFファイルにOSGiの定義を追加することで、バンドルの開発者が定義します。
下記のMANIFEST.MFファイルの例を参照ください。Import-Package定義で、外部から参照するパッケージとそのバージョンの範囲を指定します。[1.2.0,1.3.0)は、1.2.0以上1.3.0未満のバージョンを指します。Export-Package定義では、外部に公開するパッケージとそのバージョンを指定しま
す。
バンドルはOSGi Framework実装が管理するリポジトリーに登録され、その管理下で実行されますので、デプロイ時にパッケージ間の依存関係がチェックされます。また、publicなクラスであっても、
異なるバンドルからのアクセスを制限することが実現されます。
MANIFEST.MFファイルの例---------------------Manifest-Version: 1.0Bundle-SymbolicName: com.ibm.jp.myappBundle-Name: My Application BundleBundle-Vendor: IBM JapanBundle-Version: 2.0.0Import-Package:com.ibm.jp.mylib1.ui;version="[1.2.0,1.3.0)",com.ibm.jp.mylib1.util;version="[1.2.0,1.3.0)"
Export-Package:com.ibm.jp.myapp;version="2.0.0"
Bundle-RequiredExecutionEnvironment: J2SE-1.5Bundle-Activator: com.ibm.jp.myapp.MyAppActivator---------------------------------------------------------------
24
24 WAS V7 最新動向WorkshopWAS V7 最新動向Workshop
07. Feature Pack for Web2.0 / 07. Feature Pack for Web2.0 / OSGiOSGi / JPA2.0/ JPA2.0
なぜ実現できるのか
OSGiのクラスローダー
– バンドルごとのクラスローダー
– ネットワーク型クラスローダー
WAS Internal OSGiClassloader
WebSphere ExtensionsClassloader
Application - AClassloader
WAR – A1Classloader
WAR – A2Classloader
Application - BClassloader
Java Classloaders(Parent)
bundle - AClassloader
bundle - CClassloader
bundle - BClassloader
bundle - DClassloader
公開パッケージ、参照パッケージを明示上位のクラスのみ参照可能上位のクラスはすべて参照
Java Classloaders
WAS Internal OSGi
Runtime
OSGiなし OSGiあり
OSGiでは、これまでの階層型のクラスローダーではなく、バンドルごとにクラス
ローダーを持つ、ネットワーク型のクラスローダー構造を使用します。また、特定のバンドル間のみクラスを参照できるような構造を実現しています。階層型のクラスローダーでは、親クラスローダーがロードするクラスは、その全ての子クラスローダーから参照できてしまうため、親クラスローダーがロードするクラス/ライブラリーを
変更することは影響が予測できず困難です。ネットワーク型のクラスローダーでは、依存関係が明確になりますので、事前に影響範囲を予測することができますので、比較的容易にクラス/ライブラリーを変更することが可能です。デフォルトでは、すべ
てのバンドルは非公開です。また、バージョンの異なる同一バンドルを稼動させ、それぞれ特定のバンドルからアクセスさせることも可能になります。
25
25 WAS V7 最新動向WorkshopWAS V7 最新動向Workshop
07. Feature Pack for Web2.0 / 07. Feature Pack for Web2.0 / OSGiOSGi / JPA2.0/ JPA2.0
OSGi Enterprise Specification
OSGi環境においてJava EE技術の使用方法を規定
– サーブレット
– JNDI– JPAなど
Blueprintコンテナ– SpringフレームワークをベースとしたDIコンテナ
• XML定義ファイルを使用したPOJOインジェクション・モデル
– OSGiサービス・レジストリーをサポート
アプリケーション・サーバーの内部だけでなく、アプリケーション・サーバーの内部だけでなく、ユーザー・アプリケーションでもユーザー・アプリケーションでもOSGiOSGiのメリットを享受可能にのメリットを享受可能に
開発者は開発者はOSGiOSGi固有の固有のAPIAPIを使用せずに、を使用せずに、バンドルをまたがったオブジェクトの参照が可能にバンドルをまたがったオブジェクトの参照が可能に
昨年9月のOSGi 4.2の仕様の公開において、それ以前の、OSGi Core Specification、OSGi Compendium Specificationに加えて、OSGi Enterprise Specificationの仕様が追加されました。
OSGi Enterprise Specificationでは、サーブレットやJNDI、JPAなどのJava EE技術のOSGi環境(コンテナ)からの使用方法を規定しています。これにより、これま
でのアプリケーション・サーバーや統合開発環境の内部実装で使用されていたOSGiのメリットをJava EEのユーザー・アプリケーションでも享受可能になりました。
また、OSGi Enterprise Specificationでは、Blueprintコンテナと呼ばれるDIコンテナが規定されています。Blueprintコンテナは、OSGiサービス・レジストリーをサポートするSpringフレームワークをベースとしたDIコンテナです。尚、OSGiのサービスとは、Javaのオブジェクトを表します。Blueprintコンテナを使用することで、アプリケーション開発者は、OSGiの固有のAPIを使用せずに、バンドルをまたがったオ
ブジェクトの参照が可能になります。
26
26 WAS V7 最新動向WorkshopWAS V7 最新動向Workshop
07. Feature Pack for Web2.0 / 07. Feature Pack for Web2.0 / OSGiOSGi / JPA2.0/ JPA2.0
OSGiのサービスとはJavaオブジェクト
OSGiのサービス管理
bundle(jar) bundle(jar)
参照元Class
提供Object(POJO)
OSGiOSGiService Service RegistryRegistry
object利用側
object提供側
①Objectの生成
②Registryに登録
③Registryを検索Javaインターフェースをキーに検索
④利用
実行時にバインド
OSGiサービス・レジストリーへのアクセス方法– OSGi APIを使用
– Blueprintコンテナを使用 (Spring likeなDIコンテナ)
1JVM内
OSGiのサービス・レジストリーの概要です。OSGiサービス・レジストリーは、JNDIネームスペースを利用して、ローカルJVM内のJavaオブジェクトのレジストリーを提供します。オブジェクトの提供側で、オブジェクトの生成、レジストリーへの登録を行います。オブジェクトの利用側では、javaインターフェースをキーとしてレジストリーを検索し、使用する具体的なオブジェクトへの参照を取得します。
OSGiサービス・レジストリーへのアクセス方法としては、OSGiのAPIを使用した方法とBlueprintコンテナを使用した方法があります。Blueprintコンテナを使用することで、OSGiのAPIを使用したコードの記述なくOSGiサービスの登録/取得が可能で
す。
27
27 WAS V7 最新動向WorkshopWAS V7 最新動向Workshop
07. Feature Pack for Web2.0 / 07. Feature Pack for Web2.0 / OSGiOSGi / JPA2.0/ JPA2.0
OSGiサービス・レジストリーへのアクセス
サービスの登録– Blueprint コンポーネント・モデルでは、BlueprintのXML構成ファイルに
サービスを登録
サービスの利用– Blueprint コンポーネント・モデルを利用すると、JNDIルックアップを使用し
た動的な呼び出しが可能
<service interface=“com.ibm.ws.eba.example.blog.api.BloggingService”><bean class=“com.ibm.ws.eba.example.blog.BloggingServiceImpl” />
</service>
InitialContext ic = new InitialContext();BloggingService service =
(BloggingService)ic.lookup("osgi:service/"+BloggingService.class.getName());
Blueprintコンテナを使用したOSGiサービス・レジストリーへのアクセス例です。
サービスの登録は、XMLの構成ファイル(デフォルト、blueprint.xml)の定義を使用して定義します。javaのインターフェースをキーにして、実装オブジェクトの登録
を行ないます。
サービスを利用する側は、JNDIルックアップを使用し、”osgi:service/” のネーム
スペースにインターフェース名をキーにして実装オブジェクトを取得します。
28
28 WAS V7 最新動向WorkshopWAS V7 最新動向Workshop
07. Feature Pack for Web2.0 / 07. Feature Pack for Web2.0 / OSGiOSGi / JPA2.0/ JPA2.0
OSGiバンドルの開発
Enterprise Bundle Application (.eba)– バンドルを扱うためのエンタープライズ・アプリケーション
– WASで扱うインストールの単位
• バンドル単位ではなく、依存性をもったバンドルの集合体としてインストール
– APPLICATION.MFマニフェストファイルを保持
OSGi Bundle(.jar)
Enterprise Bundle App (.eba)
Web App Bundle (.wab)
ライブラリ(.jar)
Web AppModule (.war)
Enterprise Application(.ear)
APPLICATION.MF
MANIFEST.MF
MANIFEST.MF
blueprint.xml
blueprint.xml
OSGi Bundle(.jar)– 拡張子はjar– マニフェストファイルを保持
Web Application Bundle(.wab)– バンドルに対応– Web構成ファイルの他に、
マニフェストファイルを保持
Java EE環境におけるOSGiバンドルの開発方法を説明します。
これまでの、EAR、WAR、JARを、それぞれOSGiバンドルであるEnterprise Bundle Application (EBA)、Web Application Bundle (WAB)、OSGi Bundle (JAR)としてパッケージングします。WABとJARにはこれまでのWAR、JARのコンテンツとともにバンドル間の依存関係などOSGiの定義を追加したMANIFEST.MFファイルを含めます。また、サービスの登録など、Blueprintコンテナを使用する場合には、blueprint.xmlも含めます。これまでのEARにあたるのが、EBAです。EBAには、下記の例のように、Application-Contentの指定で、EBAに含まれるバンドル・コ
ンテンツを指定します。
APPLICATION.MFの例-------------------------------------------------Manifest-Version: 1.0Application-Name: MessageLoggerApplication-SymbolicName: MessageLoggerApplication-Version: 1.0.0.201012091939Application-Content: MessageLogger-API;version="1.0.0",MessageLogger-Impl;version="1.0.0",MessageLogger-Web;version="1.0.0"
Application-ManifestVersion: 1.0----------------------------------------------------------------------------------
29
29 WAS V7 最新動向WorkshopWAS V7 最新動向Workshop
07. Feature Pack for Web2.0 / 07. Feature Pack for Web2.0 / OSGiOSGi / JPA2.0/ JPA2.0
OSGiアプリケーションの管理 (デプロイ)
ビジネス・レベル・アプリケーション・フレームワークを使用して、EBAファイルをインストール
– EBAファイルは1つのアセットにのみにインポート可能
– EBAを含むアセットは1つのビジネス・レベル・アプリケーションのみに追加可能
ビジネス・レベル・アプリケーション(BLA) – 複数コンポーネントをひとつの
ビジネス・アプリケーションとして関連付ける新しい管理モデル
– コンポジション・ユニット• BLAにアセットを定義する際の構成情報
– アセット• ビジネス・ロジックを実装した
実際のバイナリー・ファイル
BLA
EnterpriseBundle Library
EBA
Enterprise Application
EAR Java Library
アセットにEBAファイルを登録
BLAを作成し、
登録したアセットを
取りこみ
EBAファイルのデプロイ方法は、これまでのEARのデプロイとは、異なります。EBAファイルを管理コンソールからOSGiアセットに登録し、OSGiアセットをビジネス・レベル・アプリケーション(BLA)にマッピングします。BLAは、複数のコンポーネントを一つのグループとして管理するWAS V7の新しい管理モデルです。
30
30 WAS V7 最新動向WorkshopWAS V7 最新動向Workshop
07. Feature Pack for Web2.0 / 07. Feature Pack for Web2.0 / OSGiOSGi / JPA2.0/ JPA2.0
OSGiアプリケーションの管理 (バージョン変更)
使用バンドルのバージョンの変更– EBA内のバンドルは、新バージョンのバンドルをバンドル・リポジトリーに
登録することで更新可能
OSGiアプリケーションの管理画面です。
EBAに含まれるバンドルの内容は、[アセット]の画面から参照することができます。また、WASのバンドル・リポジトリーに新しいバージョンのバンドルを追加することにより、上記の画面のように、EBAに含まれるバンドルのバージョンを更新することも可能です。
31
31 WAS V7 最新動向WorkshopWAS V7 最新動向Workshop
07. Feature Pack for Web2.0 / 07. Feature Pack for Web2.0 / OSGiOSGi / JPA2.0/ JPA2.0
OSGi FP まとめ
OSGi– モジュール管理の仕組み
– マニフェスト・ファイルによる依存関係の明確化
OSGi Enterprise– OSGiのメリットを享受したJava EEアプリケーションの構築
– blueprintコンテナ:OSGiサービス・レジストリーをサポートするDIコンテナ
Java EEJava EEアプリケーションにおけるアプリケーションにおけるモジュール型アーキテクチャーの促進モジュール型アーキテクチャーの促進
アプリケーションの変更が容易にアプリケーションの変更が容易に進化できるアプリケーション進化できるアプリケーション
OSGi FPのまとめです。
OSGiはモジュール管理の仕組みであり、マニュフェスト・ファイルによりjar間の依存関係を明確にします。これにより、アプリケーションの変更が容易になり、塩漬けではなく、進化できるアプリケーションを構築することができます。
また、昨年9月に公開されたOSGi Enterprise仕様により、OSGiコンテナ上からJava EEの技術の使用方法が標準化され、Java EEのユーザー・アプリケーションにおいても、OSGiのモジュール管理のメリットを享受することができます。さらに、blueprintコンテナというSpringをベースとした、OSGiサービス・レジストリー対応のDIコンテナを使用することもできます。OSGi/OSGi Enterpriseを使用することで、Java EEアプリケーションにおけるモジュール型アーキテクチャーが今後促進され
ると考えられます。
32
32 WAS V7 最新動向WorkshopWAS V7 最新動向Workshop
07. Feature Pack for Web2.0 / 07. Feature Pack for Web2.0 / OSGiOSGi / JPA2.0/ JPA2.0
§4. JPA 2.0 FP
33
33 WAS V7 最新動向WorkshopWAS V7 最新動向Workshop
07. Feature Pack for Web2.0 / 07. Feature Pack for Web2.0 / OSGiOSGi / JPA2.0/ JPA2.0
JPAとは
Java EE標準のORマッピング・フレームワーク
1805Ueda2222
1084Nakajima1111
1806Yamaguchi3333
NAME PHONEEMP_IDEMPLOYEE表
EntityManager
ClientProgram
emp_Idnamephone
@EntityEmp
@IdgetEmp_Id()
getName()
getPhone()
setEmp_Id()
setName()
setPhone()
emp_Id=111111name=Nakajima
phone=1804-1111
getEmp_Id()
getName()
getPhone()
setEmp_Id()
setName()
setPhone()
Query
@Entity@Table(name = "EMPLOYEE")public class Emp {
@Idprivate int emp_id;private String name;・・・・DBのカラムに相当するフィールド
setterメソッド、getterメソッド
}
@Entity@Table(name = "EMPLOYEE")public class Emp {
@Idprivate int emp_id;private String name;・・・・DBのカラムに相当するフィールド
setterメソッド、getterメソッド
}
@Statelesspublic class EmpMgrBean implements
EmpMgr {
@PersistenceContext(unitName="SampleDB")
private EntityManager em;
public Empfind(int id) {Emp emp = em.find(Emp.class, id);return emp;
}}
@Statelesspublic class EmpMgrBean implements
EmpMgr {
@PersistenceContext(unitName="SampleDB")
private EntityManager em;
public Empfind(int id) {Emp emp = em.find(Emp.class, id);return emp;
}}
Entity Class
クライアント・プログラム
Entity
find(),persist(), remove()
JPAは、Java EE標準のORマッピング・フレームワークです。J2EE 1.4までは、EJBのEntity BeanがORマッピングを行なう技術としてありましたが、Java EE 5で、JPAという形で、新しく生まれ変わりました。JPAは、オープンソースのフレームワークとして広く使用されているHibernateをベースとして仕様が作成されました。
JPAは、EJBのEntity Beanとは異なり、軽量で、柔軟なORマッピングを提供しま
す。
テーブルの1行を表すEntityオブジェクトをEntityマネージャー経由で操作することにより、SQLをあまり意識することなく、DBへの操作を行なうことができます。
34
34 WAS V7 最新動向WorkshopWAS V7 最新動向Workshop
07. Feature Pack for Web2.0 / 07. Feature Pack for Web2.0 / OSGiOSGi / JPA2.0/ JPA2.0
JPA 2.0の新機能
JPA 2.0の新機能
– エンティティーの構造とテーブルのマッピングの柔軟性の向上• テーブルの列とのマッピングの強化
– 列とのマッピングをフィールドとプロパティー(getterメソッド)を混在可能
• derived(派生) ID– 主キー列として、外部キーや外部キーとの複合キーを簡単に定義可能に
• リレーションにおけるMapオブジェクトのサポートの強化– ユニークな属性だけでなく、属性の複合や組み込み型、エンティティーをMapオブジェクトのキーに指定可能
• 組み込み(Embeddable)クラスのネストのサポート
• コレクション・マッピングの強化– エンティティーのコレクションだけでなく、プリミティブ型と組み込みクラスのコレクションもフィールド指定可能
– ベンダー依存プロパティーに優先する標準プロパティーの追加• 悲観的ロックのサポート
• キャッシュ仕様の追加
– Criteria APIの追加• タイプ・セーフなJPQLクエリーを作成
– Bean Validation(JSR-303)の統合• XML定義ファイルまたはアノテーションでの制約により、フィールド値の妥当性検査
• 例: @NotNull、@Max, @Pattern
JPA 2.0 JPA 2.0 は、は、JPA 1.0JPA 1.0を拡張し、より柔軟なを拡張し、より柔軟なORORマッピングが可能にマッピングが可能に
JPA 2.0の新機能について説明します。
JPA 2.0では、JPA 1.0よりもより柔軟にエンティティーとテーブルのマッピングを行なえるような機能の拡張が行なわれています。@Accessアノテーションにより、テーブルの列とのマッピングについてフィールドとプロパティーを柔軟に指定することができます。また、派生IDや、マップやコレクション、組み込みクラスのサポートが強化されました。例えば、リレーションにおけるMapオブジェクトのサポートの強化として、Mapオブジェクトのキーの値として、JPA 1.0 では、ユニークな属性値のみを使用することができましたが、JPA 2.0 では、属性値の組み合わせや組み込みクラス、エンティティー
をキーにすることができるなど、エンティティーの構造とテーブルのマッピングの柔軟性の向上も行なわれています。
また、JPA 2.0では、JPA 1.0ではベンダー依存のプロパティーとなっていた、悲観的ロックや
キャッシュのプロパティーに優先する標準のプロパティーが仕様として規定されました。
例えば、JPA 2.0で、仕様として悲観的ロックがサポートされましたが、WAS V7のJPA 1.0では、楽
観的ロック、悲観的ロックの両方をサポートし、デフォルトで悲観的ロックとなります。詳細は下記のテクニカル・フラッシュを参照ください。
WebSphereテクニカル・フラッシュ「WAS V7.0でのJPA1.0エンティティーのデフォルトのトランザクション・オプションについて (WAS-10-034)」http://www-06.ibm.com/jp/domino01/mkt/cnpages1.nsf/page/default-00087BDFまた、JPA 2.0では、タイプ・セーフなJPQLを作成するCriteria APIの追加とBean Validation仕様
の統合も行なわれました。Bean Validation仕様(JSR-303)もJava EE 6の標準の一部であり、XML定義ファイルまたはアノテーションでの制約により、フィールド値の妥当性検査を行なうことができます。
JPA 2.0の新機能については、下記のDeveloperWorksの記事も参考になりますので、ご参照くだ
さい。
DeveloperWorks Japan「Kevin Sutterによるコメント: Java Persistence API 2.0 における更新」
http://www.ibm.com/developerworks/jp/websphere/library/was/jpa20_update/
35
35 WAS V7 最新動向WorkshopWAS V7 最新動向Workshop
07. Feature Pack for Web2.0 / 07. Feature Pack for Web2.0 / OSGiOSGi / JPA2.0/ JPA2.0
JPA 2.0 FP まとめ
JPA 2.0 FP– Java EE 6標準
– JPA 1.0を拡張し、よりポータブルで柔軟なORマッピング・フレームワーク
最新の最新のORORマッピング・フレームワークマッピング・フレームワーク
JPA 2.0 FPのまとめです。
JPA 2.0は、Java EE 6の標準の一部であり、JPA 1.0と比較してよりポータブルで柔軟なORマッピングのフレームワークとなっています。
JPAを使用する場合には、是非、JPA 2.0 FPを適用し、最新のJPA仕様をご利用ください。
36
36 WAS V7 最新動向WorkshopWAS V7 最新動向Workshop
07. Feature Pack for Web2.0 / 07. Feature Pack for Web2.0 / OSGiOSGi / JPA2.0/ JPA2.0
参考資料
FP共通– IBM Software「WebSphere Application Server Feature Packs」– http://www-01.ibm.com/software/webservers/appserv/was/featurepacks/– IBM Software-Japan「WebSphere Application Server フィーチャー・パックのご紹介」– http://www-06.ibm.com/software/jp/websphere/apptransaction/was/featurepacks/– DeveloperWorks-Japan「WebSphere Application Server Feature Pack 利用ガイドWAS v7 Feature Packガイド」– http://www.ibm.com/developerworks/jp/websphere/library/was/was7_fep_guide/
Web 2.0 FP– IBM Software「WebSphere Application Server Feature Pack for Web 2.0」(Download Linkあり)– http://www-01.ibm.com/software/webservers/appserv/was/featurepacks/web20/– WAS V7 InfoCenter「Feature Pack for Web 2.0」– http://publib.boulder.ibm.com/infocenter/wasinfo/v7r0/topic/com.ibm.websphere.web20fep.multiplatform.doc/info/ae/ae/welcome_fepweb.html– Dojo toolkit– http://dojotoolkit.org/– JAX-RS 1.0/1.1 仕様– http://jcp.org/en/jsr/detail?id=311– DeveloperWorks-Japan「WAS Feature Pack for Web 2.0 ワークショップ資料」– http://www.ibm.com/developerworks/jp/websphere/library/was/was_web20fep_ws/– DeveloperWorks-Japan「WAS V7 アプリケーション・デザイン・ワークショップ資料」-「3. プレゼンテーション層設計(Ajax/Dojo」– http://www.ibm.com/developerworks/jp/websphere/library/was/was7_app_design/– DeveloperWorks-Japan「Ajax と REST、第 1 回」– http://www.ibm.com/developerworks/jp/web/library/wa-ajaxarch/– DeveloperWorks-Japan「Ajax と REST、第 2 回」– http://www.ibm.com/developerworks/jp/web/library/wa-ajaxarch2.html
37
37 WAS V7 最新動向WorkshopWAS V7 最新動向Workshop
07. Feature Pack for Web2.0 / 07. Feature Pack for Web2.0 / OSGiOSGi / JPA2.0/ JPA2.0
参考資料
OSGi FP/JPA 2.0 FP共通– IBM Software「WebSphere Application Server V7 Feature Pack for OSGi Applications and Java Persistence API 2.0」(Download Linkあり。)– http://www-01.ibm.com/software/webservers/appserv/was/featurepacks/osgi/index.html– Redbook「Getting Started with the Feature Pack for OSGi Applications and JPA 2.0」– http://www.redbooks.ibm.com/abstracts/sg247911.html?Open
OSGi FP– OSGi Alliance Main– http://www.osgi.org/Main/HomePage– WAS V7 InfoCenter「Feature Pack for OSGi Applications and JPA 2.0 - OSGi Applications での作業」– http://publib.boulder.ibm.com/infocenter/wasinfo/v7r0/topic/com.ibm.websphere.jpafep.multiplatform.doc/info/ae/ae/ta_ep.html– DeveloperWorks Japan「エンタープライズOSGi入門: 第1回:OSGi概要と実行環境の導入」– http://www.ibm.com/developerworks/jp/websphere/library/was/was7_fep_osgi/1.html– DeveloperWorks Japan「エンタープライズOSGi入門: 第2回:OSGiのエンタープライズ拡張仕様を紐解く」– http://www.ibm.com/developerworks/jp/websphere/library/was/was7_fep_osgi/2.html– DeveloperWorks Japan「エンタープライズOSGi入門: 第3回:OSGiによるアプリケーションのモジュール化」– http://www.ibm.com/developerworks/jp/websphere/library/was/was7_fep_osgi/3.html– DeveloperWorks Japan「WebSphere Application Server でエンタープライズ OSGi アプリケーションを開発する」– http://www.ibm.com/developerworks/jp/websphere/library/was/was7_osgi_develop/– DeveloperWorks Japan「OSGiアプリケーションを開発、利用するためのベスト・プラクティス」– http://www.ibm.com/developerworks/jp/websphere/library/was/was7_osgi_practices/
JPA 2.0 FP– JPA 2.0 仕様(JSR-317)– http://jcp.org/aboutJava/communityprocess/final/jsr317/index.html– WAS V7 InfoCenter「Feature Pack for OSGi Applications and JPA 2.0 - Java Persistence API (JPA) 2.0 を使用した作業」– http://publib.boulder.ibm.com/infocenter/wasinfo/v7r0/topic/com.ibm.websphere.jpafep.multiplatform.doc/info/ae/ae/tjpa2_ep.html– DeveloperWorks-Japan「WAS V6.1 Feature Pack for EJB 3.0 ワークショップ資料」-「Java Persistence API」– http://www.ibm.com/developerworks/jp/websphere/library/was/was61_ejb3fep_ws/– DeveloperWorks Japan「Kevin Sutterによるコメント: Java Persistence API 2.0 における更新」– http://www.ibm.com/developerworks/jp/websphere/library/was/jpa20_update/– DeveloperWorks「Dynamic, typesafe queries in JPA 2.0」– http://www.ibm.com/developerworks/java/library/j-typesafejpa/– Apache OpenJPA 2.0 User’s Guide – http://openjpa.apache.org/builds/2.0.0/apache-openjpa-2.0.0/docs/manual/main.html