目次
- はじめに
第1章 WebSphere Application Serverの基礎知識
1-1 WebSphere Application Serverとは
- クラウドの普及とWebシステム・アーキテクチャーの進化
- WebSphere Application Serverとは
- Java EEのコンポーネントとWAS
1-2 WASのエディション
- WASの2つのランタイム:WAS traditionalとWAS Liberty
- コラム WAS Libertyのオープンソース化
- WASのエディション
- コラム Baseエディションは正式名ではない
- エディション比較と同梱コンポーネント
1-3 WAS traditionalのシステム構成
- 【構成1】WAS Baseシングル・サーバー構成
- 【構成2】WAS Baseシンプル・フェールオーバー構成
- 【構成3】Network Deployment(WAS ND)構成
- 【構成4】WAS NDのWebサーバー・インテリジェント管理構成
- WAS NDを構成するコンポーネント
- コラム 管理コンソールについて
1-4 WAS Libertyのシステム構成
- コラム WAS Libertyのバージョン番号について
1-5 WAS のサポート
- WASのサポート・ポリシー
- WASにFixを適用する
第2章 WAS traditionalの導入
2-1 WAS Base導入の概要
- WASの導入概要
2-2 WASとJavaの導入
- Insatallation Managerの導入
- WAS BaseとJava SE 8の導入
2-3 WASの起動・停止方法とアプリケーションの起動確認
- WASの導入ディレクトリー
- WASの起動
- WAS管理コンソールへのログイン
- WASの停止
- サンプル・アプリケーションの稼働確認
2-4 IBM HTTP ServerとWebサーバー・プラグインの導入
- IBM HTTP Server(IHS)の構成方法
- IHSとWebサーバー・プラグインを導入する
2-5 IHSの起動・停止方法とアプリケーションの稼働確認
- コラム WASとWebサーバーの起動と停止
- IHSの起動
- IHSの停止
- IHSを経由したサンプル・アプリケーションの確認
2-6 WASにFix Packを適用する
2-7 バージョンの確認
- WASのバージョン確認
- IHSのバージョン確認
- プラグインのバージョン確認
2-8 プロファイル
- コラム プロファイルを使わずに複数の環境を構築する
- プロファイルの種類
- プロファイルの管理
2-9 ディレクトリー構成
- コラム デフォルト・プロファイルの注意点
2-10 WASのDocker対応
- Dockerとは
- Dockerが使える環境
- IBMのDocker対応
- WASのDocker対応
- WAS traditionalをDockerエンジンで動かす
第3章 WAS traditionalにアプリケーションをデプロイする
3-1 WASで使用可能な開発ツール
- Eclipse IDEとWAS Developer Tools(WDT)
- Rational Application Developer
3-2 アプリケーションのパッケージング
- Java EEアプリケーションのモジュール構成
- コラム ライブラリー・サポート
- パッケージングの階層構造
3-3 アプリケーションをパッケージングする
- 動的Webプロジェクトを作成する
- @WebServletアノテーションとは
- @Resourceアノテーションとは
- Webアプリケーション・デプロイメント記述子を確認する
- WebSphere拡張デプロイメント記述子を設定する
- WebSphereバインディングを設定する
- 分離レベルとは
- EARファイルにエクスポートする
3-4 アプリケーションをWASにデプロイする
- J2C認証データを作成する
- JDBCプロバイダーを作成する
- データ・ソースを作成する
- アプリケーションをデプロイする
- Webサーバー経由でアクセスする
3-5 アプリケーションの更新方法
- EARファイル全体を置き換える方法
- WAS NDでのアプリケーション管理
第4章 WAS traditionalの基本的な設定と操作
4-1 IHSの設定
- 最大同時接続数
- IHSとWebブラウザ間通信のSSL
- コラム SHA-2とIBM Java暗号プロバイダーのエイリアス名
- IHSのリモート管理
- プラグイン
- コラム なぜ,HTTP要求を直接WASに送らないのか?
4-2 プラグインの設定
- プラグインの動作
- プラグイン構成ファイルとルーティング
- プラグイン構成ファイルのパラメーター
- コラム WASは動いているのにIHSプラグイン経由での要求が突然受け付けられなくなる
4-3 アプリケーション・サーバーの基本的な設定
- WASの起動
- コラム 同じノードの複数のJVMでクラスを共有する
- クラス・ローダー
- コラム Db2 JDBCドライバーのFixが適用できない
- コラム WASだとLog4Jのログが出力できない
- JVMへの設定
- コラム 汎用JVM引数の指定を変えたらWASが起動しなくなった
- ログ・サイズとローテーション
- JDBCプロバイダー
- コラム 2フェーズ・コミット
- データ・ソースの設定
- コラム Java EE仕様のリソース認証との関係
- コラム Db2のエージェント・プールと自動チューニング
- コラム プリペアド・ステートメントは,SQLインジェクションに強いのか
- セッション管理
- デプロイメント・マネージャーとノード・エージェントの設定
4-4 インテリジェント・マネジメント機能
- Webサーバー・インテリジェント・マネジメントの動作
- Webサーバー・インテリジェント・マネジメントの設定
- 動的クラスター
- 保守モード
- アプリケーション・エディション管理
- ヘルス管理
- コラム 移行支援ツール
第5章 WASを安定稼働させる
5-1 JVMのヒープ状況は安定稼働の大きな要素
- JVMのJavaヒープ・サイズの注意点
- コラム Javaヒープ・サイズが健全であることのクライテリア
- コラム OutOfMemoryErrorの危険性
- JVMのJavaヒープ・モニター手段
- GCログの取得
- GCログ出力先の指定と世代管理
- コラム WAS traditional V9.0.0.3からデフォルトで世代管理付きのGCログが有効化
- GCログの可視化・分析ツール
- GCMVによる可視化
- 大きなオブジェクトによる巨大メモリー要求問題とその調査・対応方法
- メモリー・リークの判断と対応
5-2 JVMのNativeヒープにも注意する
- Nativeヒープに含まれるもの
- 32bit JVMと64bit JVM
- JVMメモリー使用量のモニター
- JVMのNativeヒープ使用量の可視化
- deleteOnExit対策
- DirectByteBufferの対策
- DirectByteBufferの使用サイズを調べる方法
- リフレクション対策
- 過剰な数のクラスとクラス・ローダー
- 過剰なスレッドの作成
- コラム スレッドはWebコンテナ・スレッドプール以外でも生成されることに注意
5-3 JVMのその他注意事項
- Attach APIの停止
- IPv4/IPv6固定とローカル・ホストのキャッシュ
- JVMのダンプ生成イベントをOS管理ログに記録させる
- OutOfMemoryError発生時にJVMを即座に終了させる
5-4 WASの安定稼働に関連する機能
- HAマネージャー
- ハング・スレッド検出機能
- CPU欠乏のサイン
- ヘルス管理による監視と自動対応
- パフォーマンスおよび診断アドバイザー
5-5 障害範囲の局所化
- WAS障害の局所化
- リソース障害(データベース無応答,処理遅延)の影響の局所化
- リソース障害(データベースの切り替わり)の影響の局所化
- クライアントの遅延リクエストの影響の局所化
5-6 トポロジーの考慮
- トポロジーに余裕を持たせる
- 再起動の間隔を考慮する
- 十分な障害テストを行う
- データベース接続プールを絞るリスクを知っておく
5-7 万が一に備えておく
- 有効期限があるセキュリティ証明書やIDの状況を確認しておく
- 脆弱性に対応する
- 安全な暗号通信を常に見直す
- WASの構成バックアップを取得しておく
- コラム ディスク障害ではバックアップが本当に重要
- コラム OSGiキャッシュに注意
第6章 問題判別
6-1 問題判別の基本
6-2 発生した問題を知る
- 問題のトリガーを考える
- 問題の種類を特定する
- 問題のコンポーネントを特定する
6-3 ネットワークレベルのデータで問題を把握する
- ソケットの状態
- ネットワーク・トレース
6-4 リソースの状態を確認する
6-5 ログを確認する
- IBM HTTP Server
- Webサーバー・プラグイン
- WAS traditional
6-6 ダンプを取得する
- JVMのダンプの種類
- ダンプを取得する方法
- ダンプを自動で取得する構成(-Xdumpの調整)
- コラム Dump Agentのデフォルト設定を見てみる
- ダンプを自動で取得する構成(-Xtraceの調整)
- JVMの各種ダンプを手動で取得する方法
- コレクター・ツールおよびIBM Support Assistant(ISA)
- ダンプの調査方法:JVMシステム・ダンプ
- ダンプの調査方法:ヒープ・ダンプ
- ダンプの調査方法:Javaダンプ
6-7 WASトレースを取得する
- 始動時からトレースを取得する方法
- 稼働中に有効にし,取得を開始する方法
6-8 症状別に問題を判別する
- 無応答問題(CPU100%・デッドロック)
- 異常終了
- エラー画面や予期せぬ結果
- JITの問題を判別する
第7章 パフォーマンス・チューニング
7-1 OSとネットワークのチューニング
- Windowsシステムの調整
- Linuxシステムの調整
- AIXシステムの調整
- コラム 大きなPOSTデータの処理に時間がかかる
- コラム AIX上のIHSにおいてWindowsマシンからの大きな
- POSTリクエストを処理する際,パフォーマンスが出ない
7-2IBM HTTP Serverのチューニング
- 最大同時接続数を決定する
- パフォーマンスを向上させるためのヒント
- パフォーマンスの観点からは避けたほうがよい設定
- LinuxおよびUnix上のWeb サーバー・プラグインで
- 気を付けること
- SSLのパフォーマンスで気を付けること
- コラム トラブル事例:起動が遅い。プロキシーやLDAPからの返信が遅い
- コラム トラブル事例:プラグイン構成ファイルを更新したら
- CPU使用率が高くなる
7-3 WAS traditionalのチューニング
- PMI(Performance Monitoring Infrastructure)
- PMIの設定
- Tivoli Performance Viewerの操作項目
- コラム PMIの注意
- コラム ちょっと小ワザ
- 要求メトリック
- コラム JDBC実行時間は,ボトルネック特定の重要指標
- データベース接続プール
- PMIで提供されるJDBC用のカウンター
- コラム 接続のShareableとUnshareable WAS traditionalサーバー全体の設定
- Webコンテナ
- スレッド・プール
- チャネルフレームワーク
- WebサービスOutOfBound
- PMIで提供されるWebサービス関連のカウンター
- HTTPセッション
- コラム セッション・オブジェクトの考慮点
- PMIで提供されるセッション・マネージャー用のカウンター
- コラム トラブル事例:HTTP セッションによるOutOfMemoryError
- コラム トラブル事例:セッション・クリーンアップによる応答遅延
- EJBコンテナ
- コラム EJBメソッドの起動キューイング
- PMIで提供されるEJB・コンテナ用のカウンター
7-4 JVMのチューニング
- コラム JVM,JRE,JDK
- GC(ガーベッジ・コレクション)とは
- J9 VMのGCポリシー
- GCをモニターする
- 冗長ガーベッジ・コレクション出力の読み方
- 適切なヒープのサイズを見積もる
- コラム セッションのサイズ
第8章 WAS traditionalセキュリティの基本を理解する
8-1 管理セキュリティとアプリケーション・セキュリティ
- WASセキュリティを理解する
8-2 管理セキュリティを利用する
- 管理セキュリティを設定する
- 認証に使用できるレジストリー
- コラム wsadminコマンドでパスワードの入力省略する方法
- 管理の役割を指定する
8-3 暗号化の仕掛けSSLを理解する
- 証明書の管理
8-4 アプリケーション・セキュリティを利用する
- ベーシック認証(Basic Authentication,基本認証)
- フォーム認証(FORM Authentication,FORM認証)
- クライアント認証
- コラム セキュリティ設定前にはバックアップを取ろう
8-5 LTPAトークンを利用したシングル・サインオンを設定する
- コラム SAML
- コラム OpenID Connect
第9章 WAS Libertyの導入と構成
9-1 WAS Libertyの導入の概要
- Installation Managerを使用する導入方法
- アーカイブを展開する導入方法
- EclipseのWDTを利用する導入方法
9-2 アーカイブファイルの展開による導入
9-3 serverコマンドによるサーバー構成の作成と起動・停止
- サーバー構成の作成
- サーバーの起動と停止
9-4 フィーチャーの管理
9-5 WDTを使用したLibertyの導入と構成
9-6 WAS Libertyのディレクトリー構成
- WAS Libertyの構成ファイル
9-7 WAS LibertyをDockerで使う
第10章 WAS Libertyにアプリケーションをデプロイする
10-1 アプリケーション・デプロイの準備
- サンプル・アプリケーションの作成
- Libertyサーバーの準備
10-2 アプリケーションのデプロイ
- dropinsディレクトリーへの配置によるデプロイ
- server.xmlでEAR/WARのパスを指定するデプロイ
10-3 データベース接続の構成
- データベースに接続するサンプル・アプリケーション
- データベース接続構成:JDBCドライバーの登録
- データベース接続構成:データソースの設定
10-4 実働環境での稼動に向けて
- localhost以外からのアクセス
- 動的な構成変更の無効化
第11章 WAS Libertyの設定と操作
11-1 サーバー構成やランタイムのパッケージングによるデプロイ
- パッケージ・コマンド
- WAS Libertyランタイムを含むサーバーのパッケージング
- アプリケーションとサーバー構成のパッケージング
11-2通信の保護
- WAS LibertyのSSL構成
- 鍵の作成と管理
- 通信とSSL構成のマッピング
11-3 ユーザー認証の構成
- ユーザー・レジストリーの設定
- コラム パスワードのエンコード
- コラム 管理ユーザーをお手軽に構成するquickStartSecurity
- 認証構成
11-4 Admin CenterによるWAS Libertyの管理
- Admin Centerでできること
- Admin Centerの有効化
- Admin Centerの使用
11-5 Webサーバーとの連携
- プラグイン構成ファイルの生成
- プラグイン構成ファイルの伝搬
- プラグイン構成ファイルの編集とWebサーバー構成ファイル(httpd.conf)への設定
- コラム IHS-WAS間のSSLの使用有無の設定
11-6 シンプル・クラスターの構成
- セッション・パーシスタンスの設定
- Webサーバー・プラグインのマージ
第12章 WAS Libertyの問題判別とパフォーマンス・チューニング
12-1 WAS Libertyの問題判別の概要
12-2 WAS Libertyのログを確認する
- ログの種類
- ログの構成
- コラム バイナリー・ロギング
- HTTPアクセスログの構成
- Logstashコレクターの使用
12-3 問題判別情報の取得
- バージョン情報の表示
- 問題判別情報をまとめて収集する
- 遅い要求およびハングした要求の検出
- タイムド・オペレーションとJDBC呼び出しの遅延の検出
12-4 パフォーマンス情報の取得
12-5 WAS Libertyのチューニング
- Java仮想マシン(JVM)のチューニング
- WAS Liberty本体のチューニング
- データベースコネクションのチューニング
第13章 クラウドとWAS Liberty
13-1 WAS Libertyをクラウドで使う
- クラウド利用において解決したい課題
- クラウド利用において役立つWAS Libertyの特長
- Liberty for Javaランタイムとは
13-2 Watson APIを使用するサンプルアプリを用意する
- アプリケーションの事前準備
- アプリケーションの概要
- Visual Recognitionサービスと画像群を準備する
- 識別器生成に使用する学習用画像を準備する
- コラム Visual Recognitionサービスとは
- アプリケーションを新規開発する
13-3 アプリケーションの動作を確認する
- アプリケーションをローカル環境にデプロイする
- アプリケーションをブラウザで確認する
13-4 IBM Cloud上のLiberty for Javaにデプロイする
- WAS Libertyの構成情報をデプロイする
- 索引