この節には、Message Queue 4.1 の既知の問題についてのリストが含まれています。次の内容について説明します。
現時点のバグ、その状態、および回避策の一覧については、Java Developer Connection™ メンバーは、Java Developer Connection Web サイトの「Bug Parade」ページを参照してください。新しいバグを報告する前に、このページをチェックしてください。すべての Message Queue バグがリストされているわけではありませんが、このページはある問題が報告済みかどうかを知りたい場合に活用できます。
http://bugs.sun.com/bugdatabase/index.jsp
Java Developer Connection のメンバーになるのは無料ですが、登録が必要です。Java Developer Connection のメンバーになる方法についての詳細は、Sun の「For Developers」Web ページを参照してください。
新しいバグの報告や機能に関する要求を行うには、imq-feedback@sun.com 宛てにメールを送信してください。
この節では、Message Queue version 4.1 のインストールに関連した問題について説明します。
Message Queue の Version 4.1 は、新しいインストーラでインストールされます。このインストーラは、JDK、NSS ライブラリ、JavaHelp など、Message Queue が必要とする共有コンポーネントもインストールおよびアップグレードします。このインストーラと Java Enterprise System (JES) インストーラは、同じ製品レジストリを共有しません。JES でインストールされたあるバージョンの Message Queue が削除され、Message Queue インストーラで Message Queue 4.1 にアップグレードされた場合、JES 製品レジストリは矛盾する状態になることがあります。その結果、JES アンインストーラを実行すると、JES でインストールしなかった Message Queue 4.1 とそれが依存する共有コンポーネントが意図せずに削除されることがあります。
JES インストーラでインストールしたソフトウェアをアップグレードする最善の方法は、次のとおりです。
JES アンインストーラを使用して、Message Queue とその共有コンポーネントを削除します。
Message Queue インストーラを使用して、Message Queue 4.1 をインストールします。
Message Queue 4. 1 Installer JDK Selection Screen を使用すると、Message Queue で使用するシステムで既存の JDK/JRE を選択できます。残念ながら、示されているリストには、インストーラアプリケーションの実行に使用する JRE も含まれています。この JRE は、インストーラバンドルの一部であり、実際にシステムにインストールされることはありません。(バグ 6585911)
インストーラが使用する JRE はそのパスによって判別可能です。このパスは、解凍されたインストーラディレクトリ内に存在し、サブディレクトリ mq4_1–installer が含まれているはずです。次に例を示します。
some_directory/mq4_1–installer/usr/jdk/instances/jdk1.5.0/jre
この JRE は Message Queue での使用には選択しないでください。代わりに、システム上の別の JDK を選択してください。別の JDK が存在しない場合は、プラットフォームに適した処置を講じてください。
Solaris または Linux の場合: 「Java(TM) SDK のデフォルトバージョンをインストールして使用します。」を選択します。
Windows の場合: Message Queue 4.1 インストーラを実行する前に、JDK をダウンロードしてインストールします。
Message Queue を Windows にインストールするときは、次の制限事項に注意してください。
インストーラは、Message Queue 用のエントリを「スタート」>「すべてのプログラム」メニューに追加しません (バグ 6567258)。管理コンソールを起動するには、『Sun Java System Message Queue 4.1 Administration Guide』の「Starting the Administration Console」に示されているように、コマンド行を使用します。
インストーラは、IMQ_HOME\mq\bin ディレクトリを PATH 環境変数に追加しません。(バグ 6567197)。ユーザーは、Message Queue ユーティリティー (IMQ_HOME\mq\bin\command) を起動するときに、このエントリを PATH 環境変数に追加するか、フルパス名を指定する必要があります。
インストーラは、Message Queue がインストールされたことを示すために Windows レジストリにエントリを追加しません。
サイレントモードで実行すると、インストーラはすぐに返されます。インストールは行われますが、ユーザーにはサイレントインストールがいつ実際に実行されたかを知る方法がありません。 (バグ 6586560)
テキストモード (installer –t) は Windows ではサポートされていません。Windows でテキストモードでインストーラを実行すると、エラーメッセージが表示されます。このメッセージは、インストーラが英語以外のロケールで実行されていても、英語で表示されます。(バグ 6594142)
インストーラの「Install Home」画面に表示される文字列「Install Home」は、インストーラが英語以外のロケールで実行されていても、英語で表示されます。(バグ 6592491)
エラーメッセージおよび「未完了」の概要状態は、installer-n コマンドを使用してインストールしようとしているユーザーの誤解を招きます。コマンドは実際には正常に動作しています。(バグ 6594351)
次に示す問題は、Linux プラットフォームでのインストールに影響します。
「JDK 選択」パネルで、スクロールリストに項目が 1 つしか表示されません。このため、リスト内のほかの JDK を選択することが難しくなります。(バグ 6584735)
JDK が現在のもので、ユーザーが「JDK 選択」画面で「Java(TM) SDK のデフォルトバージョンをインストールして使用します。」を選択した場合、インストーラはその JDK をインストールしようとし、パッケージをインストールできないというレポートを返します。この問題があっても、インストールは正常に完了します。(バグ 6581310)
インストーラを予行モード (installer –n ) で実行すると、「概要」画面にいくつかのエラーメッセージが表示され、「未完了」のインストール状態も表示されます。これは誤りで、誤解を招きます。予行モードでは、何もシステムにインストールされません。後でインストールに使用できる回答ファイルが作成されるだけです。(バグ 6594351)
古いバージョンの Message Queue のローカライズ版 RPM がシステムに存在する場合、Message Queue 4.1 のローカライズ版 RPM のインストール (「多言語パッケージ」の画面で「Message Queue 多言語パッケージをインストールする」を選択した場合) は失敗します。インストールは、前の 3.7 UR1 インストールの Il8 パッケージとの衝突のために失敗します。 (バグ 6594381)
回避策: 4.1 Installer を実行する前に、rpm –e コマンドを使用して手動でローカライズ版 RPM を削除します。ここで関係のある RPM を判別するには、『Sun Java System Message Queue 4.1 Installation Guide』の「Message Queue Packages (RPMs)」を参照してください。
次に示す問題は、すべてのプラットフォームでのインストールに影響します。
インストーラが Message Queue 4.1 のインストールを処理中で、「進行状況」画面が表示されているときは、「取消し」ボタンがアクティブになります。ここで「取消し」ボタンを選択すると、インストールが完了しないか、破棄されます。 (バグ 6595578)
インストーラの「概要」画面には、クリックするとログまたは概要ページビューアが開くリンクがいくつか含まれています。「閉じる」というラベルの付いたボタンの代わりに、ウィンドウの閉じるボタン「X」を使用してこのビューアウィンドウを取り消した場合は、このビューアウィンドウを再度表示することはできません。(バグ 6587138)
回避策:「閉じる」というラベルの付いたボタンを使用してウィンドウを閉じます。
システムに古いバージョンの Message Queue および NSS/NSPR があると、インストーラの「アップグレード」で、アップグレードが必要な Message Queue のリストだけが表示され、NSS/NSPR のアップグレードが必要であることは触れられません。これは、すべての関連ソフトウェアがインストールプロセスの一部としてアップグレードされる (正しい情報が表示される「インストール準備完了」画面に示される) ことに関係した、「更新」画面の問題にすぎません。(バグ 6580696)
回避策: NSS/NSPR ファイルが最新版でない場合は最新版がインストールされ、古いバージョンがアンインストールされるため、回避の必要はありません。
インストーラまたはアンインストーラがテキストモード (installer –t ) で実行されているときは、「概要」画面にログファイルまたは概要ファイルを含むディレクトリが表示されますが、これらのファイルの名前のリストは表示されません。(バグ 6581592)
存在しないファイルの名前を指定すると、矛盾した不明瞭なエラーメッセージが生成されます。 (バグ 6587127)
インストーラには、Message Queue のバージョン情報が隠された形式で表示されます。(バグ 6586507)
Solaris プラットフォームの場合は、下の表を参照して、インストールされているバージョンを判別してください。
表 1–11 バージョンの形式
インストーラで表示されるバージョン |
Message Queue のリリース |
---|---|
4.1.0.0 |
4.1 |
3.7.0.1 |
3.7 UR1 |
3.7.0.2 |
3.7 UR2 |
3.7.0.3 |
3.7 UR3 |
3.6.0.0 |
3.6 |
3.6.0.1 |
3.6 SP1 |
3.6.0.2 |
3.6 SP2 |
3.6.0.3 |
3.6 SP3 |
3.6.0.4 |
3.6 SP4 |
3.6 SP4 のパッチリリースの場合 (たとえば、3.6 SP4 Patch 1)、インストーラで表示されるリリース文字列は同じままです。厳密なバージョンを判別するには、コマンド imqbrokerd –version を実行する必要があります。
Linux プラットフォームの場合は、簡単に形式を変換できません。Linux 上のインストーラで表示されるバージョン番号は、次の形式になります。
<majorReleaseNumber>.<minorReleaseNumber>-<someNumber>
たとえば、3.7–22 のようになります。これにより、3.7 リリースの 1 つであることがわかりますが、どの特定のバージョンかはわかりません。それを判別するには、コマンド imqbrokerd —version を実行します。
次に示す問題は、ローカリゼーションの問題に関係しています。
インストーラを英語以外のロケールでテキストモード (installer –t) で実行すると、マルチバイト文字が文字化けします。 (バグ 6586923)
ユーザーは、インストーラの「概要」画面を使用して「概要」レポートを表示できます。残念ながら、マルチバイトのロケールでインストーラを実行すると、このレポート (HTML ページ) は文字化けします。(バグ 6587112)
回避策: HTML ファイルを編集して、その中に指定されている文字セットを訂正します。HTML ファイルには、次のような部分が含まれているはずです。
meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8
「UTF-8」を「locale_name .UTF-8」に置き換えます。たとえば、Solaris の場合は ja_JA.UTF-8 または ko.UTF-8 に、Linux の場合は ja_JA.utf8 または ko_KO.utf8 にします。
インストーラの「進行状況」画面で、進行状況のバーに見慣れない文字が表示されます。ツールヒントは、英語以外のロケールではハードコードされています。(バグ 6591632)
テキストモード (installer –t) は Windows ではサポートされていません。Windows でテキストモードでインストーラを実行すると、エラーメッセージが表示されます。このメッセージは、インストーラが英語以外のロケールで実行されていても、ローカライズされません。(バグ 6594142)
インストーラの「ライセンス」画面には、インストーラが実行されるロケールに関係なく、英語のライセンステキストが表示されます。(バグ 6592399)
回避策: ローカライズされたライセンスファイルにアクセスするには、LICENSE_MULTILANGUAGE.pdf ファイルを検索してください。
インストーラの使用方法に関するヘルプテキストがローカライズされていません。(バグ 6592493)
インストーラの概要 HTML ページに表示される文字列「None」は、英語でハードコードされています。(バグ 6593089)
著作権のページは、フランス語以外のロケールにはローカライズされていません。(バグ 6590992)
インストーラをドイツ語のロケールで実行すると、ほかのロケールでは表示される開始画面のテキストが正しく表示されません。(バグ 6592666)
インストーラの「Install Home」画面に表示される文字列「Install Home」がローカライズされていません。その文字列は、英語以外のロケールでインストーラを実行しても、英語で表示されます。(バグ 6592491)
テキストモード (installer –t) でインストーラを実行すると、どのロケールでインストーラを実行するかに関係なく、英語の応答選択肢「Yes」および「No」が使用されます。(バグ 6593230)
インストーラの「JDK 選択」画面の参照ボタンのツールヒントは、英語でハードコードされています。(バグ 6593085)
以前のバージョンの Message Queue では、—p または —password オプションを使用して、次のようなコマンドのパスワードを対話形式で指定することができました。imqcmd、imqbrokerd、imdbmgr version 4.0 から、これらのオプションは使用できなくなりました。パスワードを指定するには次の手順に従います。
パスワードのみを格納するために使用するファイルで、パスワードプロパティーを必要な値に設定します。
パスワードファイル内で、次の構文を使用してパスワードを指定します。
PasswordPropertyName= MyPassword
—passfile オプションを使用してパスワードファイルの名前を渡します。
パスワードファイルには、次に示すパスワードを 1 つ以上格納することができます。
SSL キーストアを開くために使用するキーストアパスワード。このパスワードを指定するには imq.keystore.password プロパティーを使用します。
接続が匿名でない場合に LDAP ディレクトリとの接続のセキュリティーを確保するために使用する LDAP リポジトリパスワード。このパスワードを指定するには imq.user_repository.ldap.password プロパティーを使用します。
JDBC 準拠のデータベースとの接続に使用する JDBC データベースパスワード。このパスワードを指定するには imq.persist.jdbc.vendorName.password プロパティーを使用します。プロパティー名の vendorName コンポーネントは、データベースベンダーを指定する変数です。hadb、derby、pointbase、oracle、mysql から選択できます。
imqcmd コマンド (ブローカ管理タスクを実行する) に対するパスワード。このパスワードを指定するには imq.imqcmd.password プロパティーを使用します。
次の例では、JDBC データベースに対するパスワードに abracadabra を設定しています。
imq.persist.jdbc.mysql.password=abracadabra
ブローカがユーザー作成のパスワードファイルを使用するように設定するには、次のいずれかの方法を実行します。
ブローカの config.properties ファイルに次のプロパティーを設定する。
imq.passfile.enabled=true |
imq.passfile.dirpath=MyFileDirectory |
imq.passfile.name=MyPassfileName |
imqbrokerd コマンドの —passfile オプションを使用する。
imqbrokerd —passfile MyPassfileName
この節では Message Queue 4.1 の一般的な問題を説明しています。中には以前のバージョンの Message Queue で発生した問題もあります。
HTTP トランスポートを使用している JMS クライアントが、Ctrl-C の使用などにより突然終了した場合、ブローカがクライアント接続や関連するすべてのリソースを解放するまでに、およそ 1 分かかります。
この 1 分の間にクライアントのほかのインスタンスが起動し、同じ ClientID、永続サブスクリプション、またはキューを使おうとした場合、そのインスタンスは「クライアント ID はすでに使用されています」の例外を受け取ります。このことは実際の問題ではなく、上記の終了処理の結果にすぎません。およそ 1 分経過後にクライアントが起動すると、すべて問題なく動作します。
SOAP クライアント。これまでは、mail.jar および mail.jar を参照するために使用する SAAJ 1.2 実装 JAR が CLASSPATH 内に存在する必要はありませんでした。SAAJ 1.3 では、この参照が削除されたため、Message Queue クライアントが mail.jar を明示的に CLASSPATH 内に配置する必要があります。
次に示す問題は Message Queue の管理および設定に関係するものです。
Windows コンピュータで CLASSPATH に二重引用符が含まれている場合、imqadmin および imqobjmgr ユーティリティーはエラーをスローします (バグ ID 5060769)。
回避策: エラーメッセージは無視できます。ブローカはコンシューマへのエラーの通知を正しく処理します。このエラーは、システムの信頼性には影響を与えません。
すべての Solaris および Windows スクリプトで、-javahome オプションの値に空白文字が含まれると動作しない (バグ ID 4683029)。
javahome オプションは Message Queue コマンドおよびユーティリティーで使用し、使用する代替の Java 2 互換のランタイムを指定します。ただし、代替の Java 2 互換のランタイムへのパスには、空白文字を含めることはできません。空白文字を含むパスの例は次のとおりです。
Windows の場合: C:/jdk 1.4
Solaris の場合: /work/java 1.4
回避策: Java ランタイムを、空白文字が含まれない場所またはパスにインストールします。
imqQueueBrowserMaxMessagesPerRetrieve 属性は、クライアントランタイムがキューの内容を検索するときに一度に取得することのできるメッセージの最大数を指定します。ただし、クライアントアプリケーションは常にキューにあるすべてのメッセージを取得します。このため imqQueueBrowserMaxMessagesPerRetrieve 属性は、キューに入れられたメッセージがチャンクされ、クライアントランタイムに配信される方法 (より少ない大型チャンク、またはより多い小型チャンク) には影響しますが、参照されるメッセージの総数には影響しません。この属性の値を変更するとパフォーマンスに影響が出る可能性はありますが、クライアントアプリケーションの取得するデータ量が変動することはありません (バグ ID 6387631)。
次に示す問題は Message Queue ブローカに影響します。
ブローカをラウンドロビン配信用に設定する方法に関していくらか混乱がありました。解決策は簡単で、設定可能なものです。
送信先属性 maxNumActiveConsumers を -1 に設定します。これにより、ラウンドロビン配信がオンになります。
送信先属性 consumerFlowLimit を 1 に設定します。これにより、配信が次のコンシューマに進む前に、1 つのコンシューマに配信されるメッセージの数が指定されます。別のチャンクの場合は、この属性を必要な値に設定します。デフォルトでは、100 のメッセージがコンシューマごとに配信されます。
持続ストアがあまりにも多くの送信先を開く場合、ブローカがアクセス不可能になる (バグ ID 4953354)。
回避策: この状態はブローカがシステムのオープンファイル記述子の制限に達したことが原因です。Solaris や Linux では、ulimit コマンドを使って、ファイル記述子の制限を増やします。
送信先が破棄された場合、コンシューマが孤立する (バグ ID 5060787)。
送信先が破棄された場合、アクティブコンシューマが孤立します。いったんコンシューマが孤立すると、送信先が再作成された場合でもメッセージを受信しなくなります。
回避策: この問題には、回避策がありません。
次に示す問題は、クラスタ化したブローカに影響します。
このリリースでは、フル接続のブローカクラスタのみサポートされています。つまり、クラスタ内のすべてのブローカは、そのクラスタ内のほかのブローカと相互に直接やり取りする必要があります。imqbrokerd -cluster コマンド行引数を使用してブローカを接続する場合は、そのクラスタ内のすべてのブローカが含まれていることを確認してください。
HADB を使用するブローカは、10M バイトより大きなメッセージを処理できません。(バグ 6531734)
クライアントが高可用性ブローカに接続されている場合、クライアントランタイムは、imqAddressListIterations 値が何に設定されているかに関係なく、成功するまで再接続を試みます。
クラスタの一部であるブローカに接続されているクライアントは、現在 QueueBrowser を使用して該当するクラスタ内のリモートブローカにあるキューを検索することはできません。クライアントが検索できるのは、直接接続されているブローカにあるキューの内容のみです。この場合でも、クライアントは、クラスタ内の任意のブローカに対してキューにメッセージを送信したりキューからのメッセージを消費したりできます。制約を受けるのは検索のみです。
従来のクラスタでは、4.1 ブローカを 3.x ブローカと一緒にクラスタ化する場合は、プロパティー imq.autocreate.queue.maxNumActiveConsumers=1 を 4.1 ブローカ用に設定する必要があります。そうしないと、ブローカはクラスタ接続を確立できません。
高可用性クラスタに変換するときに、Message Queue Manager ユーティリティー (imqdbmgr) を使用して、既存のスタンドアロン HADB 持続データストアを共有 HADB ストアに変換できます。コマンドは次のとおりです。
imqdbmgr upgrade hastore
このユーティリティーは次の場合に使用できます。
4.0 スタンドアロン HADB ストアから 4.1 共有 HADB ストアに移行する。この場合、ブローカは自動的にストアをアップグレードします。次に、imqdbmgr コマンドを実行して、アップグレードしたデータストアを共有で使用するために変換できます。
スタンドアロン 4.1 HADB ストアから共有 HADB ストアに移行する。この場合は、上記の imqdbmgr コマンドを実行して、データストアを共有で使用するために変換する必要があるだけです。
このコマンドは HADB ストアの変換をサポートするだけなので、このコマンドを使用してファイルベースのストアまたはほかの JDBC ストアを共有 HADB ストアに変換することはできません。以前に 3.x バージョンの Message Queue を実行していた場合は、高可用性機能を使用するためには、HADB ストアを作成してから、データを手動でそのストアに移行する必要があります。
コマンド imqdbmgr upgrade hastore を使用した HADB ストアへの変換は、ストアに 10,000 を超えるメッセージが保持されている場合、「設定されているロックの数が多すぎます」というメッセージが表示されて失敗することがあります。(バグ ID 6588856))。
(回避策:) 次のコマンドを使用して、ロックの数を増やします。
hadbm set NumberOfLocks=<desiredNumber>
詳細は、『Sun Java System Application Server 9.1 Enterprise Edition トラブルシューティングガイド』の「HADB の問題」を参照してください。
1 つのトランザクションに 500 を超えるリモートメッセージがコミットされている場合、ブローカはエラー「HADB-E-12815: Table memory space exhausted」を返すことがあります。 (バグ ID 6550483)
詳細は、『Sun Java System Application Server 9.1 Enterprise Edition トラブルシューティングガイド』の「HADB の問題」を参照してください。
ブローカクラスタで、開始していないリモート接続へのメッセージをブローカがキューに入れます (バグ ID 4951010)。
回避策: いったんその接続が開始すると、メッセージはコンシューマによって受信されます。コンシューマの接続が閉じている場合、メッセージは別のコンシューマへ再配信されます。
1 つのトランザクションでリモートブローカから複数のメッセージを消費しているときは、次のエラーメッセージがブローカに記録される可能性があります。このメッセージは無視しても問題ありません。
[26/Jul/2007:13:18:27 PDT] WARNING [B2117]: Message acknowledgement failed from mq://129.145.130.95:7677/?instName=a&brokerSessionUID=3209681167602264320: ackStatus = NOT_FOUND(404)\ Reason = Update remote transaction state to COMMITED(6): transaction 3534784765719091968 not found, the transaction may have already been committed. AckType = MSG_CONSUMED MessageBrokerSession = 3209681167602264320 TransactionID = 3534784765719091968 SysMessageID = 8-129.145.130.95(95:fd:93:91:ec:a0)-33220-1185481094690 ConsumerUID = 3534784765719133952\par [26/Jul/2007:13:18:27 PDT] WARNING Notify commit transaction [8-129.145.130.95(95:fd:93:91:ec:a0)-33220-1185481094690, [consumer:3534784765719133952, type=NONE]] TUID=3534784765719091968 got response: com.sun.messaging.jmq.jmsserver.util.BrokerException: Update remote transaction state to COMMITED(6): transaction 3534784765719091968 not found, the transaction may have already been committed.: com.sun.messaging.jmq.jmsserver.util.BrokerException: Update remote transaction state to COMMITED(6): transaction 3534784765719091968 not found, the transaction may have already been committed.r
このメッセージは、imq.txn.reapLimit プロパティーが 1 つのトランザクション内のリモートメッセージの数と比較して少ない場合に、トランザクション内の後のメッセージのためにコミットをメッセージホームブローカに通知するときに記録されます。(バグ 6585449)
回避策: このメッセージを回避するには、imq.txn.reapLimit プロパティーの値を増やします。
Windows プラットフォームでは、トランザクションマネージャーの監視 MBean の getTransactionInfo メソッドが不正なトランザクションの作成時間を含むトランザクション情報を返します (バグ ID 6393359)。
回避策: 代わりにトランザクションマネージャーの監視 MBean の getTransactionInfoByID メソッドを使用します。
SOAP サポートに関連した 2 つの問題に注意する必要があります。
Message Queue の version 4.0 のリリースから、SOAP 管理によるオブジェクトのサポートは中止されています。
SOAP 開発は、いくつかのファイルに依存しています。SUNWjaf、SUNWjmail、SUNWxsrt、および SUNWjaxp です。Message Queue の version 4.1 では、これらのファイルを利用できるのは JDK version 1.6.0 以降で Message Queue を実行している場合のみです。