<Insert Picture Here>
JavaEE6 と WebLogic Server 12c について
日本オラクル株式会社
第76回 夜な夜な! なにわオラクル塾
以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです。
また、情報提供を唯一の目的とするものであり、いかなる契約にも組み込むことは
できません。以下の事項は、マテリアルやコード、機能を提供することをコミットメン
ト(確約)するものではないため、購買決定を行う際の判断材料になさらないで下さ
い。オラクル製品に関して記載されている機能の開発、リリースおよび時期につい
ては、弊社の裁量により決定されます。
OracleとJavaは、Oracle Corporation 及びその子会社、関連会社の米国及びその他の国における登録商標です。文 中の社名、商品名等は各社の商標または登録商標である場合があります。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
<Insert Picture Here>
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
サーバーサイドJava仕様
のデファクト・スタンダード
として確立
さらなる仕様の充実・拡張
Webサービス対応
Ese Of Development
さらなるEse Of Development、
軽量化、拡張性
JavaEE6のゴールと特長
JavaEE6は、これまでのJavaEE仕様の肥大化や設定の煩雑さなどの課題を解消す
るために、下記をゴールとして仕様策定されています。
Further Ease of Development (さらなる開発容易性)
Flexible & Right sizing (柔軟性と軽量化/最適化)
Enhanced Extensibility (さらなる拡張性)
増大した仕様を全て使うのではなく、必要なもののみ使う「プロファイル」の導入
結果的に軽量化されたコンテナとして利用可能
使用されていない仕様の将来的な削除の検討(プルーニング)
アノテーションを活用したServlet設定やバリデーション、依存性注入
XML設定ファイルへの煩雑な設定を極小化
簡略化されたEJB仕様「EJBLite 」のサポート
機能拡張インターフェースをより多く用意
ライブラリ単位で設定をプラグイン-アウトできる「Webフラグメント」の導入
[参考] 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 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 109Web 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
JavaEE6のプロファイル
JavaEE6では、対応仕様のうち、必要なものだけをピックアップして実装できる「プロフ
ァイル」機構をサポート。
デフォルトでは、全ての機能を実装する「JavaEE Profile」とWebアプリで必要な仕様
だけを実装した「Web Profile」を定義。
任意のプロファイルを定義し、実装してもよい。
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 forOther Languages 1.0
任意の仕様を実装
JavaEE6 各仕様の主要な新機能①
下表は、各仕様の主な新機能の概要をまとめたものです。
機能
概要
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
JavaEE6各仕様の主要な新機能②
下表は、各仕様の主な新機能の概要をまとめたものです。
機能
概要
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
JavaEE6各仕様の主要な新機能③
下表は、各仕様の主な新機能の概要をまとめたものです。
概要
Context and
Dependency
Injection
JavaEEにおけるDI(Dependency Injection)手法を統一化した
仕様。EJBやWebサービスなどのコンポーネントにかかわらず、
@Named と@InjectアノテーションによりDIが可能になる。
また、インジェクション対象のオブジェクトのスコープ(リクエスト、
セッション、アプリケーション)もアノテーションで指定可能。
Bean Validation
Beanやフィールドにおけるnullチェック、数値範囲チェック、文
字列の長さなどの各種妥当性チェックをアノテーション指定に
より実現できるようにする仕様。
New
<Insert Picture Here>
Servlet3.0 : サーブレットでのアノテーション活用
•
Servlet2.5までは、WebアプリケーションにおいてサーブレットやURLパターンの定義な
どの情報は、web.xmlファイル内にXMLタグで記述する必要がありました。
•
Servlet3.0では、これらの定義はアノテーションで行うことができ、web.xmlは必須では
なくなりました。
WAR
Servlet1.class
web.xmlWAR
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
[参考] 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アタッ
チメントを取り出す。これによりファイルアップロードを行うサーブレットが容易
に作成できる。
アノテーションの例
•
下記は、シンプルにサーブレットのURLパターンだけを指定しているアノテーション例です。
@WebServlet( urlPatterns = { "/Servlet1" },
initParams = { @WebInitParam(name = "param1", value = "Hello")}
)
public class Servlet1 extends HttpServlet {
(以下略)
@WebServlet("/Servlet1")
public class Servlet1 extends HttpServlet {
(以下略)
•
下記は、サーブレットのURLパターンと初期化パラメータを指定しているアノテーション
例です。
<Insert Picture Here>
Servlet3.0: 非同期サーブレット
•
Servlet2.5までは、サーブレット実行のリクエストを受けてレスポンスを返すまでの動作
は一つのスレッドにより同期的に行われていましたが、非同期処理を行う仕組みは提
供されていませんでした。そのため、もしサーブレットが長時間実行されてしまった場合、
その間スレッドが占有されてしまうという課題がありました。
•
Servlet3.0では、サーブレットから別スレッドによる非同期処理がサポートされるように
なりました。これによりサーブレットを実行するスレッドを効率的に利用できるようになり
ます。
Servlet
リクエスト
レスポンス
Servlet
リクエスト
レスポンス
非同期処理用
クラス
1つの
スレッドを
占有
別の
スレッド
スレッド
解放
Servlet2.5まで
Servlet3.0
非同期処理の例
•
下記は、サーブレットとは非同期で実行しているスレッドからレスポンスを返す処理の
例です。
@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();
} }
サーブレット
<Insert Picture Here>
WAR
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.jarServlet2.5まで
META-INF
web-fragment.xmlFramework1.jar
WEB-INF
classes lib Servlet1.class Framework1.jarWEB-INF
classes libWEB-INF
FW.class classes<Insert Picture Here>
JSF2.0のFacelets
•
JSF1.2までは、ユーザインターフェースとなるビュー層にJSPを利用するアーキテクチ
ャでしたが、JSPはサーブレットに変換、コンパイルされて実行時にビューを生成するた
めオーバーヘッドが高く、効率的な仕組みとはいえませんでした。
•
JSF2.0では、Faceletsというコンポーネントを提供しています。Faceletsではビュー層
にXHTMLを利用するアーキテクチャになるため、ビュー生成のオーバーヘッドは低く、
かつテンプレートなどの機能を活用することが可能になっています。
•
また、faces-config.xmlで複雑な設定を行わずに、アノテーションを使いManaged
Bean等を定義できるようになっています。
テンプレート
ボディ
○○カンパニー
Home 製品 サポート 企業 情報 弊社製品一覧 お問い合わせはこちらにタイトル/メニュー
製品一覧表示
問合せ先リンク
Facelets
製品詳細説明表示
マニュアル一覧表示
XHTML
生成されるビュー
[参考] 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
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 footerFaceletsの例(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";
}
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>
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>
index.xhtml
<Insert Picture Here>
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.classWAR
EJB-JAR
Servlet1.class Hello.class パッケージングWAR
Servlet1.class Hello.class 利用 利用JavaEE5まで
JavaEE6
HelloImpl.class インターフェース 実装クラス 実装クラス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
<Insert Picture Here>
Bean Validation
•
Bean Validationは、JavaEE6で新たに追加された仕様です。
(Hibernate Validatorベース)
•
Bean Validationは、Bean(Java Object)やそのフィールドの値に制約を定義し、格納され
ている値の妥当性をチェックする機能を提供します。
•
JavaEE5では、 Bean単位で値の検証を場合は、そのためのコードを用意する必要があり
ました。(JSFではUIコンポーネント単位で入力値の検証機能は提供していました。)
•
JavaEE6のBean Validationではアノテーションによりフィールドの制約を定義できます。
これにより、Bean単位でのフィールドの値の存在(null)チェックや数値範囲チェック、桁数
チェックや時間範囲チェックなどを容易に設定・実現する事が可能になっています。
530Bean
Validation
Bean
大阪妥当性チェック
エラーの場合は、
そのメッセージを
取得可能
フィールドの制約や制約違反
時のメッセージをアノテーション
で指定
結果
名前 郵便番号 住所 名前が空です。 郵便番号は7桁で入力してください。 登録フォーム 登録[参考] 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;
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万円以内
•
振込人名は、入力必須
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();
<Insert Picture Here>
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
<Insert Picture Here>
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 DevelopmentJDK1.6対応
性能改善
オラクルブランド
JavaEE6対応
JavaSE7対応
RAC連携強化
オラクル技術との融合
Exalogic最適化
Coherence連携強化
2011年12月、JavaEE6に対応したWebLogic Server 12cを発表
長い歴史と多くの実績をもち、製品としての成熟度・洗練度をさらに向上
Oracle WebLogic Server 12c
製品コンセプト
Oracle Fusion MiddlewareにおけるJavaEEアプリケーション・サーバー
主要な新機能
JavaEE6完全準拠, JavaSE7対応
Active GridLink for RACの拡張
Web Session Affinity
コネクション・ラベリング
JDBC TLOGストア
WebLogic Mavenプラグインの拡張
データベースのプロキシ認証
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とは別に事前
にインストール/設定しておくなど、一部追加手順
が必要
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ベースのアプリ開発が
可能になる予定。
Oracle WebLogic Server 12c のアーキテクチャ
•
Oracle WebLogic Server 12c (12.1.1.0)の基本的なアーキテクチャは、WebLogicの以前ま
でのバージョンと同様。
管理対象
サーバ#2
管理対象
サーバ#3
管理
サーバ
WebLogicドメイン
WebLogicクラスタ管理対象
サーバ#1
ノード
マネージャ
ノード
マネージャ
マシンA マシンB 管理サーバ 管理ツール (Admin Console/ FMW Control/ /WLSTなど) ドメイン ログ コンフィグ レーション リポジトリ JMX JMX JMX Webサーバ または L/B HTTP/HTTPS リクエストサポート対象の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~
*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のみをサポート
※2012年1月23日現在のサポート状況
<Insert Picture Here>
WebLogic Server12c 新機能
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
マルチデータソース
RACサービス毎にマルチデータソースを構成します。
データソースは、サービス指定を行いRACノード数分用意します。
アプリケーションはRACサービスに対応したマルチデータソースを指定して接続します。
(RACサービス指定接続が可能)
接続要求はRACサービス設定基づき分散されます。
RACのXAトランザクション制限の意識不要です。
データソース1 データソース2
データソース3WebLogic Server 11g
アプリケーションマルチデータソース(サービスA用)
データソース1 データソース2 データソース3マルチデータソース(サービスB用)
サービスA
サービスB
ACTIVE
ACTIVE
ACTIVE
RACサービス数=マルチデータソース数 マルチデータソースに含まれるデータソースの数 =RACインスタンス数 RACインスタンスの数だけ、データソースを 設定しておく。(インスタンス「RAC3」はFIN サービスが構成されていないため、データソ ースは無効化状態)
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 ONSFAN
ONSにより、RACからインスタンスやノード の死活情報の通知を受け、該当するインス タンス、ノードに接続している接続プール中 のコネクションをクリア。 また、RACの負荷情報を通知し、アプリに負 荷の軽いノードへ論理接続させることも可能。WebLogic Server 11g (10.3.4)より
Oracle RAC
•
同一XAトランザクションからの接続要求に対しは同一RACインスタンスから
確保した接続を返す(初回の接続はRCLBにより選択)
•
コストの高いキャッシュ・フュージョンの発生を抑制(キャッシュヒット率向上)
•
2フェーズコミットにかかるオーバヘッドを軽減
WebLogic Server
Active GridLinkのトランザクション制御
XAアフィニティ
XA AffinityRAC Database
Instance1
Instance2
Instance3
EJB1
Data SourceEJB
EJB3
Source DataEJB2
DataSource
Active GridLinkのWebセッション制御
Web セッション・アフィニティ(WLS12.1.1~)
•
同一HttpSessionからの接続要求に対しは、できるだけ同一RACインスタ
ンスから確保した接続を返す(初回の接続はRCLBにより選択)
•
コストの高いキャッシュ・フュージョンの発生を抑制(キャッシュヒット率向上)
RAC Database
Instance1
Instance2
Instance3
WebLogic Server
Servlet
Data SourceJSP
Servlet
Data SourceJSP
JSP
HttpSession
XA、Webセッション・アフィニティの設定
1.
RAC側の設定(RCLBの有効化)
•
CLBの目標を”SHORT”に、RCLBの目標を”THROUGHPUT”または
”SERVICE_TIME”に設定したサービスを新規作成し、起動
2.
WebLogic側の設定
•
GridLinkデータソースを作成
•
手順1で作成したサービス名を宛先に設定
•
FANを有効化し、ONSの接続先を設定
3.
アプリケーション
•
アプリケーションコードの変更は不要
•
GridLinkデータソースから接続を取得するだけでよい
srvctl add service -d orcl -s demosvc -g srvpool1 -j SHORT -B THROUGHPUT
srvctl start service -s demosvc -d orcl
機能
GridLinkデータソース
マルチデータソース
データソースの構成
RAC側のサービスごとにGridLink
データソースを1つ設定
RAC側のサービス数×ノード数
ぶんの設定が必要
RAC構成変更時の
データソース設定変更
設定変更は不要
設定変更が必要
フェールオーバー
RAC側からの通知による高速接
続フェールオーバー(FCF)
WLS側からの定期的なポーリン
グによる障害検知のため遅延が
発生しやすい
ロードバランシング
DB側の負荷を考慮した実行時接
続ロードバランシング(RCLB)
DB側の負荷を考慮しない静的
ラウンドロビン
接続アフィニティ
複数GridLinkデータソースに跨る
XAアフィニティ、Webセッションア
フィニティ
同一マルチデータソース内での
XAアフィニティのみ
Data Guardサポート
プライマリ側、スタンバイ側に同等
構成のRACを配置できる
プライマリ側のRACは1インスタ
ンスしか利用できない
GridLinkデータソース vs マルチデータソース
<Insert Picture Here>
トランザクション・ログ(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 2TLOG
REDOログ
REDOログ
JDBC TLOGTLOGは障害
からのトランザ
クションの回
復のための重
要なログ
インダウト(不明区間)とは
•
RMがprepareに対するOKを送ってから、TMからのcommitメッセー
ジが届くまでの区間
•
この区間は、RMはTMからの確定要求が来るまでトランザクションを保持し続ける
。つまり確定要求が来ない限り、自分からは何もしない。
•
この区間でTM障害が発生すると・・・、データベースのリソースはブロックされ続け
てしまう。TMが長時間回復せず、各リソースマネージャが独断でヒューリスティック
な決定(推定によるコミットorアボート)を行えば、データの不整合が発生しうる。
1. prepareTM
RM 1
RM 2
4.成功 2.OK 1. prepare 2.OK 3.commit 3.commit 4.成功 5.OK インダウト (不明区間) インダウト (不明区間)各RMはTMか
らの確定要求
が来るまで、リ
ソースのロック
を保持し続ける
JDBC TLOGJDBC TLOG ストア
•
機能
•
従来ファイルストア(デフォルト・ストア)のみに格納していたトランザ
クション・ログ(TLOG)を、より信頼性かつ利便性の高いデータベ
ースへ格納できるようにした機能
•
メリット
•
整合性: 全てのステートデータ(アプリケーション・データ、JMSメッ
セージ、TLOG)を整合性を保った状態でデータベースへ格納
•
障害対策: TM障害時も別の正常なマシンでTMを再起動し、デー
タベース上のTLOGへアクセスすることにより、インダウトなトラン
ザクションを迅速に解決し、業務を継続(TLOGのコピーは不要)
•
災害対策: Data Guardの利用により、災害発生時にもスタンバイ
サイトで、インダウトなトランザクションを解決し、業務を継続
•
運用性: データベースのほうが共有ファイルシステムやレプリケー
ションソフトよりも管理が容易
JDBC TLOGMachine B
JDBC TLOGストアが有効なシナリオ
•
サーバ自動移行(WLSクラスタの機能)の簡素化
•
災害対策の簡素化(Data Guardとも連携して)
JDBC TLOGMachine 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
スタンバイサイト
プライマリサイト
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 JDBC TLOGOracle 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