76 WebLogic Server勉強会@大阪 #13 -...

62
<Insert Picture Here> JavaEE6 WebLogic Server 12c について 日本オラクル株式会社 Fusion Middleware事業統括本部 野邊 哲男 20122876夜な夜な! なにわオラクル塾 WebLogic Server勉強会@大阪 #13

Transcript of 76 WebLogic Server勉強会@大阪 #13 -...

Page 1: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

<Insert Picture Here>

JavaEE6 と WebLogic Server 12c について

日本オラクル株式会社 Fusion Middleware事業統括本部 野邊 哲男 2012年2月8日

第76回 夜な夜な! なにわオラクル塾

WebLogic Server勉強会@大阪 #13

Page 2: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved. 2

以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです。また、情報提供を唯一の目的とするものであり、いかなる契約にも組み込むことはできません。以下の事項は、マテリアルやコード、機能を提供することをコミットメント(確約)するものではないため、購買決定を行う際の判断材料になさらないで下さい。オラクル製品に関して記載されている機能の開発、リリースおよび時期については、弊社の裁量により決定されます。

OracleとJavaは、Oracle Corporation 及びその子会社、関連会社の米国及びその他の国における登録商標です。文中の社名、商品名等は各社の商標または登録商標である場合があります。

Page 3: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved. 3

Agenda

• JavaEE6 概要

• Servlet3.0

• JSF2.0

• EJB3.1

• Bean Validation 1.0

• Context and Dependency Injection 1.0

• Oracle WebLogic Server 12c概要

• WebLogic Server 12c 新機能: Active GridLinkのWeb Session Affinity

• WebLogic Server 12c 新機能: JDBC TLOG

Page 4: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved.

<Insert Picture Here>

JavaEE6 概要

4

Page 5: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved. 5

JavaEEの歴史と発展

JDK(Java SE) JavaEE

1996年 JDK 1.0 (サーバサイドJava

技術の

統一仕様が無い状態)

1997年 JDK 1.1

1998年 JDK 1.2

1999年2月 J2EE 1.2

2000年 JDK1.3

2001年9月 J2EE 1.3

2002年 JDK1.4

2003年11月 J2EE 1.4

2004年 JDK 5.0 (1.5)

2006年5月 JavaEE 5.0

2006年12月 JDK 6.0 (1.6)

2009年12月 JavaEE 6.0

2011年7月 JDK7

サーバーサイドJava仕様

のデファクト・スタンダード

として確立

さらなる仕様の充実・拡張

Webサービス対応

Ese Of Development

さらなるEse Of Development、

軽量化、拡張性

Page 6: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved.

JavaEE6のゴールと特長

JavaEE6は、これまでのJavaEE仕様の肥大化や設定の煩雑さなどの課題を解消するために、下記をゴールとして仕様策定されています。

6

Further Ease of Development (さらなる開発容易性)

Flexible & Right sizing (柔軟性と軽量化/最適化)

Enhanced Extensibility (さらなる拡張性)

増大した仕様を全て使うのではなく、必要なもののみ使う「プロファイル」の導入

結果的に軽量化されたコンテナとして利用可能

使用されていない仕様の将来的な削除の検討(プルーニング)

アノテーションを活用したServlet設定やバリデーション、依存性注入

XML設定ファイルへの煩雑な設定を極小化

簡略化されたEJB仕様「EJBLite 」のサポート

機能拡張インターフェースをより多く用意

ライブラリ単位で設定をプラグイン-アウトできる「Webフラグメント」の導入

Page 7: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved.

[参考] Java EE 6 / Webサービスの主要仕様

JavaEE仕様 Version JSR

JavaEE 6.0 316

Web Profile 6.0 316

Managed Beans 1.0 316

Web仕様 Version JSR

Servlet 3.0 315

JSP 2.2 245

JSF 2.x 314

JSTL 1.2 52

Expression Language 2.2 245

EJB 3.1 318

Interseptors 1.1 318

JAF 1.1 925

JavaMail 1.4 919

JCA 1.6 1.6

JMS 1.1 1.1

JPA 2.0 2.0

JTA 1.1 1.1

Webサービス仕様 Version JSR

JAX-RPC 1.1 101

JAX-WS 2.2 224

JAXB 2.2 222

JAXM 1.3 67

StAX 1.0 173

Web Services 1.3 109

Web Services Metadata 2.1 181

JAX-RS 1.1 311

JAXR 1.0 93

その他の仕様 Version JSR

JDBC 4.0 221

JMX 2.0 255

Bean Validation 1.0 303

Context and Dependency Injection 1.0 299

Dependency Injection for Java 1.0 330

Common Annotations 1.1 250

JavaEE Application Deployment 1.2 88

JavaEE Management 1.1 77

Java Authentication Service Provider

Interface for Container 1.0 196

7

Page 8: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved.

JavaEE6のプロファイル

JavaEE6では、対応仕様のうち、必要なものだけをピックアップして実装できる「プロファイル」機構をサポート。

デフォルトでは、全ての機能を実装する「JavaEE Profile」とWebアプリで必要な仕様だけを実装した「Web Profile」を定義。

任意のプロファイルを定義し、実装してもよい。

8

JavaEE6 のすべての仕様

すべての仕様を実装

Webアプリに必要な仕様のみを実装

Web Profile JavaEE Profile

JavaEEのすべての仕様

に対応

・Servlet3.0

・JSP2.2

・JSF2.0

・EL2.2

・JSTL1.2

・Interceptor1.1

・Common Annotations 1.1

・EJBLite3.1

