20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops...

77
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | WebLogic 12cR2ではじめる Java EE 7, Docker, DevOps 日本オラクル株式会社 クラウド・テクノロジー事業統括 Fusion Middleware事業統括本部 早川 2016216

Transcript of 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops...

Page 1: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

WebLogic 12cR2ではじめる Java EE 7, Docker, DevOps

日本オラクル株式会社 クラウド・テクノロジー事業統括 Fusion Middleware事業統括本部 早川 博 2016年2月16日

Page 2: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

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

Oracleは、米国オラクル・コーポレーション及びその子会社、関連会社の米国及びその他の国における登録商標または商標です。他社名又は製品名は、それぞれ各社の商標である場合があります。

SAFE HARBOR STATEMENT

2

Page 3: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

DevOps / Docker

3

Page 4: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

DevOps?

4

Page 5: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

“DevOps is a culture, movement or practice that emphasizes the collaboration and communication of both software developers and other information-technology (IT) professionals while automating the process of software delivery and infrastructure changes.”

– DevOps - Wikipedia, the free encyclopedia (https://en.wikipedia.org/wiki/DevOps)

5

Page 6: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 6

DevOpsが目指すもの

ビジネスゴール

・イノベーションの成 果を迅速に市場に 届ける ・コストを削減する ・イノベーションに時 間を割く

ビジネスゴール

・イノベーションの成 果を迅速に市場に 届ける ・コストを削減する ・イノベーションに時 間を割く

最適化された デリバリー インフラ

・自動化 ・問題の可視化と フィードバック ・情報共有

Dev(開発)とOps(運用) の協調

Culture

・共有バージョン コントロール基盤 ・Infra as Code ・ビルド・デプロイ自動化

Tech

Page 7: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

「継続的デリバリー」 David Farley (著), Jez Humble (著), 和智 右桂 (翻訳), 高木 正弘 (翻訳)/ KADOKAWA/アスキー・メディアワークス (2012)

7

Page 8: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 8

DevOpsが目指すもの

ビジネスゴール

・イノベーションの成 果を迅速に市場に 届ける ・コストを削減する ・イノベーションに時 間を割く

ビジネスゴール

・イノベーションの成 果を迅速に市場に 届ける ・コストを削減する ・イノベーションに時 間を割く

Dev(開発)とOps(運用) の協調

Culture

・共有バージョン コントロール基盤 ・Infra as Code ・ビルド・デプロイ自動化

Tech

デプロイメント パイプライン

Page 9: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 9

デプロイメント・パイプライン

DevOpsの具現化

ソース 環境設定

コミットステージ コンパイル コミットテスト アセンブル コード分析

UAT デプロイ

スモークテスト

キャパシティステージ デプロイ

スモークテスト

本番 デプロイ

スモークテスト

環境設定

成果物リポジトリ

受け入れステージ

デプロイ スモークテスト 受け入れテスト

テスター

運用

レポート バイナリ メタデータ

レポート メタデータ

レポート メタデータ

バイナリ

ソース 実装 ローカルビルド ローカルテスト

実装 ローカルビルド ローカルテスト

実装 ローカルビルド ローカルテスト

開発

開発

開発

ソース

ソース

Page 10: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 10

デプロイメント・パイプラインのベストプラクティス

3 2 1

6 5 4

あらゆる環境に同じやり方でデプロイせよ

デプロイメントを スモークテストせよ

バイナリをビルドするのは1回限りとせよ

各変更は直ちに パイプライン全体を 通り抜けなければならない

パイプラインのどの 部分であっても、 失敗したらラインを止めよ

本番のコピーに デプロイせよ

Page 11: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

デプロイメント・パイプラインのベストプラクティス

•原則 –設定情報(環境依存)はバイナリと分離

–テストから本番まで同じバイナリ(war, ear)をデプロイする

• WebLogic MTなら・・・ –ドメインパーティションにより、APサーバーのリソース定義の環境依存性を排除 → バイナリ(=パーティション)に格納

–テストから本番まで同じパーティションをデプロイする

11

バイナリをビルドするのは1回限りとせよ

クラスター

OS

仮想ターゲット(リソースの抽象化)

war、ear、 JMS、データソース…

OS OS

HW HW HW

WLS 12cR2 WLS 12cR2 WLS 12cR2

Page 12: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

デプロイメント・パイプラインのベストプラクティス

•原則 –ネットワークトポロジの統一

– OS設定の統一

–アプリケーションスタックの統一

• WebLogic MT + Dockerなら・・・ –開発/テスト環境を含め、OS以上のレイヤーを統一

–環境設定はコード(Dockerfile)として管理し、バージョン管理に包含。同じ環境が容易に再現できる

12

本番のコピーにデプロイせよ

HW

OS

Dockerエンジン

クラスター

OS(コンテナ プロセス)

仮想ターゲット

OS(コンテナ プロセス)

OS(コンテナ プロセス)

WLS 12cR2 WLS 12cR2 WLS 12cR2

Logo from blog.docker.com

Page 13: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 13

デプロイメント・パイプラインの実装

環境設定

コミットステージ コンパイル コミットテスト アセンブル コード分析

UAT デプロイ

スモークテスト

キャパシティステージ デプロイ

スモークテスト

本番 デプロイ

スモークテスト

環境設定

成果物リポジトリ

受け入れステージ

デプロイ スモークテスト 受け入れテスト

テスター

運用

レポート バイナリ メタデータ

レポート メタデータ

レポート メタデータ

バイナリ

ソース 実装 ローカルビルド ローカルテスト

実装 ローカルビルド ローカルテスト

実装 ローカルビルド ローカルテスト

開発

開発

開発

ソース

ソース

ソース

Logo from blog.docker.com

Page 14: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

What is Docker?

• Linuxのコンテナ型仮想化技術

• Dockerfileに基づくコンテナ構築 – Human Readableなテキストファイルによる仮想マシン定義

• コンテナ=プロセス –プロセス毎にホストのHWリソース(ネットワーク、メモリ、

CPU)を区切って利用

–高速でコンテナインスタンスを作成、起動

• コンテナイメージの作成、共有、拡張が容易 –階層化されたファイルシステム

–コンテナイメージは拡張元からの差分レイヤーを保持

14

Logo from blog.docker.com

Page 15: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Dockerfile / Dockerイメージ / Dockerコンテナ(1/3)

15

Image B

Image A

> docker build_ Dockerfile

Image B

Dockerfileに記述された 変更を適用

Docker Hub

Logo from blog.docker.com

Page 16: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Dockerfile / Dockerイメージ / Dockerコンテナ(2/3)

16

Image B

Image A

> docker build_ Dockerfile

Image B

Dockerfileに記述された 変更を適用

Image B > docker run bash_

Container B bash プロセス を立ち上げて起動

Docker Hub

Logo from blog.docker.com

Page 17: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Dockerfile / Dockerイメージ / Dockerコンテナ(3/3)

17

Image B

Image A

> docker build_ Dockerfile

Image B Image C

Dockerfileに記述された 変更を適用

Image B > docker build _ Dockerfile

Dockerfileに記述された 変更を適用

Image B > docker run bash_

Container B Container C

Image B > docker run hoge.sh_

bash プロセス を立ち上げて起動

hoge.shプロセス を立ち上げて起動

Docker Hub

Logo from blog.docker.com

Page 18: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

WebLogic Docker Images • Base Image

– Oracle Linux or Red Hat(Docker Hubにあるもの)

• Install Image

– WebLogic、JDKのインストーラを使ってBase Imageを拡張するDockerfile

– GitHubで提供

– インストーラは別途ダウンロード

• Domain Image

– Install Imageを拡張してドメインの構成を行うDockerfile

– GitHubで提供

18

Base Image

Install Image

Domain Image

Image B > docker build_

Image B > docker build_

domain +

+

Page 19: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

クラスタリング構成の例 1/3 1. startWebLogic.shを指定して

docker run

– Domain Imageから、管理サーバーのコンテナを起動

19

Base Image Install Image

1221-domain

AdminServer

Image B > docker run startWebLogic.sh

startWebLogic.sh

Page 20: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

クラスタリング構成の例 2/3 2. createServer.shを指定してdocker run

– createServer.sh内で、 • 管理サーバーの起動

• ノードマネージャの起動

• クラスターの構成を行うWLSTスクリプト

が実行される

20

Base Image Install Image

1221-domain

AdminServer Managed Server 0

Image B > docker run startWebLogic.sh

Image B > docker run createServer.sh

startWebLogic.sh createServer.sh

クラスターを構成するスクリプトを実行(WLST)

WLSクラスター

Page 21: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

クラスタリング構成の例 3/3

3. 任意数のノードを追加可能

21

Base Image Install Image

1221-domain

AdminServer Managed Server 0

Managed Server 1

Image B > docker run startWebLogic.sh

Image B > docker run createServer.sh

startWebLogic.sh createServer.sh createServer.sh

クラスターを構成するスクリプトを実行(WLST)

Image B > docker run createServer.sh

WLSクラスター

Page 22: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

GitHub

• https://github.com/oracle/docker/tree/master/OracleWebLogic

22

Page 23: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Demo

23

Page 24: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Java EE 7 × WebLogic Server 12cR2

24

Page 25: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 25

Java EE 7 テーマ

開発生産性

HTML5対応 エンタープライズの 要求への対応

Page 26: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 26

Java EE 7

Connector 1.7

Managed Beans 1.0 EJB 3.2

Servlet 3.1

Portable

Extension

Ecosystem

JSF 2.2 JAX-RS 2.0

Be

an

Va

lida

tio

n 1

.1

JMS 2.0 JPA 2.1

EL 3.0

JTA 1.2

JSP 2.2

Interceptors 1.1 CDI 1.1 Common Annotations

1.1

Updated Major

Release

New

Concurrency Utilities

(JSR 236)

Batch Applications

(JSR 352)

Java API for JSON

(JSR 353)

Java API for WebSocket

(JSR 356)

Page 27: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

• Concurrency Utilities (JSR-236)

– Java EE サーブレットからの並列処理呼出し

– シンプル

– 安全

• Batch Application (JSR-352)

– バッチジョブを実装するためのフレームワーク

– 開発効率化

– 耐エラー性

27

• Java API for JSON (JST-353)

– JSONデータを操作するための低レベルのAPI

– JAXBライク

• Java API for WebSocket (JSR-356)

– WebSocketアプリケーションを実装するための高レベルのAPI

– サーバーサイド/クライアントサイド(Java SE)

– アノテーションを用いた宣言的な実装

Java EE 7 の新仕様

Page 28: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

jBatch

28

Page 29: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

• Batch Applications for the Java Platform (JSR-352) https://jcp.org/aboutJava/communityprocess/final/jsr352/index.html

• Java EE プリケーションでバッチジョブを実装するためのフレームワークを規定した仕様

• Spring Batch をベースに仕様化

29

jBatch とは

Page 30: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

jBatch のアーキテクチャ

• Job

– バッチジョブ

• JobOperator

– バッチジョブの管理インターフェース

– 開始/停止/再開

• JobRepository

– 実行中/実行済みのジョブの情報を保持するリポジトリ

• Runtime

– バッチジョブの実行環境

30

JobRepository

Runtime

Job

Java プログラム

Job Operator

Page 31: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Flow

Split

Jobの構成要素

• ステップ(Step)

– バッチジョブにおける独立した1フェーズ

• フロー(Flow)

– 一単位として実行されるステップと条件分岐のシーケンス

• スプリット(Split)

– 並列に実行するフローの組み合わせ

• 条件分岐(Decider)

– ステップの完了ステータスを使用して、次のステップに進むかバッチジョブを終了するかを決定するフェーズ

31

Job

Step Step Step

Flow

Flow

Decider

Step Step

Step Step

Page 32: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

プログラミングモデル

• ステップ、条件分岐のロジック → Java

• ジョブの構造、順序制御 (=ジョブ定義言語) → XML

32

Flow

Split

Job

Step Step Step

Flow

Flow

Decider

Step Step

Step Step

Page 33: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

• JobRepositoryの作成

– 任意のDBに、JobRepository用のスキーマを作成する

– SQLのスクリプトか、RCU (Repository Creation Utility)を利用

• JobRepositoryに接続するデータソースの構成

– 1で作成したスキーマに接続するデータソースを構成する

33

• バッチランタイムの設定

– バッチランタイムの設定として、2のデータソースと、JobRepositoryのスキーマ情報を指定する

– オプションで、Concurrency Utilitiesの設定を行う (後述)

バッチアプリケーションを動かすための準備作業

1 2 3

注)WebLogic Serverでは、開発環境ではこれらの作業は不要 デフォルトでDerbyデータベースを利用したJobRepositoryを利用する

