Interstage Application Server/Interstage Web Server トラブルシューティング集
目次 索引 前ページ次ページ

第8章 J2EEアプリケーション開発・運用時の異常> 8.12 Interstage JMSの異常時の対処

8.12.4 よくある問題とその対処方法

 下表によくある問題とその対処方法を示します。

問題

主な原因

対処

JNDI定義情報にTopicConnectionFactory、またはQueueConnectionFactoryが見つからない。

JNDIサブコンテキストが正しくない。

正しいJNDIサブコンテキストを使用しているか確認してください。
JMSアプリケーションからJNDI名を参照する場合は“java:comp/env/jms/”を付加してください。

誤ったTopicConnectionFactory名、QueueConnectionFactory名が使用された。

すべての名前は大文字、小文字を区別します。
jmsinfofactコマンドを使用して、ConnectionFactory名を確認してください。


マルチシステム運用時に、拡張システム名が設定されていない。

拡張システムでJMSアプリケーションを起動する場合は、Java(TM)VMのシステムプロパティ“com.fujitsu.interstage.isas.SystemName”に拡張システム名を設定する必要があります。javaコマンドの-Dオプションを使用して拡張システム名を設定してください。

JNDI定義情報にTopic、またはQueueが見つからない。

イベントチャネルが作成されていない。

esmkchnlコマンドを使用して、イベントチャネルが作成されているか確認してください。
esmonitorコマンドにより、イベントチャネルが起動しているか確認してください。

JNDIサブコンテキストが正しくない。

正しいJNDIサブコンテキストを使用しているか確認してください。
JMSアプリケーションからJNDI名を参照する場合は“java:comp/env/jms/”を付加してください。

誤ったTopic名、Queue名、チャネル名、グループ名が使用された。

すべての名前は大文字、小文字を区別します。
jmsinfodstコマンドを使用して、Destination名を確認してください。また、イベントチャネル運用マシン上で指定したチャネル名、グループ名と同じか確認してください。


マルチシステム運用時に、拡張システム名が設定されていない。

拡張システムでJMSアプリケーションを起動する場合は、Java(TM)VMのシステムプロパティ“com.fujitsu.interstage.isas.SystemName”に拡張システム名を設定する必要があります。javaコマンドの-Dオプションを使用して拡張システム名を設定してください。

JNDI名、クライアント識別子およびDurable Subscription名の制限。

使用可能な文字種は、アルファベット(大文字小文字ともに)、数字、ピリオド(.)、コロン(:)、アンダースコア(_)、ハイフン(-)、スラッシュ(/)です。スラッシュはJNDI名のアトミック名の区切り文字として認識されます。
アトミック名およびクライアント識別子の先頭文字はアルファベット+数字のみ指定可能です。
指定可能な最大文字列長は255バイトです。ただし、JNDI名は“java:comp/env/jms/”より後ろが255バイト以下となります。

正しい名前を使用してください。

SubscriberがSession.commit()またはMessage.acknowledge()などでメッセージの受信確認を行っているのに、イベントサービスのesmonitorコマンド画面でのQueueCountが減らない。

closeメソッドを呼ばずにSubscriberを終了した(アプリケーションの異常終了などを含む)可能性があります。

  • Connection.close()
  • Session.close()
  • MessageConsumer.close()

これにより、イベントチャネルにプロキシ(接続情報)が残ったため、イベントチャネルからデータが減らないということが考えられます。

Durable Subscription機能を使用していない場合、Subscriberを起動すると新しいプロキシを作成します。Subscriberがcloseメソッドを呼ばずに終了した場合、イベントチャネルにそのプロキシが残り、Subscriberを再起動しても新しいプロキシを作成するため、以前作成したプロキシは使用されません。使用されないプロキシ用にイベントチャネルはデータを保存し続けるため、再起動したSubscriberがメッセージの受信確認を行っても、イベントチャネルからデータの削除は行われません。そのため、esmonitorコマンド画面でのQueueCountが減らないという現象が起こります。
Durable Subscription機能を使用している場合、Subscriber終了後、Subscriberを再起動すると、以前作成したプロキシを使用します。そのため、キューカウントが減らないという現象は起こりません。