・JPA2.0

・JTA1.1

・CDI1.0

・DI1.0

・Bean Validatio1.0

・Debugging Support for Other Languages 1.0

任意の仕様を実装

(任意のプロファイル)

Page 9: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved.

JavaEE6 各仕様の主要な新機能①

下表は、各仕様の主な新機能の概要をまとめたものです。

9

機能 概要

Servlet3.0 アノテーションによる

プログラミング

従来、web.xmlへの記述が必要だった構成情報をアノテーションで指定することが可能になりました。

Webフラグメント ライブラリの設定をweb.xmlではなくweb-

fragment.xmlというファイルに記載し、ライブラリ自身で保有しておくことが可能になりました。

非同期プログラミング サーブレットで非同期処理を行うためのAPIがサポートされました。

柔軟な初期化処理 コンテナ起動時などにプログラミングでサーブレットの初期化処理を行うための仕組みがサポートされました。

JSF2.0 Facelet UIとしてJSPではなくXHTMLがサポートされることで、JSPからサーブレットへの変換/コンパイルのオーバーヘッドを軽減する事が可能になりました。

アノテーションによる

Managed Bean指定

従来、構成ファイルに記述が必要だったManaged

Bean指定をアノテーションで指定する事が可能になりました。

Ver.Up

Ver.Up

Page 10: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved.

JavaEE6各仕様の主要な新機能②

下表は、各仕様の主な新機能の概要をまとめたものです。

10

機能 概要

EJB3.1 EJBLiteの提供 EJB仕様のサブセットであるEJBLiteによりWeb Profileなど軽量なコンテナでEJBが利用できるようになりました。

EJB-JARの

オプション化

EJBのクラス群をEJB-JARにまとめず、WebアプリのWAR中に包含する事が可能になりました。

シングルトン

SessionBean

シングルトンSession Beanがサポートされコンテナ側でシングルトン(唯一のインスタンス)保証と制御が可能になりました。

JPA2.0 悲観的ロックの

サポート

JPA1.0では楽観的ロックのみサポートしていましたが2.0より悲観的ロックもサポートされます。

コレクションの

機能強化

エンティティ中のコレクションをエンティティのテーブルの子テーブルとして自動的にマップ・永続化できるようになりました。

Criteria APIの

サポート

エンティティのCRUD操作をQuery 言語だけでなく、Javaのクラスのメソッドで実行できるCriteria APIを利用できるようになりました。

キャッシュの

サポート

JPA2.0では、persistence.xmlに柔軟にキャッシュ指定を行う事が可能になりました。

Ver.Up

Ver.Up

Page 11: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved.

JavaEE6各仕様の主要な新機能③

下表は、各仕様の主な新機能の概要をまとめたものです。

11

概要

Context and

Dependency

Injection

JavaEEにおけるDI(Dependency Injection)手法を統一化した仕様。EJBやWebサービスなどのコンポーネントにかかわらず、@Named と@InjectアノテーションによりDIが可能になる。

また、インジェクション対象のオブジェクトのスコープ(リクエスト、セッション、アプリケーション)もアノテーションで指定可能。

Bean Validation Beanやフィールドにおけるnullチェック、数値範囲チェック、文

字列の長さなどの各種妥当性チェックをアノテーション指定により実現できるようにする仕様。

New

New

Page 12: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved.

<Insert Picture Here>

12

Servlet 3.0:アノテーション活用

Page 13: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved. 13

Servlet3.0 : サーブレットでのアノテーション活用

• Servlet2.5までは、WebアプリケーションにおいてサーブレットやURLパターンの定義などの情報は、web.xmlファイル内にXMLタグで記述する必要がありました。

• Servlet3.0では、これらの定義はアノテーションで行うことができ、web.xmlは必須ではなくなりました。

WAR

Servlet1.class

web.xml

WAR

Servlet1.class

@WebServlet(urlPatterns =“/myservlet”) public class Servlet1 extends HttpServlet

…..

<web-app>

<servlet>

<servlet-name>MyServlet/<servlet-name>

<servlet-class>Servlet1</servlet-class>

</servlet>

<servletmapping>

<servletname>MyServlet</servlet-name>

<url-pattern>/myservlet</url-pattern>

</servlet-mapping>

</web-app>

Servlet2.5まで Servlet3.0

web.xml

Servlet1.java

Page 14: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved. 14

[参考] Servlet3.0の主要なアノテーション

アノテーション 概要

@WebServlet サーブレットの定義を行う。このアノテーションが付加されたクラスはjavax.servlet.http.HttpServletを拡張している必要がある。

@WebInitParam サーブレットの初期化パラメータを定義する。

@WebFilter サーブレットのフィルターの定義を行う。このアノテーションが付加されたクラスはjavax.servlet.Filterインターフェースを実装している必要がある。

@WebListener サーブレットのリスナーの定義を行う。このアノテーションが付加されたクラスは、下記のいずれかのインターフェースを実装する必要がある。

javax.servlet.ServletContextListener

javax.servlet.ServletContextAttributeListener

javax.servlet.ServletRequestListener

javax.servlet.ServletRequestAttributeListener

javax.servlet.http.HttpSessionListener

javax.servlet.http.HttpSessionAttributeListener

@MultipartConfig サーブレットに対するリクエストのタイプがmime/multipartであることを定義する。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッチメントを取り出す。これによりファイルアップロードを行うサーブレットが容易に作成できる。

Page 15: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved. 15

アノテーションの例

• 下記は、シンプルにサーブレットのURLパターンだけを指定しているアノテーション例です。