Page 34: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 34

バッチランタイム…?

?

Page 35: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 35

バッチランタイム…!

Page 36: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Concurrency Utilities !

36

Page 37: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

• Concurrency Utilities for Java EE (JSR-236) https://jcp.org/aboutJava/communityprocess/final/jsr236/index.html

• アプリケーションが非同期処理を実装するためのAPIを規定した仕様

• Java SE Concurrency Utilities APIs の拡張

37

Concurrency Utilities for Java EEとは

Page 38: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

コンテナ管理のスレッドプールで実現できること

• Java EEコンテキストの伝搬 – Servletのコンテキスト情報をスレッドに引き継いで、タスクを処理

–例) 新規スレッド内で、JNDI名でJDBCデータソースを取得しDB接続

• コンテナによるスレッドの管理、再利用

–スレッド数のコントロール

– HW資源の効率的な利用

38

→ 多機能、高信頼性の非同期処理

Servlet Client

スレッド

タスク + コンテキスト

request

response

スレッドプール

Page 39: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 39

最もシンプルな実装例

インジェクションでManagedExecutorService(MES)を取得

ロジックを実装した Taskオブジェクトをサブミット

Page 40: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

スレッド割当ての仕組み

• 非同期スレッドにアプリケーション毎のコンテキストが引き継がれる