esmonitorコマンドを使用して、イベントチャネルの状態(ConsumerCount)を確認してください。
プロキシの数が実際に運用するSubscriberの数より多い場合は、esstopchnl→esrmchnlを行い初期化してからesmkchnl→esstartchnlを行ってください。

イベントサービスのesmonitorコマンドによりイベントチャネルにメッセージの蓄積が確認できる状態で、JMSアプリケーションを起動してもイベントチャネルからメッセージを受信できない。

Point-To-Pointメッセージングモデルにおいて、メッセージ受信のトランザクション処理中にアプリケーションが終了し、トランザクションタイムアウトまで受信中であったメッセージが配信されないことが考えられます。

“イベントサービス運用時の異常”の“アプリケーション運用中の異常”に記載されている“コンシューマアプリケーションの異常終了(接続情報を保存していない場合)”を参照してください。

NoClassDefFoundErrorが発生する。

動作環境の設定に誤りがあります。

必要な製品が正しくインストールされ、環境変数CLASSPATHが正しく設定されていることを確認してください。

javax.naming.NamingException: .GlobalTransactionMode nothingが発生する。

グローバルトランザクション機能を使用するための設定に誤りがあります。

JNDI環境プロパティcom.fujitsu.ObjectDirector.CORBA.GlobalTransactionModeにTrueが指定されていることを確認してください。


JMS運用コマンドを実行した場合に“Registry key 'Software\JavaSoft\Java Runtime Environment\CurrentVersion' has value '1.n', but '1.n' is required.”のメッセージがコンソールに出力される。
注)'1.n'はインストールされているJDKのバージョン

Interstage Application ServerがインストールしたJDK以外のJDKがインスールされているため、JMS運用コマンドが正常に動作しません。

以下のことを確認してください。

  • JDKが正しくインストールされていることを確認してください。
  • JDKのパスが環境変数PATHに設定されていることを確認してください。

または、以下のディレクトリ(インストールパスはデフォルト)に格納されているJava環境設定ファイル(java_config)に使用するJavaのインストールディレクトリを設定後、JMS運用コマンドを実行してください。

  • C:\Interstage\jms\bin

設定形式
 JDKDIR=javaのインストールディレクトリ(注)
 注)javaのインストールディレクトリは絶対パス形式で設定してください。

設定例
 C:\jdkにインストールしたJDKを使用する場合:
  JDKDIR=C:\jdk

JMSException

 

“メッセージ集”を参照して、ユーザの対処を実施してください。

Interstage管理コンソールの[サービス] > [JMS] > [イベントチャネル]で[イベントチャネル:状態]画面が表示できない(エラーメッセージ“es39996”または“es39999”が出力される)。

イベントチャネルグループ名に以下の使用可能な文字以外が含まれています。

