feature pack for web2.0 / osgi / jpa2public.dhe.ibm.com/software/dw/jp/websphere/was/... · 07....

37
1 Feature Pack for Web2.0 / OSGi / JPA2.0 ISE Webアプリケーション基盤 中島 由貴([email protected]

Upload: others

Post on 09-Aug-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Feature Pack for Web2.0 / OSGi / JPA2public.dhe.ibm.com/software/dw/jp/websphere/was/... · 07. Feature Pack for Web2.0 / OSGi / JPA2.0 現在WAS V7で提供されているFeature

1

Feature Pack for Web2.0 / OSGi / JPA2.0

ISE Webアプリケーション基盤中島 由貴([email protected]

Page 2: Feature Pack for Web2.0 / OSGi / JPA2public.dhe.ibm.com/software/dw/jp/websphere/was/... · 07. Feature Pack for Web2.0 / OSGi / JPA2.0 現在WAS V7で提供されているFeature

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などによって動作、仕様が変わる可能性があるのでご注意下さい。

今後国内で提供されるリリース情報は、対応する発表レターなどでご確認ください。

Page 3: Feature Pack for Web2.0 / OSGi / JPA2public.dhe.ibm.com/software/dw/jp/websphere/was/... · 07. Feature Pack for Web2.0 / OSGi / JPA2.0 現在WAS V7で提供されているFeature

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

Page 4: Feature Pack for Web2.0 / OSGi / JPA2public.dhe.ibm.com/software/dw/jp/websphere/was/... · 07. Feature Pack for Web2.0 / OSGi / JPA2.0 現在WAS V7で提供されているFeature

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とは

Page 5: Feature Pack for Web2.0 / OSGi / JPA2public.dhe.ibm.com/software/dw/jp/websphere/was/... · 07. Feature Pack for Web2.0 / OSGi / JPA2.0 現在WAS V7で提供されているFeature

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による正式サポートがあります。

Page 6: Feature Pack for Web2.0 / OSGi / JPA2public.dhe.ibm.com/software/dw/jp/websphere/was/... · 07. Feature Pack for Web2.0 / OSGi / JPA2.0 現在WAS V7で提供されているFeature

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

Page 7: Feature Pack for Web2.0 / OSGi / JPA2public.dhe.ibm.com/software/dw/jp/websphere/was/... · 07. Feature Pack for Web2.0 / OSGi / JPA2.0 現在WAS V7で提供されているFeature

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

Page 8: Feature Pack for Web2.0 / OSGi / JPA2public.dhe.ibm.com/software/dw/jp/websphere/was/... · 07. Feature Pack for Web2.0 / OSGi / JPA2.0 現在WAS V7で提供されているFeature

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

Page 9: Feature Pack for Web2.0 / OSGi / JPA2public.dhe.ibm.com/software/dw/jp/websphere/was/... · 07. Feature Pack for Web2.0 / OSGi / JPA2.0 現在WAS V7で提供されているFeature

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/

Page 10: Feature Pack for Web2.0 / OSGi / JPA2public.dhe.ibm.com/software/dw/jp/websphere/was/... · 07. Feature Pack for Web2.0 / OSGi / JPA2.0 現在WAS V7で提供されているFeature

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/

Page 11: Feature Pack for Web2.0 / OSGi / JPA2public.dhe.ibm.com/software/dw/jp/websphere/was/... · 07. Feature Pack for Web2.0 / OSGi / JPA2.0 現在WAS V7で提供されているFeature

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アーキテクチャーに従ったスタイルでの情報交換が可能になり、また、推奨さ

れます。

Page 12: Feature Pack for Web2.0 / OSGi / JPA2public.dhe.ibm.com/software/dw/jp/websphere/was/... · 07. Feature Pack for Web2.0 / OSGi / JPA2.0 現在WAS V7で提供されているFeature

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も使用できます。

Page 13: Feature Pack for Web2.0 / OSGi / JPA2public.dhe.ibm.com/software/dw/jp/websphere/was/... · 07. Feature Pack for Web2.0 / OSGi / JPA2.0 現在WAS V7で提供されているFeature

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を利用することに

なると思われます。

Page 14: Feature Pack for Web2.0 / OSGi / JPA2public.dhe.ibm.com/software/dw/jp/websphere/was/... · 07. Feature Pack for Web2.0 / OSGi / JPA2.0 現在WAS V7で提供されているFeature

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

Page 15: Feature Pack for Web2.0 / OSGi / JPA2public.dhe.ibm.com/software/dw/jp/websphere/was/... · 07. Feature Pack for Web2.0 / OSGi / JPA2.0 現在WAS V7で提供されているFeature

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;

}}------------------------------------------------------------------------------