• スレッドはWebLogic Serverのセルフチューニング・スレッドプールから利用する

40

セルフチューニング スレッドプール

Managed ExecuterService

(MES) WorkManager App B context

task task

context

task

Managed ExecuterService

(MES) WorkManager App A context

task task

context

task

Page 41: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Concurrency Utilities

41

jBatch ×

Page 42: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

jBatchとConcurrency Utilitiesの関係

• WebLogic ServerのjBatch実装では暗黙的にConcurrency Utilitiesを使用

• デフォルトでは、DefaultManagedExecutorService にタスク(ジョブ)がSubmitされる

42

セルフチューニング スレッドプール

Managed ExecuterService

(MES) WorkManager JobOperator context

task task

context

task

Batch Application

start()

開発者が実装するのはここだけ

Page 43: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

バッチジョブの並列化

•バッチジョブを並列処理を行うように実装しておく – (下図は内部処理を推測したイメージです)

43

セルフチューニング スレッドプール

Managed ExecuterService

(MES) WorkManager JobOperator

Batch Application

start()

並列化実装

task task task

context

task

context

task

context

task

context

task

context

task

context

task

Page 44: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

バッチジョブのスレッド制御

• MESとWorkManagerをカスタマイズ可能 –リソース消費をコントロールしつつ並列処理