英数字、イクスクラメーションマーク(!)、ナンバー(#)、ドルマーク($)、アポストロフィー(')、左丸括弧(()、右丸括弧())、プラス(+)、ハイフン(-)、ピリオド(.)、スラッシュ(/)、セミコロン(;)、アットマーク(@)、左角括弧([)、右角括弧(])、アンダースコア(_)、逆クォート(`)、左中括弧({)、右中括弧(})、波線(~)

英数字、イクスクラメーションマーク(!)、プラス(+)、ハイフン(-)、ピリオド(.)、スラッシュ(/)、アットマーク(@)、左角括弧([)、右角括弧(])、アンダースコア(_)、左中括弧({)、右中括弧(})、波線(~)

英数字、プラス(+)、ハイフン(-)、ピリオド(.)、スラッシュ(/)、アットマーク(@)、左角括弧([)、右角括弧(])、キャロット(^)、アンダースコア(_)、左中括弧({)、右中括弧(})

Interstage管理コンソールを使用する場合は、esmonitorコマンドを使用してイベントチャネルグループ名を確認し、esrmchnlコマンドを使用して、該当するイベントチャネルを削除してください。
または、イベントサービス運用コマンドで操作してください。

イベントチャネル名に以下の使用可能な文字以外が含まれています。

英数字、イクスクラメーションマーク(!)、ナンバー(#)、ドルマーク($)、アポストロフィー(')、左丸括弧(()、右丸括弧())、アスタリスク(*)、プラス(+)、カンマ(,)、ハイフン(-)、ピリオド(.)、スラッシュ(/)、コロン(:)、セミコロン(;)、イコール(=)、クエスチョンマーク(?)、アットマーク(@)、左角括弧([)、右角括弧(])、アンダースコア(_)、逆クォート(`)、左中括弧({)、右中括弧(})、波線(~)

英数字、イクスクラメーションマーク(!)、アスタリスク(*)、プラス(+)、カンマ(,)、ハイフン(-)、ピリオド(.)、スラッシュ(/)、コロン(:)、イコール(=)、クエスチョンマーク(?)、アットマーク(@)、左角括弧([)、右角括弧(])、アンダースコア(_)、左中括弧({)、右中括弧(})、波線(~)

英数字、パーセント(%)、アスタリスク(*)、プラス(+)、カンマ(,)、ハイフン(-)、ピリオド(.)、スラッシュ(/)、コロン(:)、イコール(=)、クエスチョンマーク(?)、アットマーク(@)、左角括弧([)、右角括弧(])、キャロット(^)、アンダースコア(_)、左中括弧({)、右中括弧(})

Interstage管理コンソールを使用する場合は、esmonitorコマンドを使用してイベントチャネル名を確認し、esrmchnlコマンドを使用して、該当するイベントチャネルを削除してください。
または、イベントサービス運用コマンドで操作してください。

Interstage管理コンソールの[サービス] > [JMS] > [保存先]で[保存先:情報]画面が表示できない(エラーメッセージ“es39996”または“es39999”が出力される)。

格納ディレクトリに以下の使用禁止文字が含まれています。

  • アンパサンド(&)
  • 小なり(<)

Interstage管理コンソールを使用する場合は、ユニット作成時のユニット定義ファイルで格納ディレクトリを確認し、esrmunitコマンドを使用して、該当するユニットを削除してください。
または、イベントサービス運用コマンドで操作してください。

Interstage管理コンソールの[サービス] > [JMS] > [ConnectionFactory]で[ConnectionFactory:一覧]画面が表示できない(エラーメッセージ“jms9997”が出力される)。

JNDI名に以下の使用禁止文字が含まれています。

  • コロン(:)

Interstage管理コンソールを使用する場合は、jmsinfofactコマンドを使用してJNDI名およびクライアント識別子を確認し、jmsrmfactコマンドを使用して、該当するConnectionFactory定義を削除してください。
または、JMS運用コマンドで操作してください。

Interstage管理コンソールの[サービス] > [JMS] > [イベントチャネル] > [イベントチャネルグループ名::イベントチャネル名] > [Destination]で[Destination:一覧]画面が表示できない(エラーメッセージ“jms9997”が出力される)。

JNDI名に以下の使用禁止文字が含まれています。

  • コロン(:)

Interstage管理コンソールを使用する場合は、jmsinfodstコマンドを使用してJNDI名、グループ名およびチャネル名を確認し、jmsrmdstコマンドを使用して、該当するDestination定義を削除してください。
または、JMS運用コマンドで操作してください。

JMS運用コマンドを使用して作成したDestination定義がInterstage管理コンソールに表示されない。

イベントチャネルが作成されていない。

Destination定義のグループ名、チャネル名に指定したイベントチャネルが作成されていることを確認してください。
または、JMS運用コマンドで操作してください。

誤ったチャネル名、グループ名が使用された。

jmsinfodstコマンドを使用して、イベントチャネルのグループ名、チャネル名を確認してください。

以下の状態であるにも関わらず、Message-driven Beanアプリケーションにおいてメッセージを受信できない。

  • Message-driven Beanアプリケーションを配備したワークユニットは、起動中である。
  • イベントチャネルは、動作中である。
  • クライアントアプリケーションからイベントチャネルに対し、正常にメッセージを送信できる。
  • esmonitorコマンドによりイベントチャネルのイベントデータの現蓄積数を確認できる。

ワークユニットの起動後、イベントチャネルが再起動された可能性があります。
イベントチャネルを再起動した場合は、ワークユニットも再起動する必要があります。

Windows(R)システムの場合はイベントログ、Solarisシステムの場合はシステムログに、以下の順でメッセージが出力されている場合、ワークユニットを再起動してください。

  • 情報メッセージEXTP4401「ワークユニットが起動しました」
  • 情報メッセージtd11028「ワークユニットを起動しました」
  • 情報メッセージtd11008「ワークユニットを正常に起動しました」
  • 情報メッセージes10028「イベントチャネルグループを終了しました」
  • エラーメッセージjms2550「通信エラーが発生しました」
  • 情報メッセージes10023「イベントチャネルグループを起動しました」

以下のように操作した場合、イベントチャネルに格納したメッセージの順序で受信されない。

  1. Message-driven Beanアプリケーションを配備したワークユニットをメッセージの処理中に強制終了する。
  2. ワークユニットを再起動する。

イベントチャネルのローカルトランザクション処理中に、ワークユニットを強制停止した場合、メッセージはローカルトランザクションのタイムアウト時間に達するまで受信できません。
したがって、ローカルトランザクションのタイムアウト時間に達する前にワークユニットが再起動された場合、次にイベントチャネルに格納したメッセージが先に受信されることになります。
なお、ローカルトランザクション処理中に強制終了したメッセージは、ローカルトランザクションのタイムアウト時間に達した後、受信できます。

ワークユニットを[停止(同期停止)]で停止してください。
ワークユニットを強制終了する場合は、イベントサービスおよびイベントチャネルのローカルトランザクションのタイムアウト時間を確認し、タイムアウト時間に達した後、ワークユニットを再起動してください。(注1)

Message-driven Beanを運用した場合、エラーメッセージ“od10965”が出力される。

イベントチャネルの最大接続数の設定値に、実際に運用中のサプライヤおよびコンシューマの合計値より小さい値が設定されています。

サプライヤおよびコンシューマが正しい運用状態であるかを確認してください。
正しい運用状態である場合、イベントチャネルの最大接続数の設定値を確認してください。(注2)
最大接続数の設定値が実際に運用中のサプライヤおよびコンシューマの合計値より少ない場合は、最大接続数の値を増加してイベントチャネルを再作成してください。

JMS運用コマンドを使用して作成したDestination定義がInterstage管理コンソール上に表示されない。

他サーバのイベントチャネルに関連付けたDestinationを定義しました。

管理対象サーバのバージョンが8.0以前の場合、他サーバのイベントチャネルに関連付けたDestination定義は、Interstage管理コンソール上に表示されません。jmsinfodstコマンドを使用してDestination定義を確認してください。

イベントチャネルのメッセージ蓄積可能なデータ数の上限値を超過した場合、最初に格納されたメッセージが受信できない。

イベントチャネルのQosプロパティ項目“DiscardPolicy”が省略時の“FifoOrder”となっています。詳細については、“アプリケーション作成ガイド(イベントサービス編)”の“基礎知識”−“ノーティフィケーションサービスのプロパティ”−“Qosプロパティ”を参照してください。

Sender/Publishアプリケーションを実行する場合は、“-Dcom.fujitsu.interstage.jms.queue_max_err=yes”を指定して実行してください。

java.lang.ClassCastExceptionが発生する。

Interstage JMSで使用できないDestinationが指定されました。

アプリケーションにおいて、指定したDestinationに誤りがないかを確認してください。Destinationには、以下のいずれかの値を設定してください。

  • Interstageが提供するJNDIサービスプロバイダのlookupで取得したDestination
  • createQueue、createTopic、createTemporaryQueueまたはcreateTemporaryTopicメソッドで作成されたDestination

java.lang.ArrayIndexOutOfBoundsExceptionが発生する。

setJMSCorrelationIDAsBytesメソッドに指定された値に誤りがあります。

アプリケーションにおいて、setJMSCorrelationIDAsBytesメソッドに指定された値に誤りがないかを確認してください。
setJMSCorrelationIDAsBytesメソッドのパラメタ“byte[] correlationID”には、文字列に復号化されるバイトを指定してください。

注1)ローカルトランザクションのタイムアウト時間は、以下を使用して確認してください。

注2)イベントチャネルの最大接続数は、以下を使用して確認してください。


目次 索引 前ページ次ページ

Copyright 2008 FUJITSU LIMITED