Page 16: Feature Pack for Web2.0 / OSGi / JPA2public.dhe.ibm.com/software/dw/jp/websphere/was/... · 07. Feature Pack for Web2.0 / OSGi / JPA2.0 現在WAS V7で提供されているFeature

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

Page 17: Feature Pack for Web2.0 / OSGi / JPA2public.dhe.ibm.com/software/dw/jp/websphere/was/... · 07. Feature Pack for Web2.0 / OSGi / JPA2.0 現在WAS V7で提供されているFeature

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エスケープされたデータとしてキャプチャーされま

すので、ご注意ください。

Page 18: Feature Pack for Web2.0 / OSGi / JPA2public.dhe.ibm.com/software/dw/jp/websphere/was/... · 07. Feature Pack for Web2.0 / OSGi / JPA2.0 現在WAS V7で提供されているFeature

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の動的スクリプト言語の実行環境を提供しますので、動的スクリプト言語を使用したアプリケーションを迅速/効率的に開発/稼動させること

ができます。

Page 19: Feature Pack for Web2.0 / OSGi / JPA2public.dhe.ibm.com/software/dw/jp/websphere/was/... · 07. Feature Pack for Web2.0 / OSGi / JPA2.0 現在WAS V7で提供されているFeature

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サービスを簡単かつ標

準に準拠して開発することができます。

Page 20: Feature Pack for Web2.0 / OSGi / JPA2public.dhe.ibm.com/software/dw/jp/websphere/was/... · 07. Feature Pack for Web2.0 / OSGi / JPA2.0 現在WAS V7で提供されているFeature

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

Page 21: Feature Pack for Web2.0 / OSGi / JPA2public.dhe.ibm.com/software/dw/jp/websphere/was/... · 07. Feature Pack for Web2.0 / OSGi / JPA2.0 現在WAS V7で提供されているFeature

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の機能が使用できるようになります。

Page 22: Feature Pack for Web2.0 / OSGi / JPA2public.dhe.ibm.com/software/dw/jp/websphere/was/... · 07. Feature Pack for Web2.0 / OSGi / JPA2.0 現在WAS V7で提供されているFeature

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の独立性を高め、変更に強い(変更しやすい)システムを構築することができます。

Page 23: Feature Pack for Web2.0 / OSGi / JPA2public.dhe.ibm.com/software/dw/jp/websphere/was/... · 07. Feature Pack for Web2.0 / OSGi / JPA2.0 現在WAS V7で提供されているFeature

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---------------------------------------------------------------

Page 24: Feature Pack for Web2.0 / OSGi / JPA2public.dhe.ibm.com/software/dw/jp/websphere/was/... · 07. Feature Pack for Web2.0 / OSGi / JPA2.0 現在WAS V7で提供されているFeature

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では、これまでの階層型のクラスローダーではなく、バンドルごとにクラス

ローダーを持つ、ネットワーク型のクラスローダー構造を使用します。また、特定のバンドル間のみクラスを参照できるような構造を実現しています。階層型のクラスローダーでは、親クラスローダーがロードするクラスは、その全ての子クラスローダーから参照できてしまうため、親クラスローダーがロードするクラス/ライブラリーを

変更することは影響が予測できず困難です。ネットワーク型のクラスローダーでは、依存関係が明確になりますので、事前に影響範囲を予測することができますので、比較的容易にクラス/ライブラリーを変更することが可能です。デフォルトでは、すべ