• スレッド割当の優先度

• 最大スレッド数

44

config.xml CMOテンプレート 定義

・利用するワーク マネージャ etc…

MBean

ワークマネージャ構成

・最大スレッド数 ・最小スレッド数 ・優先度 etc…

セルフチューニング スレッドプール

Managed ExecuterService

(MES) WorkManager JobOperator

Batch Application

start()

task task task

context

task

context

task

context

task

context

task

context

task

context

task

Page 45: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Demo

45

Page 46: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 46

Page 47: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print
Page 48: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Appendix. 1 Docker

48

Page 49: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 49

動作保証された構成

WLS Version JDK Version Host OS Kernel Docker Version

12.2.1 8 Oracle Linux 6 UL 6 UEK Release 3 (3.8.13) 1.7+

12.2.1 8 Oracle Linux 7 UEK Release 3 (3.8.13)

or RHCK 3 (3.10) 1.7+

12.2.1 8 Red Hat Linux 7 RHCK 3 (3.10) 1.7+

12.1.3 7/8 Oracle Linux 6 UL 5 UEK Release 3 (3.8.13) 1.3.3+

12.1.3 7/8 Oracle Linux 7 UEK Release 3 (3.8.13)

or RHCK 3 (3.10) 1.3.3+

12.1.3 7/8 Red Hat Linux 7 RHCK 3 (3.10) 1.3.3+

