【WebOTX】Java SE 7 Update 55 および Update 60 で実施された改修による WebOTX V9 への影響について
概要
2014/07/15に本事象が解消された JDK 7u65 がリリースされました。
WebOTX開発部門での評価の結果、正しく動作することを確認できました。
WebOTXのインストールやドメイン作成、あるいはJDK 更新時には 7u65以降を利用してください。
オラクル社が 2014/04/15 よりリリースを開始した
Java SE Development Kit 7, Update 55 (以下、JDK 7u55 と略す) および
Update 60 (同じく、JDK 7u60 と略す) において、
以下で説明する旧 JDK 7 Update バージョンとの非互換を原因として
WebOTX が次の影響を受けることが確認されました。
WebOTXが受ける影響
- 対象の JDK において WebOTX の新規インストールに失敗する。
- 対象の JDK においてドメインの作成に失敗する。
- インストール済みの JDK を対象の JDK に変更すると、ドメインの起動に失敗する。
なお、WebOTX V8 に関する この問題の情報は以下をご参照ください。
Windows / Linux / Solaris
- Oracle JDK 7u55
- Oracle JDK 7u60
HP-UX
影響のある製品
- WebOTX Application Server V9.1~V9.2
- WebOTX Developer V9.1~V9.2 テスト用サーバ
- WebOTX Portal V9.1
- WebOTX Batch Server V9.2
- WebOTX Enterprise Service Bus V9.2
エラー内容
(ケース1) JDK 7u51以前を適用したWebOTXが構築済みの環境に対して、JDKを 7u55 あるいは 7u60 にバージョンアップする。
本事象が発生した場合、webotx_agent.log に以下のエラーメッセージが出力され、ドメイン起動に失敗します。
OTX01205150: アプリケーションサーバ [domain1:server] の起動に失敗しました : com.sun.enterprise.module.ResolveError: Failed to start Bundle Id [<バンドルID(*)>] State [RESOLVED] [com.nec.webotx.as.main.common.webotx-naming(WebOTX Naming):<WebOTX Namingモジュールのバージョン番号(*)>] [main]
|
(*) <バンドルID>はインストール環境、<WebOTX Namingモジュールのバージョン番号>はWebOTXのバージョンにより可変です。
(ケース2) JDK 7u55 あるいは 7u60 がインストールされた環境へ新規にWebOTXをインストールする。
Windowsの場合、以下のメッセージダイアログが出力されます。
インストール(ファイルコピー等)は正常に完了しましたが、ドメインの作成に失敗しました。
<WebOTXインストールディレクトリ>\ant_setup.logを確認し、エラー原因を確認してください。
エラー原因を解消後、<WebOTXインストールディレクトリ>\ant_setup.batを実行してドメインを再作成してください。
|
Unixの場合、コンソールに以下のエラーメッセージが出力されます。
Making domain is failed.
The result of 'ant' should look at '/opt/WebOTX/ant_setup.log'.
Installation is canceled.
|
いずれの場合もインストール中に起動されるユーザドメインのwebotx_agent.logに、ケース1のログメッセージが出力されています。
回避策
原則は「概要」で述べたとおりこの問題が解消された JDK 7u65以降の適用を強く推奨します。何らかの理由でJDK 7u55 あるいは 7u60を適用しなけれなばらない場合のエラー回避手順について説明します。
状況に応じて、下記のエラー回避手順を実施してください。
WebOTX Application Server Standard/Enterpriseを使用していて、
Java EE プロセスグループを使用する場合は、上記手順に加えて次のエラー回避手順を実施してください。
なお、WebOTXが使用するJDKの指定方法は「参考」を参照してください。
(手順1) 2つのJDK 7をインストール
WebOTXインストール対象のコンピュータにJDK 7のUpdate 51以前とUpdate 55 あるいは Update 60をインストールしておきます。
(手順2) WebOTXのインストール
WebOTX製品のインストール中に適用するJDKのパスを指定する画面が表示されます。ここで本事象の発生しないJDK 7u51以前のものを指定します。
(手順3) WebOTXに適用したJDKをUpdate 55 あるいは Update 60に差し替え
インストール完了後に「既存環境の JDK を JDK 7u55 あるいは 7u60 にアップデートする場合」を行います。
現在、WebOTXにはJDK 7u51以前が適用されています。その環境に対してJDK 7をUpdate 55 あるいは Update 60 にバージョンアップするためには、まずバージョンアップする前に以下の手順を実施してください。
(手順1) ドメインに環境設定CLASSPATHを設定
ドメインが起動している状態で、管理ドメインを除く全てのドメインに対して以下のコマンドを実行してください。
otxadmin> set server.java-config.system-classpath=${com.nec.webotx.installRoot}/modules/omgorb110.jar
${path.separator}${com.nec.webotx.installRoot}/modules/wo-orb110.jar
実際には改行を入れずに1行で記述してください。
(手順1) WebOTXのプロセスを全て停止
JDK 7u55 あるいは 7u60 を使ってドメインを起動するとWebOTX機能の一部が異常終了すると共に、一部のWebOTXプロセスが残存する可能性があります。そこで、本回避策を実施する前に全ユーザドメインに対して以下のコマンドを実行して、不正な状態のプロセスが残存していない状態にします。
otxadmin> stop-domain --force -wait_timeout 0 <ユーザドメイン名>
(手順2) プロセス停止の確認
コマンド実施後はマニュアルの以下の箇所をご確認いただき、WebOTXのプロセスがすべて停止していることを確認してください。
[リファレンス集 ドメイン構成・環境移行編 > 1.2. 動作プロセス ]
(手順3) ドメインに環境設定CLASSPATHを設定
ユーザドメインが停止していることが確認できたら、以下の手順に従って、管理ドメインを除く全てのドメインに対して設定ファイル(domain.xml)の修正を行ってください。
-
${INSTANCE_ROOT}/config/domain.xmlをエディタで開いてください。
- java-configタグのsystem-classpath属性に以下の1行を追加してください。
${com.nec.webotx.installRoot}/modules/omgorb110.jar
${path.separator}${com.nec.webotx.installRoot}
/modules/wo-orb110.jar
(例)
<java-config debug-options="..." system-classpath=
"${com.nec.webotx.installRoot}/modules/omgorb110.jar
${path.separator}${com.nec.webotx.installRoot}
/modules/wo-orb110.jar" ...>
実際には改行を入れずに1行で記述してください。
- 運用管理コマンドからドメインを起動し、webotx_agent.logに本事象が発生した場合のエラーメッセージが出力されていないことを確認してください。
(手順1) WebOTX に適用した JDK を Update 51 以前に差し替え
現在、WebOTX に JDK 7 の Update 55 か Update 60 が適用されていない場合この手順は不要です。
(手順2) ドメインの作成
マニュアルの手順に従い、任意の名前のドメインを作成します。このとき、WebOTX に JDK 7 の Update 55 か Update 60
が適用されていると、ドメインの作成に失敗します。
(手順3) WebOTX に適用した JDK を Update 55 あるいは Update 60に差し替え
ドメインの作成が完了したら、「既存環境の JDK を JDK 7u55 あるいは 7u60 にアップデートする場合」を行います。
Standard/EnterpriseエディションのApplication Serverをご利用の場合は、追加で下記の設定が必要になります。
(この作業はExpressエディションでは実施不要です。)
(手順1) 全てのプロセスグループに環境設定CLASSPATHを設定
既存および新規作成のJava EEプロセスグループそれぞれについて、環境変数CLASSPATHを設定します。次のコマンドで設定します。
otxadmin> add-pg-setenv --apgroup <アプリケーショングループ名> --setenv CLASSPATH
--value <ObjectBrokerのJarファイルパス> <プロセスグループ名>
実際には改行を入れずに1行で記述してください。
<ObjectBrokerのJarファイルパス>の部分はWebOTXのバージョンおよびOSによって以下の表のように変わります。
Windows
|
Unix
|
<WebOTXインストールディレクトリ>\modules\omgorb110.jar; <WebOTXインストールディレクトリ>\modules\wo-orb110.jar |
/opt/WebOTX/modules/omgorb110.jar :/opt/WebOTX/modules/wo-orb110.jar |
実際には改行を入れずに1行で記述してください。
なお、Java EEプロセスグループにすでに環境変数CLASSPATHが設定されている場合、既存の値と<ObjectBrokerのJarファイルパス>の値をOSごとのクラスパス区切り文字で結合して指定してください。
本事象が発生する原因
JDKに含まれるCORBA機能は、既定ではオラクル社による実装が使用されますが、ベンダ独自実装に差し替える仕組みも備えています。WebOTXでは、その仕組みを使ってNEC固有のCORBA製品「Object Broker」を組み込んでいます。それを実現するために、JDKの仕様にしたがって、シングルトンORB実装クラス名を指定するためのシステムプロパティ「org.omg.CORBA.ORBSingletonClass」に対してNEC独自実装のクラスを設定しています。この独自シングルトンORB実装クラスのロードはorg.omg.CORBA.ORBクラスのinit()メソッド内で行われます。
JDK 7u51以前では、シングルトンORB実装クラスのロードはスレッドに設定されたコンテキストクラスローダによって行なわれていました。
しかし、JDK 7u55 ではorg.omg.CORBA.ORBクラスのinit()メソッド(*)の動作が、シングルトンORB実装クラスをロードするクラスローダとしてシステムクラスローダを使用するように変更されました。
WebOTXのクラスローダは階層構造になっており、シングルトンORB実装クラスを含めたWebOTXに含まれるクラスはシステムクラスローダでロードされません(スレッドに設定されたコンテキストクラスローダでロードできる設計になっています)。よって、JDKの仕様変更が影響して、ドメイン起動中に呼び出されるorg.omg.CORBA.ORBクラスのinit()メソッドのシングルトンORB実装クラスのロードでjava.lang.ClassNotFoundException例外が発生し、ドメイン起動に失敗します。
(*) クラスローダが変更されたのは引数なしのinit()メソッドのみです。init(Applet, Properties)、およびinit(String[], Properties) は変更されていません。
WebOTXが使用するJDKの変更方法はマニュアルの以下を参照してください。
[ドメイン構築・基本設定ガイド > 2. 環境設定 > 2.2. JDKの設定 > 2.2.1. JDKの更新・変更]
製品名カテゴリ
WebOTX
WebOTX Application Server
WebOTX Service Integration
WebOTX Portal
WebOTX Batch Server
-
コンテンツID:
3010100850
-
公開日:
2014年05月07日
-
最終更新日:2014年09月01日