[改訂新版]WebSphere Application Server構築・運用バイブル
【WAS9.08.5Liberty対応】

[表紙][改訂新版]WebSphere Application Server構築・運用バイブル【WAS9.0/8.5/Liberty対応】

A5判/664ページ

定価(本体4,800円+税)

ISBN 978-4-7741-9619-0

電子版

→学校・法人一括購入ご検討の皆様へ

書籍の概要

この本の概要

商用Java EE(Jakarta EE)アプリケーション・サーバーとしてトップクラスのシェアを誇るWebSphere Application Serverのノウハウを集大成,2012年発売から現場で愛されてきた「バイブル」をリニューアルしました。設定・構築・運用の基本知識はもちろん,パフォーマンス・チューニングやセキュリティ対策までしっかり網羅。現行のバージョン8.5と最新の9.0に対応。さらに,クラウドやDevOpsに対応したモダンスタイルの「WAS Liberty」について,大幅に書き下ろし。豊富な経験を持つIBM技術者たちによる,現場に欠かせない1冊です。

こんな方におすすめ

  • Java EE(Jakarta EE)開発者
  • WebSphereの開発・運用に携わっている方

著者の一言

「Tomcatで動いていたアプリケーションが,WebSphere Application Server(WAS)で動かないんだ。」
「WASの基本的な設定値について教えてもらえないですか?」
「OutOfMemoryError のメッセージが出たのだけど,どこが悪いか分からない。IBMのJavaは,Oracleと違うんだよね。」
「パフォーマンスが出ないのだけど。」

Tomcat,JBossや他社Java EEサーバーの経験はあるのに,WASをよく知らないという技術者に会うことがあります。「Tomcatで動いていたアプリケーションが,WASで動かないんだ。」これは難しい問題なのでしょうか? WASの仕組みの基本と管理コンソールの操作が理解できていれば,決して難しい問題ではありません。Java EEの標準は,アプリケーションの可搬性を高めるために作られているのですから。
WASは,Apache HTTP Serverにセキュリティ機能などを加えたIBM HTTP Server(IHS),高速で安定したJVM,生産性を高めるためのデプロイ・ツールと問題判別用ツールなどが1つのパッケージとして提供されています。OracleのJVMやTomcatなどと違いがあるので,次のような敷居を越えなければなりません。

  • WAS traditional と WAS Liberty の構成や設定の違い - デプロイ・ツールや管理コンソールの使い方
  • Web サーバーを含めた構成や設定の考慮点
  • コマンドによる構成や管理の仕方

知っていれば簡単なことですが,初めて触れる人には難しいと感じてしまうかもしれません。
本書の目的のひとつは,Java EEのスキルを持つ読者がこれからWAS traditionalを使う時の手助けとなることです。第1章から第4章までは,開発からデプロイにおける,IHSとWASに固有の管理コンソール,開発ツールなどを使用した基本的な操作や設定の考慮点を説明しています。さらに改訂版では,インテリジェント管理機能について解説を追加しました。
次に,既にWASの開発や管理はできている方が,さらに深い知識を身に付けるのに役立つことです。例えば,実際にWASを運用しているユーザーから「javacore が出力されているけど見てもらえないかな。」と依頼を受けることがあります。javacoreの出力はOutOfMemoryErrorによって引き起こされていることも多いのですが,問題となるOutOfMemoryErrorを判別し,障害を防ぐためには,なぜそれが起きたのかを分析できるスキルとJVMの知識が必要です。
JVMのメモリーの扱いについては,WASのオンライン・マニュアルではなく,JVMの英語のガイドに詳細が記述されています。そのため,重要なトピックであるにも関わらず,JVMについて理解しないままにWASが使われていることも多々あります。第5章から第8章では,WASの問題対応の専門家の立場として,次の内容を分かりやすく解説します。

  • 安定稼働のために何をしなければならないか
  • IBM JVMのメモリー管理の動作
  • 障害時に出力するログの読み方とそれに備えた設定
  • OS/IHS/WAS/JVMのパフォーマンス・チューニングの方法 - セキュリティの基本

さらに改訂版では,WAS Libertyの概要,アプリケーションの開発とデプロイ,構成と設定,問題判別,クラウドでの利用例を第9章から第13章に追加しています。
専門家のノウハウや知識を読みやすい形にまとめた本書を活用して,より容易にWASを利用していただければ幸いです。

目次

  • はじめに

第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の構成情報をデプロイする
  • 索引

著者プロフィール

串宮平恭(くしみやひらやす)

第4章,第8章を担当。
1998年からJava開発ツール,2004年からWAS技術支援を担当。WebSphere関連製品の提案やお客様プロジェクトの技術支援を行っている。分散データグリッドのAgent処理に興味があり,広めたいと思っている。モバイル・アプリケーション開発プラットフォームを担当し,提案活動を行ってきた。


田中孝清(たなかたかきよ)

第1章,第9章,第12章を担当。
2000年より日本IBMソフトウェア事業でWebSphere Application Serverの技術者として日本でのセールス活動に携わる。日本語でのWASの技術文書の執筆なども多く手がけている。


原口知子(はらぐちともこ)

第1章,第2章,第3章を担当。
2001年からWebSphere事業部にてWASの技術支援を担当。WASの提案活動や構築支援,developerWorks WebSphereの運営等に従事。2015年からはマーケティング部門にて,ミドルウェア製品のマーケティングを担当している。


福﨑哲郎(ふくざきてつお)

第6章,第7章を担当。
15年以上技術サポートエンジニアとして世界中のWASシステムを支えた後,現在は東京ラボラトリでIBM Cloudのプレミアムサポートを担当するTechnical Account Managerとして活動している。


盛林哲(もりばやしあきら)

第5章を担当。
日本IBMで2000年よりWebSphere製品の技術者として活動。サポートエンジニアを経て,現在はサービス部門でWAS専門家としてトラブルシュートを数多く実施。ヘルスチェックやパフォーマンスチェックなど安定稼働にも取り組む。趣味スノーボード・写真など。


中島由貴(なかじまよしき)

第10章,第11章を担当。
2004年よりWebSphere Application Serverのテクニカル・サポートを担当し,WebSphereを使用したシステムのシステム設計やアプリケーション開発を実施。2011年より,WebSphere事業部/Cloud事業部にて,WebSphere LibertyをはじめとしたWebSphere関連製品のテクニカル・セールスを担当し,提案活動の他,セミナー講師なども行っている。最近は,Libertyで実装された製品IBM Voice Gatewayも担当している。


斎藤和史(さいとうかずふみ)

第13章を担当。
2013年IBM入社。サーバーサイドおよびCI/CD周りのプリセールスエンジニア。IBM製品としてはWebSphere LibertyやIBM Cloud Privateの専門家であり,KubernetesやIstio,CI/CDなど様々なOSSを活用しながら,お客様のデジタル変革を支援している。