Page 50: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Docker 利用時の注意事項

• コンテナを再起動するとIPアドレスが変更される –コンテナ間の通信が再起動後にできなくなる

→DNSサーバーをDocker上に構成し、WebLogic ServerドメインがDNS名を利用する

• マルチキャストはサポートされない –ユニキャストを使ったクラスタリングを推奨

50

Page 51: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Appendix. 2 jBatch

51

Page 52: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

ジョブ定義言語

• ジョブの構成の定義 –構造

–順序制御

–ロジックを実装したJavaクラス名

52

Step

実装クラス名

Page 53: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

• Chunk方式 – 3つのインターフェースを実装

• ItemReader (読み込み)

• ItemProcessor (処理)

• ItemWriter (出力)

–読み込みと処理を一定数繰り返した後、まとめて出力する(後述)

–レコード単位の入力への繰り返し処理を想定 • CSVファイル、DBテーブルなど

– Reader、Writerの実装を共通化しやすい

• Batchlet方式 – 1つのインターフェースを実装

• Batchlet

–ステップごとに1回だけ処理を呼び出す

–ファイルフォーマット変換、メール通知などに適する

53

ステップの実装

Page 54: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Step

Chunk方式

• Chunk

• 読み込みと処理を一定数繰り返した後、まとめて出力 → 1 Chunk

• StepはChunkの繰り返し

–耐エラー性

• 例外の型に応じて、挙動を設定

–スキップ、リトライ、ロールバック

• 1 Chunkを完了する毎に、JobRepositoryにcheckpointを 保存 → ジョブの再開が可能

54

Item Reader

Item Processor

Item Writer

Runtime

read

write commit

Job Repository

process

Loop

save checkpoint

Page 55: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

• Listener

– Jobの各構成要素の実行前後にコールされるインターセプタ

– スキップ、リトライ時のListenerも定義可

• ジョブ・プロパティ

– ジョブ実行時に渡す任意の文字列パラメータ

– Javaクラス上で、インジェクトされたオブジェクトから情報を取得

55

• Chunkの並列実行

– ステップの各Chunkを分割して、並列実行

– Chunkの実行順序に処理が依存しないことが条件

• ジョブ/ステップ・コンテキスト

– 実行中のジョブ/ステップのコンテキスト情報を提供する

– ジョブID、ジョブ名、ステップ名など

– Java クラス上で、インジェクトされたオブジェクトから情報を取得

その他の機能

Page 56: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

jBatch を利用するメリット

•設計の標準化

•高機能なバッチ処理を容易に実装 –チェックポイントによる分岐

–例外処理

–並列処理

• Java EE 連携 – REST(JAX_RS)入出力、JMS連携、etc

–非同期のジョブ実行