@WebServlet( urlPatterns = { "/Servlet1" },

initParams = { @WebInitParam(name = "param1", value = "Hello")}

)

public class Servlet1 extends HttpServlet {

(以下略)

@WebServlet("/Servlet1")

public class Servlet1 extends HttpServlet {

(以下略)

• 下記は、サーブレットのURLパターンと初期化パラメータを指定しているアノテーション例です。

Page 16: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved.

<Insert Picture Here>

Servlet3.0: 非同期サーブレット

16

Page 17: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved. 17

Servlet3.0: 非同期サーブレット • Servlet2.5までは、サーブレット実行のリクエストを受けてレスポンスを返すまでの動作

は一つのスレッドにより同期的に行われていましたが、非同期処理を行う仕組みは提供されていませんでした。そのため、もしサーブレットが長時間実行されてしまった場合、その間スレッドが占有されてしまうという課題がありました。

• Servlet3.0では、サーブレットから別スレッドによる非同期処理がサポートされるように

なりました。これによりサーブレットを実行するスレッドを効率的に利用できるようになります。

Servlet

リクエスト

レスポンス

Servlet

リクエスト

レスポンス

非同期処理用

クラス

1つの

スレッドを占有

別の

スレッド

スレッド

解放

Servlet2.5まで Servlet3.0

Page 18: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved. 18

非同期処理の例

• 下記は、サーブレットとは非同期で実行しているスレッドからレスポンスを返す処理の例です。

@WebServlet(urlPatterns="/Servlet1", asyncSupported=true)

public class Servlet1 extends HttpServlet {

protected void doGet(HttpServletRequest request,

HttpServletResponse response) throws ServletException,

IOException {

final AsyncContext ac = request.startAsync(request,response);

ac.start(new AsyncProcess(ac));

}

}

public class AsyncProcess implements Runnable {

AsyncContext context;

public AsyncProcess(AsyncContext ctx){

context = ctx;

}

@Override

public void run() {

try {

PrintWriter out = context.getResponse().getWriter();

out.println(“別スレッドより出力してます");

}

catch (Exception ex) { ex.printStackTrace(); }

context.complete();

}

}

サーブレット

非同期で実行するクラス

Page 19: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved.

<Insert Picture Here>

Servlet3.0 : Webフラグメント

19

Page 20: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved.

WAR

20

Servlet3.0 : Webフラグメント

• Servlet2.5までは、Webアプリケーションでフレームワークのライブラリを利用する場合、フレームワークが提供するサーブレットやパラメータ等をweb.xmlへ設定することが必要なケースもあり、web.xmlの肥大化、管理の複雑化を招いていました。

• Servlet3.0では、ライブラリ中にweb-fragment.xmlを用意することで、Webアプリケーションへのweb.xmlの追加設定を不要にできます。

Servlet3.0

WAR

web.xml Servlet1.class

Framework1.jar

Servlet2.5まで

META-INF

web-fragment.xml

Framework1.jar

WEB-INF

classes

lib

Servlet1.class

Framework1.jar

WEB-INF

classes

lib

WEB-INF

FW.class

classes

Page 21: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved.

<Insert Picture Here>

JSF2.0 Facelets

21

Page 22: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved. 22

JSF2.0のFacelets

• JSF1.2までは、ユーザインターフェースとなるビュー層にJSPを利用するアーキテクチャでしたが、JSPはサーブレットに変換、コンパイルされて実行時にビューを生成するためオーバーヘッドが高く、効率的な仕組みとはいえませんでした。

• JSF2.0では、Faceletsというコンポーネントを提供しています。Faceletsではビュー層にXHTMLを利用するアーキテクチャになるため、ビュー生成のオーバーヘッドは低く、かつテンプレートなどの機能を活用することが可能になっています。

• また、faces-config.xmlで複雑な設定を行わずに、アノテーションを使いManaged

Bean等を定義できるようになっています。

テンプレート

ボディ

○○カンパニー Home 製品 サポート 企業

情報

弊社製品一覧

お問い合わせはこちらに

タイトル/メニュー 製品一覧表示

問合せ先リンク

Facelets 製品詳細説明表示

マニュアル一覧表示

XHTML 生成されるビュー

Page 23: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved. 23

[参考] JSF2.0のタグについて

• JSF2.0では、従来のJSF CoreタグやJSF HTMLタグに加え、Faceletsの機能を提供するタグも利用できます。

タグライブラリ 概要 URI Prefix 例

JSF

Facelets

Faceletsのテンプレートのタグライブラリ

http://java.sun.com/jsf/facelets ui: ui:component

ui:insert

JSF HTML JSFのUIコンポーネントのタグライブラリ

http://java.sun.com/jsf/html

h: h:inputText

h:outputText

JSF Core JSF Coreのタグライブラリ

http://java.sun.com/jsf/core f: f:attribute

JSTL Core JSTL Coreのタグライブラリ

http://java.sun.com/jsp/jstl/core c: c:forEach

c:catch

JSTL

Function

JSTL Functionのタグライブラリ

http://java.sun.com/jsp/jstl/functions

fn: fn:toUpperCase

Page 24: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved. 24

Faceletsの例

• Faceletsの例の前提を説明します。

• この例では、XHTMLのテンプレートを用いて入力画面と結果画面を用意します。

• この例では、入力画面のForm項目やSubmitボタン選択時の実行メソッドは1つのManagedBeanにまとめています。

index.xhtml result.xhtml

template.xhtml

xxx Submit

名前を入力 こんにちは、xxxさん

JSF

Managed Bean

テンプレート適用

テンプレート適用

content

header

footer

header

footer

header

footer

Page 25: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved. 25

Faceletsの例(Managed Bean)

• 下記はManaged Beanの例です。

@ManagedBean

public class HelloBean implements Serializable {

private String name;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String say() {

System.out.println("---入力された値は " + name);

return "/result";

}

}

Page 26: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved. 26

Faceletsの例(XHTMLテンプレート)

• 下記はXHTMLテンプレートの例です。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"

xmlns:ui="http://java.sun.com/jsf/facelets">

<head>

<title><ui:insert name="title">Default title</ui:insert></title>

</head>

<body>

<div id="header">

<ui:insert name=“header”>JSF2.0 Faceletsの例</ui:insert>

</div>

<div id="content">

<ui:insert name="content"></ui:insert>

</div>

<div id="footer">

<ui:insert name="footer">このアプリはWebLogic12c上で動作しています。</ui:insert>

</div>

</body>

</html>

Page 27: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved. 27

Faceletsの例(XHTML)

• 下記はXHTMLの例です。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns=http://www.w3.org/1999/xhtml xmlns:ui="http://java.sun.com/jsf/facelets"

xmlns:h=http://java.sun.com/jsf/html xmlns:f="http://java.sun.com/jsf/core">

<f:loadBundle basename="resources.application" var="msg"/>

<head>

<title><h:outputText value="#{msg.welcomeTitle}" /></title>

</head>

<ui:composition template="./template.xhtml">

<ui:define name="content">

<h:form>

名前を入力して実行 ボタンを選択してください。

<h:inputText id="userid" value="#{helloBean.name}"/>

<h:commandButton id="submit" action="#{helloBean.say}" value="実行"/>

</h:form>

</ui:define>

</ui:composition>

</html>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"

xmlns:ui="http://java.sun.com/jsf/facelets"

xmlns:f="http://java.sun.com/jsf/core"

xmlns:h="http://java.sun.com/jsf/html">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=windows-31j"/>

<title>Insert title here</title>

</head>

<ui:composition template="./template.xhtml">

<ui:define name="content">

こんにちは!<h:outputText id="msg" value="#{helloBean.name}"/>さん

</ui:define>

</ui:composition>

</html>

index.xhtml

result.xhtml

Page 28: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved.

<Insert Picture Here>

28

EJB3.1:簡略化されたパッケージング

Page 29: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved. 29

EJB3.1: パッケージングの簡略化 • JavaEE5までは、サーブレットやJSPはWebアプリケーションとしてWARファイルに、

EJBはEJBアプリケーションとしてJARファイルにまとめ、WebアプリケーションからEJB

を利用する場合は、WARファイルとEJBのJARファイルをさらにまとめたEARファイルを用意するか、事前にEJBをデプロイしてからWebアプリケーションから呼び出す必要がありました。

• JavaEE6では、サーブレットのクラスを配置する場所(WEB-INF/classesなど)にEJBのクラスを配備できます。またインターフェースを用いず実装クラスだけでEJBとして動作させることが可能になっています。

EAR

WAR EJB-JAR

Servlet1.class Hello.class

WAR EJB-JAR

Servlet1.class Hello.class

パッケージング

WAR

Servlet1.class

Hello.class

利用

利用

JavaEE5まで JavaEE6

HelloImpl.class

インターフェース

実装クラス

実装クラス

Page 30: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved. 30

EJB3.1簡略化パッケージの例

• 下記はEJB3.1の実装クラスをWebアプリケーションの中にパッケージングしてサーブレットから利用している例です。

@WebServlet(urlPatterns="/Servlet1”)

public class Servlet1 extends HttpServlet {

@EJB

private Hello hello;

protected void doGet(HttpServletRequest request,

HttpServletResponse response) throws ServletException,

IOException {

response.setContentType("text/html; charset=windows-31j");

PrintWriter out = response.getWriter();

String msg = hello.sayHello("WebLogic12c");

out.println("Message = " + msg); }

}

@Stateless

@LocalBean

public class Hello {

public Hello() {

}

public String sayHello(String name) {

return "Hello! " + name;

}

}

WARファイル/WEB-INF/classes

サーブレット EJB

Page 31: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved.

<Insert Picture Here>

31

Bean Validation 1.0

Page 32: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved. 32

Bean Validation

• Bean Validationは、JavaEE6で新たに追加された仕様です。(Hibernate Validatorベース)

• Bean Validationは、Bean(Java Object)やそのフィールドの値に制約を定義し、格納されている値の妥当性をチェックする機能を提供します。

• JavaEE5では、 Bean単位で値の検証を場合は、そのためのコードを用意する必要がありました。(JSFではUIコンポーネント単位で入力値の検証機能は提供していました。)

• JavaEE6のBean Validationではアノテーションによりフィールドの制約を定義できます。これにより、Bean単位でのフィールドの値の存在(null)チェックや数値範囲チェック、桁数チェックや時間範囲チェックなどを容易に設定・実現する事が可能になっています。

530

Bean Validation

Bean

大阪

妥当性チェック

エラーの場合は、そのメッセージを取得可能

フィールドの制約や制約違反

時のメッセージをアノテーションで指定

結果

名前

郵便番号

住所

名前が空です。

郵便番号は7桁で入力してください。

登録フォーム

登録

Page 33: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved. 33

[参考] Bean Validationのアノテーション

• 下表はBean Validationであらかじめ用意されているフィールド値を制約する主なアノテーションです。一つのフィールドに対して複数併用することができます。

• 下表以外にもカスタムのアノテーションを作成する事も可能です。

アノテーション 制約 指定例

@NotNull 値にnullは許容しない

@NotNull(message=“入力必須です”)

String name

@Min 値は指定値以上しか許容しない

@Min(value=100,message=”100以上を入力して下さい”)

int amount;

@Max 値は指定値以下しか許容しない

@Max(value=100,message=”100以内で入力して下さい”)

int point;

@Size 値の桁数は指定範囲しか許容しない

@Size(min=7,max=7,message=“7桁で入力して下さい”)

String zipcode;

@Pattern 値は指定パターンしか許容しない

@Pattern(regexp=“*@*”)

String email;

Page 34: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved. 34

Bean Validationの例

• 下記はBeanのフィールドに制約を設定している例です。

public class BankTransferBean {

@NotNull

@Size(min=7, max=7,message="口座番号は{min}桁で入力して下さい。")

private String koza; //7ケタ

@NotNull

@Max(value=500000,message="1回の振込金額は50万円まで")

@Min(value=1,message="振込金額は1円以上で指定してください。")

private int kingaku; // 1~500000

@NotNull

@Size(min=1,message="振込人名は入力必須")

private String name; // Not Null

public String getKoza() {

return koza;

}

(以下略)

• 口座番号は必ず7桁の値が必要

• 振込金額1円以上、50万円以内

• 振込人名は、入力必須

Page 35: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved. 35

Bean Validationの例

• 下記は、サーブレット内でBeanのフィールド値の妥当性チェックを行っている例です。

BankTransferBean bean = new BankTransferBean();

bean.setKoza(“1234567”);

bean.setKingaku(200000);

bean.setName(“Oracle”);

ValidatorFactory vf = Validation.buildDefaultValidatorFactory();

Validator v = vf.getValidator();

Set<ConstraintViolation<BankTransferBean>> result = v.validate(bean);

String message = "";

for(ConstraintViolation<BankTransferBean> cv : result){

message +=cv.getMessage()+" 入力値:"+ cv.getInvalidValue() + "<br>";

}

if (message.equals("")) {

message = "振込完了しました。";

}

response.setContentType("text/html; charset=windows-31j");

PrintWriter out = response.getWriter();

out.println(message);

}

Page 36: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved.

<Insert Picture Here>

36

Context and Dependency Injection(CDI) 1.0

Page 37: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved. 37

Context and Dependency Injection(CDI)

• CDIは、JavaEE6においてDI(Dependency Injection)手法を統一化した仕様です。

• DIとは、あるJavaオブジェクト内で必要とするJavaオブジェクトの生成をコンテナ側で行わせることで、オブジェクト間の結合を疎にする手法を指します。

• JavaEE5でも一部の仕様で限定的にDI機能を提供していましたが、仕様毎に方法が異なったり、スコープを制御するには別途コードの用意が必要という課題がありました。

• JavaEE6のCDIでは、CDIによりDIの方法が統一化され、さらにスコープ定義をアノテーションで行えるようになっています。

@WebServlet(urlPatterns=“/A")

public class A extends HttpServlet {

@Inject

B b;

protected void doGet

(HttpServletRequest req, HttpServletResponse res) {

b.getXX ();

….

@Named

public class B {

String XX = “xx”;

public String getXX() {

return XX;

}

}

クラスB サーブレットA

Page 38: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved.

<Insert Picture Here>

Oracle WebLogic Server 12c概要

38

Page 39: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved.

WebLogic Server の機能と歴史

WebLogic

8.1

WebLogic

9.x

WebLogic

10.0 WebLogic10g

(10.3)

WebLogic11g

(10.3.1~)

WebLogic12c

(12.1.1.0)

2003年 2005年 2007年 2008年 2009年 2011年

JavaEE J2EE1.3 J2EE1.4 JavaEE5 JavaEE6

JDK JDK1.4.2 JDK1.5 JDK1.6

主要な

対応仕様

新機能

・Servlet2.3

・JSP1.2

・EJB2.0

・Web Services

enhancements

・Servlet2.4

・JSP2.0

・EJB2.1

・JAX-RPC1.1

・WS-Security

・WS-Reliable

Messaging

・Servlet2.5

・JSP2.1

・JSF1.2

・EJB3.0

・JAX-WS2.0

・JAC1.5

• Web2.0対応 (HTTP Pub-Sub Server)

• Fast Swap

( 追加対応)

• JAX-WS 2.1

• JAXB 2.1

・ GridLink for RAC

・ Active Cache

・ WebTier 製品統合

・Flight Recorder

・CAT

・Exalogic最適化オプション

・Servlet3.0

・JSP2.2

・JSF2.0

・EJB3.1

・CDI 1.0

・Bean Validation

Zero DownTime

アーキテクチャ刷新

特徴的新機能の追加

JavaEE5対応

Ese Of

Development

JDK1.6対応

性能改善

オラクルブランド

でのリリース

JavaEE6対応

JavaSE7対応

RAC連携強化

オラクル技術との融合

Exalogic最適化

Coherence連携強化

2011年12月、JavaEE6に対応したWebLogic Server 12cを発表

長い歴史と多くの実績をもち、製品としての成熟度・洗練度をさらに向上

39

Page 40: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved.

Oracle WebLogic Server 12c

40

製品コンセプト

Oracle Fusion MiddlewareにおけるJavaEEアプリケーション・サーバー

主要な新機能

JavaEE6完全準拠, JavaSE7対応

Active GridLink for RACの拡張

Web Session Affinity

コネクション・ラベリング

JDBC TLOGストア

WebLogic Mavenプラグインの拡張

データベースのプロキシ認証

Restful Management Services

Page 41: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved.

WebLogic Server 12c:JavaEE6完全準拠, JavaSE7対応

Servlet 3.0

JSF 2.0

JSP 2.2

EJB 3.1

CDI 1.0

JTA 1.1

JPA 2.0

Bean

Validation

JAX-RS

JMS

JAX-WS

JCA

JSR 196

JNDI

RMI

SAAJ

JSR 77

JAAS

JSR 88

JAX

RPC

Managed

Beans

DI for Java

Interceptors

1.1

Common

Annotations

• JavaEE6 完全準拠

• Servlet3.0やEJB3.1,CDI,Bean Validation等のAPIを完全にサポート

• 開発の容易性にフォーカスし、アノテーション活用範囲を拡大

• JavaEE6対応 IDEの提供

• OEPE12.1.1.0

• NetNBeans7.1

• WebLogic11g(10.3.5)と完全互換

• 既存アプリケーションを容易に移行可能

• JavaSE6(JDK1.6.0_24以降)とJavaSE7に対応

• JavaSE7はWebLogic Server 12cとは別に事前にインストール/設定しておくなど、一部追加手順が必要

41

Page 42: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved. 42

WebLogic Server 12c 開発ツールについて

• Oracle WebLogic Server 12cは標準仕様であるJava EE 6に完全準拠しているため、Java EE 6のアプリケーションが開発可能な開発ツールを利用できます。

• 下表はオラクルが提供しているWebLogic Server向け開発ツールです。

ツール名 概要

Oracle Enterprise Pack for

Eclipse (12.1.1.0)

Eclipse Indigoベースの開発ツール。Java EE 6ベースのアプリ開発が可能。

NetBeans7.1 JavaEE6だけでなく、JavaFXなどJava全般の開発支援機能を提供できるツール。Glassfishとの親和性も高い。

Oracle JDeveloper 12c

(2011年12月現在、未リリース)

JavaだけでなくDB(表設計、編集、PL/SQL等)開発ツール

12cより WebLogic12cに対応し、Java EE 6ベースのアプリ開発が可能になる予定。

Page 43: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved.

Oracle WebLogic Server 12c のアーキテクチャ

• Oracle WebLogic Server 12c (12.1.1.0)の基本的なアーキテクチャは、WebLogicの以前までのバージョンと同様。

管理対象 サーバ#2

管理対象 サーバ#3

管理 サーバ

Oracle WebLogic Server 12c (12.1.1.0)

WebLogicドメイン

WebLogicクラスタ

管理対象 サーバ#1

ノード マネージャ

ノード マネージャ

マシンA

マシンB

管理サーバ

管理ツール (Admin Console/

FMW Control/ /WLSTなど)

ドメイン ログ

コンフィグ レーション リポジトリ

JMX

JMX

JMX Webサーバ

または

L/B

HTTP/HTTPS

リクエスト

43

Page 44: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved.

サポート対象のOS/JDK/DB HW OS(64bit only ) *1 JDK(64bit only) *1 DB(WLS機能用) *2

x64 RedHat Linux 5.6~

Oracle Linux 5.6~

SLES 10 SP2~

SLES 11

Oracle JDK 1.6.0_29~

JRockit R28.2.0~

Oracle 11.1.0.7~

Oracle RAC 11.1.0.7

Oracle 11.2.0.3~

Oracle RAC 11.2.0.3~

DB2/UDB 9.5~

DB2 9.7~

SQL Server 2008

SQL Server 2008R2

MySQL5.5

Sybase 15.5~

Windows 2008 R2

Solaris 10 U9~

Solaris 11

Oracle JDK 1.6.0_29~

Windows 7 SP1~

SPARC Solaris 10 U9~

Solaris 11

Power AIX 6.1 TL6~

AIX 7.1 TL0~

IBM JDK 6 SR9 FP2~

44

*1) 開発環境では32bit OS(MAC、Windows XP/VISTA/7、Linux 5)、32bit JDK(Oracle JDK、JRockit)もサポート http://www.oracle.com/technetwork/developer-tools/eclipse/system-requirements-101778.html *2) アプリケーションデータアクセスのみ用途には一定条件を満たすJDBCドライバならば上記以外のDBもサポート http://www.oracle.com/technetwork/middleware/ias/downloads/wls-1211x-certmatrix-1395408.xls ただし、マルチデータソース、GridLinkデータソースを利用の場合、Oracle RACは11gのみをサポート http://docs.oracle.com/cd/E24329_01/web.1211/e24367/oracle_rac.htm#i1080090

※2012年1月23日現在のサポート状況

Page 45: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved.

<Insert Picture Here>

45

WebLogic Server12c 新機能

Active GridLinkのWeb Session Affinity

Page 46: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved.

WebLogicのOracle RAC接続機能

• WebLogic Server 11g(10.3.1以降)のバージョンより、Oracle RAC接続機能が拡張・強化され、下表のように2通りの方法を選択できます。

機能 概要

マルチデータソース

WebLogic Server 10.3までのマルチデータソースとほぼ同等機能で、WebLogic Server 11g(10.3.1)から利用することができます。

GridLinkデータソース Oracle NetとOracle RACのFAN(Fast Application

Notification)によるRAC接続機能をWebLogicでも利用できるようにしたもので、WebLogic

Server11g(10.3.4)から利用することが可能です。

46

Page 47: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved. 47

マルチデータソース

RACサービス毎にマルチデータソースを構成します。

データソースは、サービス指定を行いRACノード数分用意します。

アプリケーションはRACサービスに対応したマルチデータソースを指定して接続します。

(RACサービス指定接続が可能)

接続要求はRACサービス設定基づき分散されます。

RACのXAトランザクション制限の意識不要です。

データソース1 データソース2 データソース3

WebLogic Server 11g アプリケーション

マルチデータソース(サービスA用)

データソース1 データソース2 データソース3

マルチデータソース(サービスB用)

サービスA サービスB

ACTIVE ACTIVE ACTIVE

RACサービス数=マルチデータソース数

マルチデータソースに含まれるデータソースの数=RACインスタンス数

RACインスタンスの数だけ、データソースを設定しておく。(インスタンス「RAC3」はFINサービスが構成されていないため、データソースは無効化状態)

Oracle RAC

Page 48: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved.

GridLinkデータソース

RACサービス毎にGridLinkデータソースを構成させます。

アプリケーションはRACサービスに対応したGridLinkデータソースを指定して接続します。

接続要求はRACサービス設定基づき分散されます。

RACのXAトランザクション制限に対応するため、XA Affinity機能を利用します。

Oracle Notification Service(ONS)により、RACの死活情報の通知を受け、接続プール中のコネクションで、ダウンしているRACノードへのコネクションだけをクリアできます。(Fast Connection Failover)

さらにRACの負荷情報を通知し、アプリが接続要求時、負荷の軽いノードへの接続を使用させることも可能です。(Runtime Connection Load Balancing )

GridLinkデータソースA

WebLogic Server 11g(10.3.4~) アプリケーション

(サービスA用) GridLinkデータソースB (サービスB用)

サービスA サービスB

ONS

ONS FAN

ONSにより、RACからインスタンスやノードの死活情報の通知を受け、該当するインスタンス、ノードに接続している接続プール中

のコネクションをクリア。

また、RACの負荷情報を通知し、アプリに負荷の軽いノードへ論理接続させることも可能。

WebLogic Server 11g (10.3.4)より

Oracle RAC

48

Page 49: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved.

• 同一XAトランザクションからの接続要求に対しは同一RACインスタンスから確保した接続を返す(初回の接続はRCLBにより選択)

• コストの高いキャッシュ・フュージョンの発生を抑制(キャッシュヒット率向上)

• 2フェーズコミットにかかるオーバヘッドを軽減

WebLogic Server

Active GridLinkのトランザクション制御 XAアフィニティ

49

XA Affinity

RAC Database

Instance1

Instance2

Instance3

EJB1 Data Source

WebLogic Server

EJB

EJB3 Data

Source

EJB2 Data Source

EJB4 Data

Source Transaction

Page 50: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved.

Active GridLinkのWebセッション制御 Web セッション・アフィニティ(WLS12.1.1~)

• 同一HttpSessionからの接続要求に対しは、できるだけ同一RACインスタンスから確保した接続を返す(初回の接続はRCLBにより選択)

• コストの高いキャッシュ・フュージョンの発生を抑制(キャッシュヒット率向上)

RAC Database

Instance1

Instance2

Instance3

50

WebLogic Server

Servlet Data Source

JSP

Servlet Data Source

JSP

JSP

HttpSession

Web Session Affinity

Page 51: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved.

XA、Webセッション・アフィニティの設定

1. RAC側の設定(RCLBの有効化)

• CLBの目標を”SHORT”に、RCLBの目標を”THROUGHPUT”または”SERVICE_TIME”に設定したサービスを新規作成し、起動

2. WebLogic側の設定

• GridLinkデータソースを作成

• 手順1で作成したサービス名を宛先に設定

• FANを有効化し、ONSの接続先を設定

3. アプリケーション

• アプリケーションコードの変更は不要

• GridLinkデータソースから接続を取得するだけでよい

51

srvctl add service -d orcl -s demosvc -g srvpool1 -j SHORT -B THROUGHPUT

srvctl start service -s demosvc -d orcl

Affinity

Page 52: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved.

機能 GridLinkデータソース マルチデータソース

データソースの構成 RAC側のサービスごとにGridLink

データソースを1つ設定

RAC側のサービス数×ノード数

ぶんの設定が必要

RAC構成変更時の

データソース設定変更

設定変更は不要 設定変更が必要

フェールオーバー RAC側からの通知による高速接続フェールオーバー(FCF)

WLS側からの定期的なポーリン

グによる障害検知のため遅延が発生しやすい

ロードバランシング DB側の負荷を考慮した実行時接続ロードバランシング(RCLB)

DB側の負荷を考慮しない静的ラウンドロビン

接続アフィニティ 複数GridLinkデータソースに跨るXAアフィニティ、Webセッションアフィニティ

同一マルチデータソース内でのXAアフィニティのみ

Data Guardサポート プライマリ側、スタンバイ側に同等構成のRACを配置できる

プライマリ側のRACは1インスタンスしか利用できない

52

GridLinkデータソース vs マルチデータソース

Page 53: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved.

<Insert Picture Here>

53

WebLogic Server 12c 新機能:JDBC TLOG

Page 54: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved. 54

トランザクション・ログ(TLOG)の重要性

• 2フェーズコミットにおいては、トランザクション・マネージャ(TM)は、現在のトランザクションの状態を安定したストレージ上のTLOGに保存しなければならない

• TM障害からの回復時に、TMはTLOGを利用してインダウト(後述)

なトランザクションを解決する

1. prepare

6.成功

2.OK

3. prepare

4.OK

5.commit

8.commit 9.成功

7.OK

10.OK

TM RM 1 RM 2

TLOG

REDOログ

REDOログ

JDBC TLOG

TLOGは障害からのトランザクションの回復のための重要なログ

Page 55: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved. 55

インダウト(不明区間)とは

• RMがprepareに対するOKを送ってから、TMからのcommitメッセージが届くまでの区間

• この区間は、RMはTMからの確定要求が来るまでトランザクションを保持し続ける。つまり確定要求が来ない限り、自分からは何もしない。

• この区間でTM障害が発生すると・・・、データベースのリソースはブロックされ続けてしまう。TMが長時間回復せず、各リソースマネージャが独断でヒューリスティックな決定(推定によるコミットorアボート)を行えば、データの不整合が発生しうる。

1. prepare

TM RM 1 RM 2

4.成功

2.OK

1. prepare

2.OK

3.commit

3.commit 4.成功

5.OK

5.OK

インダウト

(不明区間)

インダウト

(不明区間)

各RMはTMからの確定要求が来るまで、リソースのロックを保持し続ける

JDBC TLOG

Page 56: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved.

JDBC TLOG ストア

• 機能

• 従来ファイルストア(デフォルト・ストア)のみに格納していたトランザクション・ログ(TLOG)を、より信頼性かつ利便性の高いデータベースへ格納できるようにした機能

• メリット

• 整合性: 全てのステートデータ(アプリケーション・データ、JMSメッセージ、TLOG)を整合性を保った状態でデータベースへ格納

• 障害対策: TM障害時も別の正常なマシンでTMを再起動し、データベース上のTLOGへアクセスすることにより、インダウトなトランザクションを迅速に解決し、業務を継続(TLOGのコピーは不要)

• 災害対策: Data Guardの利用により、災害発生時にもスタンバイサイトで、インダウトなトランザクションを解決し、業務を継続

• 運用性: データベースのほうが共有ファイルシステムやレプリケーションソフトよりも管理が容易

56

JDBC TLOG

Page 57: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved.

Machine B

JDBC TLOGストアが有効なシナリオ

• サーバ自動移行(WLSクラスタの機能)の簡素化

• 災害対策の簡素化(Data Guardとも連携して)

57

JDBC TLOG

Machine A

WLS

TLOG

Machine B

WLS

Machine A

WLS

-A

TLOG

WLS

-B

Machine B Machine A

WLS

-A

TLOG

WLS

-B

Data Guard

Server Migration

Fail Over スタンバイサイト プライマリサイト

Page 58: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved.

Oracle RAC

Web Tier

従来の災害対策アーキテクチャ ステートの転送に複数の技術を利用するため同期が困難

Active Site Standby Site

Application Data

Local LB

Web Tier Local LB

Web Tier Local LB

Web Tier

Binaries

Configuration

Middleware Tier

WebLogic WebLogic

WebLogic

Binaries

Configuration

Oracle RAC

Web Tier

Application Data

Local LB

Web Tier Local LB

Web Tier Local LB

Web Tier

Binaries

Configuration

Middleware Tier

WebLogic WebLogic

WebLogic

Binaries

Configuration

Global Load Balancer

Transaction Logs

JMS Messages

Transaction Logs

JMS Messages

File Replication

Datagard or

GoldenGate

File Replication

Instance Instance

Instance

Instance Instance

Instance

58

JDBC TLOG

Page 59: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved.

Oracle RAC

Web Tier

新しい災害対策アーキテクチャ 全てのステートをDBに格納するため、復旧がシンプル

Active Site Standby Site

Application Data

Local LB

Web Tier Local LB

Web Tier Local LB

Web Tier

Binaries

Configuration

Middleware Tier

WebLogic WebLogic

WebLogic

Binaries

Configuration

Oracle RAC

Web Tier

Application Data

Local LB

Web Tier Local LB

Web Tier Local LB

Web Tier

Binaries

Configuration

Middleware Tier

WebLogic WebLogic

WebLogic

Binaries

Configuration

Global Load Balancer

File Replication

Datagard or

GoldenGate

File Replication

Instance Instance

Instance

Instance Instance

Instance

Transaction Logs

JMS Messages

Transaction Logs

JMS Messages

59

JDBC TLOG

Page 60: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved.

JDBC TLOGストア設定方法

1. TLOG用JDBCデータソースの作成

• non XAドライバを利用し、かつ、「グローバル・ トランザクションのサポート」を非選択に

(TLOG用データソース自身をtransaction-

awareにしてしまうと、トランザクション・アボート時

にTLOGに書かれず、TLOGの役割を果たせない)

2. トランザクション・ログ・ストア

• ドメイン → サーバ

→ 構成 → サービス

→ トランザクション・ログ・ストア

• タイプ「JDBC」を選択

• 手順1で作成したデータソースを選択

3. 再起動後に自動的にTLOG

格納用のテーブルが作成される

60

JDBC TLOG

Page 61: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved.

JDBC TLOGストア構成上の注意点

• WebLogicよりも前にTLOG格納先のDBを起動すること

• TLOG用DBが起動していないと、WebLogicの起動に失敗する

• TLOG用のDBは冗長化(RACなど)を推奨

• TLOG用DBが停止すると、WebLogicはTM機能を提供できなくなるので、すべてのグローバルトランザクションは失敗する

61

JDBC TLOG

Page 62: 76 WebLogic Server勉強会@大阪 #13 - Oracle...る。HttpServletRequestオブジェクトgetPartやgetPartsメソッドでMIMEアタッ チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易

Copyright© 2012, Oracle. All rights reserved. 62