Upload
oracle-fusion-middleware
View
1.265
Download
7
Embed Size (px)
Citation preview
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
WebLogic 12cR2ではじめる Java EE 7, Docker, DevOps
日本オラクル株式会社 クラウド・テクノロジー事業統括 Fusion Middleware事業統括本部 早川 博 2016年2月16日
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです。また、情報提供を唯一の目的とするものであり、いかなる契約にも組み込むことはできません。以下の事項は、マテリアルやコード、機能を提供することをコミットメント(確約)するものではないため、購買決定を行う際の判断材料になさらないで下さい。 オラクル製品に関して記載されている機能の開発、リリースおよび時期については、弊社の裁量により決定されます。
Oracleは、米国オラクル・コーポレーション及びその子会社、関連会社の米国及びその他の国における登録商標または商標です。他社名又は製品名は、それぞれ各社の商標である場合があります。
SAFE HARBOR STATEMENT
2
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
DevOps / Docker
3
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
DevOps?
4
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
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 6
DevOpsが目指すもの
ビジネスゴール
・イノベーションの成 果を迅速に市場に 届ける ・コストを削減する ・イノベーションに時 間を割く
ビジネスゴール
・イノベーションの成 果を迅速に市場に 届ける ・コストを削減する ・イノベーションに時 間を割く
最適化された デリバリー インフラ
・自動化 ・問題の可視化と フィードバック ・情報共有
Dev(開発)とOps(運用) の協調
Culture
・共有バージョン コントロール基盤 ・Infra as Code ・ビルド・デプロイ自動化
Tech
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
「継続的デリバリー」 David Farley (著), Jez Humble (著), 和智 右桂 (翻訳), 高木 正弘 (翻訳)/ KADOKAWA/アスキー・メディアワークス (2012)
7
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 8
DevOpsが目指すもの
ビジネスゴール
・イノベーションの成 果を迅速に市場に 届ける ・コストを削減する ・イノベーションに時 間を割く
ビジネスゴール
・イノベーションの成 果を迅速に市場に 届ける ・コストを削減する ・イノベーションに時 間を割く
Dev(開発)とOps(運用) の協調
Culture
・共有バージョン コントロール基盤 ・Infra as Code ・ビルド・デプロイ自動化
Tech
デプロイメント パイプライン
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 9
デプロイメント・パイプライン
DevOpsの具現化
ソース 環境設定
コミットステージ コンパイル コミットテスト アセンブル コード分析
UAT デプロイ
スモークテスト
キャパシティステージ デプロイ
スモークテスト
本番 デプロイ
スモークテスト
環境設定
成果物リポジトリ
受け入れステージ
デプロイ スモークテスト 受け入れテスト
テスター
運用
レポート バイナリ メタデータ
レポート メタデータ
レポート メタデータ
バイナリ
ソース 実装 ローカルビルド ローカルテスト
実装 ローカルビルド ローカルテスト
実装 ローカルビルド ローカルテスト
開発
開発
開発
ソース
ソース
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 10
デプロイメント・パイプラインのベストプラクティス
3 2 1
6 5 4
あらゆる環境に同じやり方でデプロイせよ
デプロイメントを スモークテストせよ
バイナリをビルドするのは1回限りとせよ
各変更は直ちに パイプライン全体を 通り抜けなければならない
パイプラインのどの 部分であっても、 失敗したらラインを止めよ
本番のコピーに デプロイせよ
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
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
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 13
デプロイメント・パイプラインの実装
環境設定
コミットステージ コンパイル コミットテスト アセンブル コード分析
UAT デプロイ
スモークテスト
キャパシティステージ デプロイ
スモークテスト
本番 デプロイ
スモークテスト
環境設定
成果物リポジトリ
受け入れステージ
デプロイ スモークテスト 受け入れテスト
テスター
運用
レポート バイナリ メタデータ
レポート メタデータ
レポート メタデータ
バイナリ
ソース 実装 ローカルビルド ローカルテスト
実装 ローカルビルド ローカルテスト
実装 ローカルビルド ローカルテスト
開発
開発
開発
ソース
ソース
ソース
Logo from blog.docker.com
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
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
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
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
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 +
+
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
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クラスター
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クラスター
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
GitHub
• https://github.com/oracle/docker/tree/master/OracleWebLogic
22
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Demo
23
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Java EE 7 × WebLogic Server 12cR2
24
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 25
Java EE 7 テーマ
開発生産性
HTML5対応 エンタープライズの 要求への対応
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)
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 の新仕様
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
jBatch
28
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 とは
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
jBatch のアーキテクチャ
• Job
– バッチジョブ
• JobOperator
– バッチジョブの管理インターフェース
– 開始/停止/再開
• JobRepository
– 実行中/実行済みのジョブの情報を保持するリポジトリ
• Runtime
– バッチジョブの実行環境
30
JobRepository
Runtime
Job
Java プログラム
Job Operator
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
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
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を利用する
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 34
バッチランタイム…?
?
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 35
バッチランタイム…!
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Concurrency Utilities !
36
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とは
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
コンテナ管理のスレッドプールで実現できること
• Java EEコンテキストの伝搬 – Servletのコンテキスト情報をスレッドに引き継いで、タスクを処理
–例) 新規スレッド内で、JNDI名でJDBCデータソースを取得しDB接続
• コンテナによるスレッドの管理、再利用
–スレッド数のコントロール
– HW資源の効率的な利用
38
→ 多機能、高信頼性の非同期処理
Servlet Client
スレッド
タスク + コンテキスト
request
response
スレッドプール
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 39
最もシンプルな実装例
インジェクションでManagedExecutorService(MES)を取得
ロジックを実装した Taskオブジェクトをサブミット
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
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Concurrency Utilities
41
jBatch ×
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()
開発者が実装するのはここだけ
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
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
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Demo
45
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 46
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Appendix. 1 Docker
48
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+
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Docker 利用時の注意事項
• コンテナを再起動するとIPアドレスが変更される –コンテナ間の通信が再起動後にできなくなる
→DNSサーバーをDocker上に構成し、WebLogic ServerドメインがDNS名を利用する
• マルチキャストはサポートされない –ユニキャストを使ったクラスタリングを推奨
50
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Appendix. 2 jBatch
51
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
ジョブ定義言語
• ジョブの構成の定義 –構造
–順序制御
–ロジックを実装したJavaクラス名
52
Step
実装クラス名
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
• Chunk方式 – 3つのインターフェースを実装
• ItemReader (読み込み)
• ItemProcessor (処理)
• ItemWriter (出力)
–読み込みと処理を一定数繰り返した後、まとめて出力する(後述)
–レコード単位の入力への繰り返し処理を想定 • CSVファイル、DBテーブルなど
– Reader、Writerの実装を共通化しやすい
• Batchlet方式 – 1つのインターフェースを実装
• Batchlet
–ステップごとに1回だけ処理を呼び出す
–ファイルフォーマット変換、メール通知などに適する
53
ステップの実装
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
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
• Listener
– Jobの各構成要素の実行前後にコールされるインターセプタ
– スキップ、リトライ時のListenerも定義可
• ジョブ・プロパティ
– ジョブ実行時に渡す任意の文字列パラメータ
– Javaクラス上で、インジェクトされたオブジェクトから情報を取得
55
• Chunkの並列実行
– ステップの各Chunkを分割して、並列実行
– Chunkの実行順序に処理が依存しないことが条件
• ジョブ/ステップ・コンテキスト
– 実行中のジョブ/ステップのコンテキスト情報を提供する
– ジョブID、ジョブ名、ステップ名など
– Java クラス上で、インジェクトされたオブジェクトから情報を取得
その他の機能
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
jBatch を利用するメリット
•設計の標準化
•高機能なバッチ処理を容易に実装 –チェックポイントによる分岐
–例外処理
–並列処理
• Java EE 連携 – REST(JAX_RS)入出力、JMS連携、etc
–非同期のジョブ実行
– APサーバーのリソースの利用(スレッドプール、DB接続プール)
56
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®
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
バッチアプリケーションの構成、監視用インターフェース
•以下のインターフェースを提供 – WebLogic Server 管理コンソール
– WebLogic Scripting Tool (WLST)
•バッチアプリケーションの構成 – JobRepositoryにアクセするためのデータソース定義の作成 ※デフォルトJobRepositoryの利用時は不要
•バッチアプリケーションの監視 –ジョブの実行状況
–ステップの実行状況
58
WLS管理コンソール
WebLogic Server
JobRepository
WLST
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
管理コンソールの画面イメージ
• アプリケーションの構成
59
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
管理コンソールの画面イメージ
• ジョブの監視
60
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
管理コンソールの画面イメージ
• ステップの監視
61
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Appendix. 3 Concurrency Utilities for Java EE
62
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
• ManagedExecuterService (MES) –指示したタイミングでタスクを開始
–スレッド割当てはコンテナ任せ
• ManagedScheduledExecuterService (MSES) – タスクの開始をスケジューリング
–スレッド割当てはコンテナ任せ
• ManagedThreadFactory (MTF) – コンテナ管理のスレッドプールを新たに構成する
• ContextService – Java EEコンテキストをタスクの実行スレッドに伝搬する
63
主要なインターフェース
スレッドの管理はコンテナに任せて、少ない工数で非同期処理を実装したい場合に利用
より詳細にスレッドを管理したい場合に利用
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)と総称
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 65
実装例 1/3 – ManagedExecuterService
インジェクション
JNDIルックアップ
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 66
実装例 2/3 – ManagedScheduledExecuterService
スケジュールを指定してタスクを実行
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 67
実装例 3/3 – ContextService/ManagedThreadFactory
インジェクション
カスタムスレッドプール
コンテキストを設定したタスク
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
• ロングランニング・タスク –長時間に渡るタスクには、 スレッドプール外のスレッドを生成する →ロングランニング・スレッド
–タスク起動時にロングランニングであることを示すヒント値を指定
–スレッドの上限数を指定可
•通常のタスク –ロングランニング・タスクでないタスク
–ワーク・マネージャーと関連付けられた、単一のセルフチューニング・スレッドプールに割り当てられる
–セルフチューニング・スレッドプールは、ワーク・マネージャーのルールにしたがってタスクの実行を制御
68
ロングランニング・タスクと通常のタスク
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
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
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
配備記述子上の記述
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オブジェクトは伝搬元とは別の インスタンスなので、伝搬元での変更は反映されない
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
• デフォルト Java EE CMOs –構成手順無しで利用可能
– Java EE仕様で規定されたJNDI名またはインジェクションで取得
• カスタムCMOs
–開発者が設定ファイルで定義するCMO
–アプリケーション、モジュールレベルで定義
• グローバルCMOテンプレート
–開発者が設定ファイルで定義するCMOのテンプレート
–ドメイン/サーバー/クラスターレベルで定義
73
CMOのカスタマイズ
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
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
• CMOの制約の設定 –対象の設定
• ロングランニング・タスクの上限
• ManagedThreadFactoryによる新規スレッドの上限
–ドメイン/サーバー/クラスターレベルで設定
• CMOの監視 – MBeanから、CMOの状態や設定情報を取得可能
– CMOの状態 • MES、MSES、MTFの各オブジェクトについて、統計情報を取得
–正常/以上終了したリクエスト数
–実行中のロングランニング・タスク数
–実行しているパーティション
– ・・・
– CMOの設定情報 • CMOの制約の設定情報を取得
75
CMOの管理・監視
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 76