– APサーバーのリソースの利用(スレッドプール、DB接続プール)

56

Page 57: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

• デフォルト JobRepository –開発環境向け

–構成手順不要で利用可

– Derby Database

• カスタムJobRepository –プロダクション環境向け

–構成ユーティリティを提供 • SQLのスクリプト

• RCU (Repository Creation Utility)

–任意のDBを利用可

57

WebLogic Server における JobRepository

http://www-01.ibm.com/software/jp/info/db2/

https://db.apache.org/derby/

Microsoft® SQL Server®

Page 58: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

バッチアプリケーションの構成、監視用インターフェース

•以下のインターフェースを提供 – WebLogic Server 管理コンソール

– WebLogic Scripting Tool (WLST)

•バッチアプリケーションの構成 – JobRepositoryにアクセするためのデータソース定義の作成 ※デフォルトJobRepositoryの利用時は不要

•バッチアプリケーションの監視 –ジョブの実行状況

–ステップの実行状況

58

WLS管理コンソール

WebLogic Server

JobRepository

WLST

Page 59: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

管理コンソールの画面イメージ

• アプリケーションの構成

59

Page 60: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

管理コンソールの画面イメージ

• ジョブの監視

60

Page 61: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

管理コンソールの画面イメージ

• ステップの監視

61

Page 62: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Appendix. 3 Concurrency Utilities for Java EE

62

Page 63: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

• ManagedExecuterService (MES) –指示したタイミングでタスクを開始

–スレッド割当てはコンテナ任せ

• ManagedScheduledExecuterService (MSES) – タスクの開始をスケジューリング

–スレッド割当てはコンテナ任せ

• ManagedThreadFactory (MTF) – コンテナ管理のスレッドプールを新たに構成する

• ContextService – Java EEコンテキストをタスクの実行スレッドに伝搬する

63

主要なインターフェース

スレッドの管理はコンテナに任せて、少ない工数で非同期処理を実装したい場合に利用

より詳細にスレッドを管理したい場合に利用

Page 64: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

• ManagedExecuterService (MES) –指示したタイミングでタスクを開始

–スレッド割当てはコンテナ任せ

• ManagedScheduledExecuterService (MSES) – タスクの開始をスケジューリング

–スレッド割当てはコンテナ任せ

• ManagedThreadFactory (MTF) – コンテナ管理のスレッドプールを新たに構成する

• ContextService – Java EEコンテキストをタスクの実行スレッドに伝搬する

64

WebLogic Serverでは、これらのオブジェクトを Concurrent Managed Object (CMO)と総称

Page 65: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 65

実装例 1/3 – ManagedExecuterService

インジェクション

JNDIルックアップ

Page 66: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 66

実装例 2/3 – ManagedScheduledExecuterService

スケジュールを指定してタスクを実行

Page 67: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 67

実装例 3/3 – ContextService/ManagedThreadFactory

インジェクション

カスタムスレッドプール

コンテキストを設定したタスク

Page 68: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

• ロングランニング・タスク –長時間に渡るタスクには、 スレッドプール外のスレッドを生成する →ロングランニング・スレッド

–タスク起動時にロングランニングであることを示すヒント値を指定

–スレッドの上限数を指定可

•通常のタスク –ロングランニング・タスクでないタスク

–ワーク・マネージャーと関連付けられた、単一のセルフチューニング・スレッドプールに割り当てられる

–セルフチューニング・スレッドプールは、ワーク・マネージャーのルールにしたがってタスクの実行を制御

68

ロングランニング・タスクと通常のタスク

Page 69: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 69

スレッド割当ての仕組み(ロングランニング・タスク)

MES/MSES

Long- Running?

WorkManager App A

context

task

context

task task

context

task

MES/MSES

Long- Running?

WorkManager App B

context

task

ロングランニング スレッド

context

task task

context

task

ロングランニング スレッド

セルフチューニング スレッドプール

• ロングランニング・タスクには新規スレッドを割当て

Y

N