てのバンドルは非公開です。また、バージョンの異なる同一バンドルを稼動させ、それぞれ特定のバンドルからアクセスさせることも可能になります。

Page 25: Feature Pack for Web2.0 / OSGi / JPA2public.dhe.ibm.com/software/dw/jp/websphere/was/... · 07. Feature Pack for Web2.0 / OSGi / JPA2.0 現在WAS V7で提供されているFeature

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を使用せずに、バンドルをまたがったオ

ブジェクトの参照が可能になります。

Page 26: Feature Pack for Web2.0 / OSGi / JPA2public.dhe.ibm.com/software/dw/jp/websphere/was/... · 07. Feature Pack for Web2.0 / OSGi / JPA2.0 現在WAS V7で提供されているFeature

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サービスの登録/取得が可能で

す。

Page 27: Feature Pack for Web2.0 / OSGi / JPA2public.dhe.ibm.com/software/dw/jp/websphere/was/... · 07. Feature Pack for Web2.0 / OSGi / JPA2.0 現在WAS V7で提供されているFeature

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/” のネーム

スペースにインターフェース名をキーにして実装オブジェクトを取得します。

Page 28: Feature Pack for Web2.0 / OSGi / JPA2public.dhe.ibm.com/software/dw/jp/websphere/was/... · 07. Feature Pack for Web2.0 / OSGi / JPA2.0 現在WAS V7で提供されているFeature

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----------------------------------------------------------------------------------

Page 29: Feature Pack for Web2.0 / OSGi / JPA2public.dhe.ibm.com/software/dw/jp/websphere/was/... · 07. Feature Pack for Web2.0 / OSGi / JPA2.0 現在WAS V7で提供されているFeature

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の新しい管理モデルです。

Page 30: Feature Pack for Web2.0 / OSGi / JPA2public.dhe.ibm.com/software/dw/jp/websphere/was/... · 07. Feature Pack for Web2.0 / OSGi / JPA2.0 現在WAS V7で提供されているFeature

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に含まれるバンドルのバージョンを更新することも可能です。

Page 31: Feature Pack for Web2.0 / OSGi / JPA2public.dhe.ibm.com/software/dw/jp/websphere/was/... · 07. Feature Pack for Web2.0 / OSGi / JPA2.0 現在WAS V7で提供されているFeature

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アプリケーションにおけるモジュール型アーキテクチャーが今後促進され

ると考えられます。

Page 32: Feature Pack for Web2.0 / OSGi / JPA2public.dhe.ibm.com/software/dw/jp/websphere/was/... · 07. Feature Pack for Web2.0 / OSGi / JPA2.0 現在WAS V7で提供されているFeature

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

Page 33: Feature Pack for Web2.0 / OSGi / JPA2public.dhe.ibm.com/software/dw/jp/websphere/was/... · 07. Feature Pack for Web2.0 / OSGi / JPA2.0 現在WAS V7で提供されているFeature

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への操作を行なうことができます。

Page 34: Feature Pack for Web2.0 / OSGi / JPA2public.dhe.ibm.com/software/dw/jp/websphere/was/... · 07. Feature Pack for Web2.0 / OSGi / JPA2.0 現在WAS V7で提供されているFeature

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/

Page 35: Feature Pack for Web2.0 / OSGi / JPA2public.dhe.ibm.com/software/dw/jp/websphere/was/... · 07. Feature Pack for Web2.0 / OSGi / JPA2.0 現在WAS V7で提供されているFeature

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仕様をご利用ください。

Page 36: Feature Pack for Web2.0 / OSGi / JPA2public.dhe.ibm.com/software/dw/jp/websphere/was/... · 07. Feature Pack for Web2.0 / OSGi / JPA2.0 現在WAS V7で提供されているFeature

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

Page 37: Feature Pack for Web2.0 / OSGi / JPA2public.dhe.ibm.com/software/dw/jp/websphere/was/... · 07. Feature Pack for Web2.0 / OSGi / JPA2.0 現在WAS V7で提供されているFeature

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