Y

N

Page 70: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 70

スレッド割当ての仕組み (MTF)

MES/MSES

Long- Running?

WorkManager

context

task

context

task task

context

task

ロングランニング スレッド

セルフチューニング スレッドプール

• MTFでカスタムスレッドプールを作成

MTF

カスタム・スレッドプール

context

task

App A

Y

N

Page 71: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

スレッド数の上限設定 • 以下のスレッドについて、上限値を設定可能

– ロングランニング・スレッドのスレッド数 – MTFで生成するカスタム・スレッドプールのスレッド数

• 上限を超えるタスクを実行しようとした場合、RejectedExecutionException例外が発生

71

スコープ 配備記述子 説明

Server ・ config.xml →<domain><server> または <domain><server-template>要素に記述

サーバーに設定するロングランニング・タスクの上限値 デフォルトは100

Managed Object

・weblogic-application.xml, weblogic-ejb-jar.xml, weblogic.xml →<managed-executor-service> または <managed-scheduled-executor-service>要素に記述 ・config.xml →<managed-executor-service-template> または <managed-scheduled-executor-service-template>要素に記述

MES、MSESに対して個別に設定す

る、ロングランニング・タスクの上限値 デフォルトは10

配備記述子上の記述

Page 72: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 72

伝搬可能なコンテキスト情報

コンテキストタイプ 説明 伝搬される情報

JNDI JNDIネームスペース タスク実行元のスレッドの、アプリケーションスコープのJNDIツリー MTFの場合、MTFを作成したコンポーネントのJNDIツリー

ClassLoader コンテキストクラスローダー タスク実行元のスレッドの、アプリケーションスコープのコンテキストクラスローダー MTFの場合、MTFを作成したコンポーネントのクラスローダー

Security サブジェクトアイデンティティ タスクの実行元スレッドの、サブジェクトアイデンティティ MTFの場合、匿名サブジェクト

WorkArea PropagationModeを”WORK”に設定した時のWorkAreaコンテキスト

タスク実行元のスレッドの、WorkContextMapオブジェクト MTFの場合、空のWorkContextMapオブジェクト ※伝搬後のWorkContextMapオブジェクトは伝搬元とは別の インスタンスなので、伝搬元での変更は反映されない

Page 73: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

• デフォルト Java EE CMOs –構成手順無しで利用可能

– Java EE仕様で規定されたJNDI名またはインジェクションで取得

• カスタムCMOs

–開発者が設定ファイルで定義するCMO

–アプリケーション、モジュールレベルで定義

• グローバルCMOテンプレート

–開発者が設定ファイルで定義するCMOのテンプレート

–ドメイン/サーバー/クラスターレベルで定義

73

CMOのカスタマイズ

Page 74: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

グローバルCMOテンプレート

• ドメイン/サーバー/クラスターレベルで定義するCMOのテンプレート

• WebLogic Server管理コンソールまたはMBeanから設定

• アプリケーション毎に個別のCMOインスタンスが生成される

• MES、MSES、MTFのCMOテンプレートを定義可

74

WebLogic Server ドメイン

config.xml

<CMOテンプレート定義/>

MES

App1

MES

App2

MES

App3

MSES

MTF

MSES

MTF

MSES

MTF

Page 75: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

• CMOの制約の設定 –対象の設定

• ロングランニング・タスクの上限

• ManagedThreadFactoryによる新規スレッドの上限

–ドメイン/サーバー/クラスターレベルで設定

• CMOの監視 – MBeanから、CMOの状態や設定情報を取得可能

– CMOの状態 • MES、MSES、MTFの各オブジェクトについて、統計情報を取得

–正常/以上終了したリクエスト数

–実行中のロングランニング・タスク数

–実行しているパーティション

– ・・・

– CMOの設定情報 • CMOの制約の設定情報を取得

75

CMOの管理・監視

Page 76: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 76

Page 77: 20160216 wls12WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOps r2 javaee7 docker devops print