jBroker MQ 2.1

よくある質問

目次

このFAQは、次の4つのセクションに分かれています。

これらの各セクションに対してよくある質問のリストは、次のとおりです。

インストール

異なるjvmはどのように使用できますか?
システムには何がインストールされますか?
製品にはどのようなツールが用意されていますか?
JDBCドライバがCLASSPATHにないため(またはその他の問題のため)、インストール中にデータベース作成が失敗しました。 どうすればよいのですか?
インストールの際に、jBroker ORBをJava 2拡張として誤ってインストールしてしまいました。 これはどのように削除しますか?
コマンドラインからjBroker MQをインストールできますか?
jBroker MQはシステムからどのようにアンインストールしますか?

使用を開始する前の準備

「jmqserv」を実行すると、「DB not created or unavailable...」というメッセージが表示されます。
「jmqserv」を実行すると、「detected jBroker ORB version 3.1; jBroker MQ requires ORB version 4.0 or higher ...」というメッセージが表示されます。
「jmqserv」を実行すると、「java.sql.SQLException」というメッセージが表示され、その後いくつかのエラーメッセージが出力されます。
「jmqserv」または「dbinit」を実行すると、「Missing XX in properties file」というメッセージが出力されます。ここで、XXは、「driver name」、「password」、「username」、「jdbcURL」、「min pool size」、または「max pool size」のいずれかです。
「jmqserv」、「jmqrun」、または「dbinit」を実行すると、「Exception in thread "main" java.lang.NoClassDefFoundError: com/sssw/jbroker/util/Messages」というメッセージが出力されます。
「jmqserv」、「jmqrun」、または「dbinit」を実行すると、「Exception in thread "main" java.lang.NoClassDefFoundError: com/sssw/jbroker/api/security/SecurityException」というメッセージが出力されます。
「jmqrun」プログラムでは何が実行されますか?
ORBDefaultInitRefコマンドライン引数の「iioploc」は何ですか?
jBroker MQクライアントプログラムを実行すると、「Exception in thread "main" org.omg.CORBA.BAD_PARAM: unable to resolve initial reference: NameService minor code: 0 completed: No」というエラーメッセージを取得します。
「jmqrun」を使用して、jBroker MQサーバと同じホストにはないクライアントを実行できますか?
JMSクライアントプログラムを実行すると、「javax.naming.ConfigurationException: COS Name Service not registered with ORB under the name 'NameService' [Root exception is org.omg.CORBA.ORBPackage.InvalidName: unable to resolve initial reference: NameService]」という例外を取得します。
JMSクライアントプログラムを実行すると、「Exception in thread "main" javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial」という例外が発生します。
メモリを増設した状態では、jBroker MQをどのように実行しますか?
jBroker MQでは、クライアントとサーバ間でメッセージをどのように通信しますか?
クライアントは異なるホストからどのように実行しますか?
クライアントを実行すると、「javax.jms.JMSException: maximum connection count of developer version exceeded」という例外を取得します。
jBroker MQサーバはどのように停止しますか?
「jmqserv」を実行すると、「Socket bind exception: Address already in use.」というエラーメッセージを取得します。
複数のjBroker MQサーバを同じマシンで実行できますか?
複数のjBroker MQサーバでは同じデータベースを共有できますか?

高度なメッセージング

JMSクライアントアプリケーションのスレッド数が増え続けています。 どのようになる可能性がありますか?
マルチホームホストがあります。 jBroker MQサーバは特定のアダプタにどのようにバインドしますか?
クライアントアプリケーションを実行するときに接続時フェイルオーバが実行されないのはなぜですか?
jBroker MQクラスタの機能を要約してもらえますか?
クラスタリングによって、Pub/Sub (パブリッシュ/サブスクライブ)メッセージングはどのような影響を受けますか?
クラスタリングによって、P2P (ポイントツーポイント)メッセージングはどのような影響を受けますか?
クラスタを使用してメッセージを送信するときに時間がかかることがあるのはなぜですか?
クラスタ内のブローカの1つをシャットダウンするときに生成側アプリケーションでフェイルオーバが実行されません。 なぜですか?
クラスタリングによって、メッセージの順序はどのような影響を受けますか?
生成側障害対策に制限はありますか?

Java Message Service

メッセージの順序に関してJMSで保証していることは何ですか?
JMSを使用してXMLドキュメントを送信できますか?
特定のメッセージを確認できますか?
トピックのメッセージを参照できますか?
セレクタはどのように機能しますか?
(RMIを使用して実行する場合のように) JMSを使用して同期リクエストをシミュレートできますか?
JMSに関するその他のFAQはありますか?

インストール

質問:

異なるjvmはどのように使用できますか?

回答:

まず、jBroker MQと、使用するデータベースが、両方とも特定のjvmと機能することを確認してください。 「jmqserv」コマンドではPATH環境変数にある「java」プログラムを単に使用するため、新しいjvmを指すようにパスを最初に更新する必要があります。

jBroker MQはjBroker ORBに依存しているため、ORBが見つかるようにする必要もあります。 以前使用していたjvmの拡張(これはデフォルトです)としてjBroker ORBをインストールした場合は、次の2つの選択肢があります。

  • jBroker ORBをこれから使用する新しいjvmの拡張としてインストールする。

  • CLASSPATH環境変数に「jbroker-rt.jar」ファイルを含める。 jBroker ORBが拡張としてインストールされている場合、このファイルは、javaインストールディレクトリ(JAVA_HOME)の下のjre/lib/extディレクトリにあります。 また、jBroker共有ライブラリを使用できるようにする必要もあります。

    • Windowsの場合: %JAVA_HOME%\jre\lib\ext\x86PATH環境変数に含めます。 これにより、Windowsでは、「jbroker12.dll」ファイルにアクセスできるようになります。

    • Solarisの場合: $JAVA_HOME\jre\lib\ext\sparcLD_LIBRARY_PATH環境変数に含め、「libjbroker12.so」を使用できるようにします。

    • Linuxの場合: $JAVA_HOME\jre\lib\ext\linux-rhLD_LIBRARY_PATH環境変数に含め、「libjbroker12.so」を使用できるようにします。

    • HP-UXの場合: $JAVA_HOME\jre\lib\ext\hp-uxSHLIB_PATH環境変数に含め、「libjbroker12.sl」を使用できるようにします。

    • AIXの場合: $JAVA_HOME\jre\lib\ext\aixLIBPATH環境変数に含め、「libjbroker12.a」を使用できるようにします。

    • Netwareの場合: %JAVA_HOME%\jre\lib\ext\netwarePATH環境変数に含めます。 これにより、Netwareでは、「jbroker12.nlm」ファイルにアクセスできるようになります。

jBroker ORBがJava拡張としてインストールされている場合、jre/lib/extディレクトリの下のjarおよび共有ライブラリは、「java」プログラムの起動時に自動的に使用可能になります。 jBroker ORBがJava 2拡張としてインストールされていない場合、共有ライブラリおよびjbroker-rt.jarファイルは、jBroker MQのlibディレクトリにあります。


質問:

システムには何がインストールされますか?

回答:

jBroker MQインストールでは、jBroker MQのバイナリ、ライブラリ、ドキュメント、およびサンプルプログラムを、インストール中に指定したディレクトリに常にインストールします。 jBroker MQはjBroker ORBに依存しているため、インストールされていない場合はjBroker ORBもインストールされます。 デフォルトにより、jBroker ORBは、Java拡張としてインストールされます。 Javaホームディレクトリへの書き込み許可がない場合、インストーラによってjBroker ORBがjBroker MQとともにインストールされます。

質問:

製品にはどのようなツールが用意されていますか?

回答:

jBroker MQには、サーバ管理用のツールがいくつも付属しています。 詳細については、コンソールのマニュアルおよびツールのmanページを参照してください。

質問:

JDBCドライバがCLASSPATHにないため(またはその他の問題のため)、インストール中にデータベース作成が失敗しました。 どうすればよいのですか?

回答:

インストール後に、jBroker MQデータベーステーブルを作成できます。 jBroker MQのlibディレクトリにあるmsgsvc.propertiesファイルをデータベース設定に一致するように単に編集し、「dbinit -create」を実行してください。 詳細については、dbinitプログラムのmanページを参照してください。

質問:

インストールの際に、jBroker ORBをJava 2拡張として誤ってインストールしてしまいました。 これはどのように削除しますか?

回答:

Java 2ランタイム環境のjre/lib/extディレクトリを検索してください。 「jbroker-rt.jar」ファイルおよび「security.properties」ファイルを移動する必要があります。 プラットフォームに対しては、次のことを実行する必要もあります。

  • Solarisの場合: 「libjbroker12.so」をsparcディレクトリから移動する。
  • Linuxの場合: 「libjbroker12.so」をlinux-rhディレクトリから移動する。
  • HP-UXの場合: 「libjbroker12.sl」をhp-uxディレクトリから移動する。
  • AIXの場合: 「libjbroker12.a」をaixディレクトリから移動する。
  • Windowsの場合: 「jbroker12.dll」をx86ディレクトリから移動する。
  • Netwareの場合: 「jbroker12.nlm」をnetwareディレクトリから移動する。

これらのファイルは、jBroker MQで検出できる別の場所(たとえば、jBroker MQのlibディレクトリ)に移動する必要があります。 その後、次のように環境変数を更新する必要があります。

  • Solaris/Linuxの場合、「libjbroker12.so」が常駐するディレクトリを含むようにLD_LIBRARY_PATHパスを設定する必要があります。 「jbroker-rt.jar」ファイルおよび「security.properties」ファイルは、jBroker MQのlibディレクトリにある場合、jBroker MQバイナリによって自動的に取得されます。 これらのファイルが異なるディレクトリにある場合は、「security.properties」ファイルのあるディレクトリと「jbroker-rt.jar」を両方とも含むようにCLASSPATHを更新する必要があります。

  • HP-UXの場合、「libjbroker12.sl」が常駐するディレクトリを含むようにSHLIB_PATHを設定する必要があります。 「jbroker-rt.jar」ファイルおよび「security.properties」ファイルは、jBroker MQのlibディレクトリにある場合、jBroker MQバイナリによって自動的に取得されます。 これらのファイルが異なるディレクトリにある場合は、「security.properties」ファイルのあるディレクトリと「jbroker-rt.jar」を両方とも含むようにCLASSPATHを更新する必要があります。

  • AIXの場合、「libjbroker12.a」が常駐するディレクトリを含むようにLIBPATHを設定する必要があります。 「jbroker-rt.jar」ファイルおよび「security.properties」ファイルは、jBroker MQのlibディレクトリにある場合、jBroker MQバイナリによって自動的に取得されます。 これらのファイルが異なるディレクトリにある場合は、「security.properties」ファイルのあるディレクトリと「jbroker-rt.jar」を両方とも含むようにCLASSPATHを更新する必要があります。

  • Windowsの場合、「jbroker12.dll」が常駐するディレクトリを含むようにPATHを設定する必要があります。 「jbroker-rt.jar」ファイルおよび「security.properties」ファイルは、jBroker MQのlibディレクトリにある場合、jBroker MQバイナリによって自動的に取得されます。 これらのファイルが異なるディレクトリにある場合は、「security.properties」ファイルのあるディレクトリと「jbroker-rt.jar」を両方とも含むようにCLASSPATHを更新する必要があります。

  • Netwareの場合、「jbroker12.nlm」が常駐するディレクトリを含むようにSEARCHを設定する必要があります。 「jbroker-rt.jar」ファイルおよび「security.properties」ファイルは、jBroker MQのlibディレクトリにある場合、jBroker MQバイナリによって自動的に取得されます。 これらのファイルが異なるディレクトリにある場合は、「security.properties」ファイルのあるディレクトリと「jbroker-rt.jar」を両方とも含むようにCLASSPATHを更新する必要があります。

質問:

コマンドラインからjBroker MQをインストールできますか?

回答:

はい。 次のように-silentフラグを使用してインストーラを実行できます。
   java -jar jbrokerMQ21.jar -silent
インストールディレクトリを変更し、データベースを作成して、jBroker ORBをJava 2拡張としてインストールする場合は、次のようなコマンドラインを使用できます。
   java -jar jbrokerMQ21.jar -silent \
       -W target.dir=/opt/jbrokerMQ21 \
       -W orb.extension=true \
       -W db.store=ASAnywhere \
       -W db.create=true \
       -W db.url=jdbc:sybase:Tds:localhost:2641/database \
       -W db.driver=com.sybase.jdbc2.jdbc.SybDriver \
       -W db.user=dba \
       -W db.password=sql \
       -W db.minPoolSize=10 \
       -W db.maxPoolSize=20 \
       -W db.classPath=/usr/local/jConnect-5_5/classes/jconn2.jar \
       -W server.name=broker1 \
       -W server.port=3456 \
       -W server.secure=true \
       -W server.log=/tmp/logs

質問:

jBroker MQはシステムからどのようにアンインストールしますか?

回答:

システムからjBroker MQをアンインストールする場合は、アンインストールツールを実行できます。 jBroker MQを最初にインストールした_uninstディレクトリのuninstall.jarファイルを単に指してください。
   java -jar _uninst/uninstall.jar

使用を開始する前の準備

質問:

「jmqserv」を実行すると、「DB not created or unavailable...」というメッセージが表示されます。

回答:

jBroker MQデータベースを作成していない可能性があります。 「dbinit -create」を実行してみてください。

質問:

「jmqserv」を実行すると、「detected jBroker ORB version 3.1; jBroker MQ requires ORB version 4.0 or higher ...」というメッセージが表示されます。

回答:

環境が、このバージョンのjBroker MQではサポートされていない以前のバージョンのjBroker ORBを指しています。 このような状況は、使用しているJava仮想マシンにORBがJava 2拡張としてインストールされている場合に発生することがあります。 拡張を削除またはアップグレードするか、あるいは新しいバージョンのORBを指すように環境を更新する必要があります。 JVM設定については、ここを参照してください。

質問:

「jmqserv」を実行すると、「java.sql.SQLException」というメッセージが表示され、その後いくつかのエラーメッセージが出力されます。

回答:

msgsvc.propertiesファイルのJDBCプロパティの1つが正しくない可能性があります。 URLで参照しているデータベースは存在しますか? 完全なスタックトレースを取得するために、「-J-DJMQDebug=true」フラグを使用して「dbinit」プログラムまたは「jmqserv」プログラムを実行してみてください。

質問:

「jmqserv」または「dbinit」を実行すると、「Missing XX in properties file」というメッセージが出力されます。ここで、XXは、「driver name」、「password」、「username」、「jdbcURL」、「min pool size」、または「max pool size」のいずれかです。

回答:

このような状況は、msgsvc.propertiesファイルにそのエントリがない場合に発生します。 サンプルのmsgsvc.propertiesファイルおよびドキュメントを参照してください。

質問:

「jmqserv」、「jmqrun」、または「dbinit」を実行すると、「Exception in thread "main" java.lang.NoClassDefFoundError: com/sssw/jbroker/util/Messages」というメッセージが出力されます。

回答:

このような状況は、jBroker ORBが見つからない場合に発生します。 使用しているjdkまたはjreのデフォルトのORBとしてjBroker ORBがインストールされていることを確認してください。 または、異なるjvmの使用方法に関する質問を参照してください。

質問:

「jmqserv」、「jmqrun」、または「dbinit」を実行すると、「Exception in thread "main" java.lang.NoClassDefFoundError: com/sssw/jbroker/api/security/SecurityException」というメッセージが出力されます。

回答:

このような状況は、jBroker ORBが見つからない場合に発生します。 使用しているjdkまたはjreのデフォルトのORBとしてjBroker ORBがインストールされていることを確認してください。 または、different jvmの使用方法に関する質問を参照してください。

質問:

「jmqrun」プログラムでは何が実行されますか?

回答:

このプログラムでは、コマンドラインでjBroker MQに適切なパラメータを使用してjvmを起動します。 これには、正しいCLASSPATHとさまざまなシステムプロパティの設定が含まれます。 「jmqrun」を実行することは、このコマンドラインでjavaを直接呼び出すのと同じです。
   java -DORBDefaultInitRef=iioploc://localhost:3506 \
      -Djava.naming.factory.object=com.sssw.jms.naming.JMQObjectFactory \
      -Djava.naming.factory.initial=com.sun.jndi.cosnaming.CNCtxFactory \
      -Dorg.omg.CORBA.ORBClass=com.sssw.jbroker.ORBLite \
      -Dorg.omg.CORBA.ORBSingletonClass=com.sssw.jbroker.orb.SingletonORB \
      -Djavax.rmi.CORBA.StubClass=com.sssw.jbroker.rmi.StubDelegate \
      -Djavax.rmi.CORBA.UtilClass=com.sssw.jbroker.rmi.UtilDelegate \
      -Djavax.rmi.CORBA.PortableRemoteObjectClass=com.sssw.jbroker.rmi.PortableRemoteObjectDelegate \
      -classpath <all .jar and .zip files in the jBroker MQ lib directory prepended to CLASSPATH>
      <class name> [parameters]
jBroker MQのポート情報は、msgsvc.propertiesファイルから取得されます。 2つのネーミングシステムプロパティは、CosNamingプロバイダを介してJNDIを使用するようクライアントプログラムに指示します。 残りのプロパティは、IIOP通信用にjBroker ORBがjBroker MQサーバによって使用されるようにします。 コマンドラインで-Jフラグを使用して、パラメータをjvmに渡すこともできます。 メモリを追加した状態でクライアントを実行する場合は、次を実行できます。
   jmqrun -J-Xmx250m <class name> [parameters]

質問:

ORBDefaultInitRefコマンドライン引数の「iioploc」は何ですか?

回答:

ORBDefaultInitRefに対して指定される引数は、iioplocがプロトコルを指定するURLです。 iioplocを使用すると、初期オブジェクトリファレンスを検索できます。 jBroker MQでは、これは、jBroker MQメッセージサーバの検索場所をクライアントプログラムに通知するために使用されます。

質問:

jBroker MQクライアントプログラムを実行すると、「Exception in thread "main" org.omg.CORBA.BAD_PARAM: unable to resolve initial reference: NameService minor code: 0 completed: No」というエラーメッセージを取得します。

回答:

この状況は、jBroker MQサーバが実行されていない場合に通常は発生します。 ORBDefaultInitRefコマンドライン引数を使用している場合は、jBroker MQサーバが指定のホストおよびポートで実行されていることを確認してください。

質問:

「jmqrun」を使用して、jBroker MQサーバと同じホストにはないクライアントを実行できますか?

回答:

はい。-Jフラグを使用して、jmqrunプログラムのデフォルトのパラメータを修正できます。
   jmqrun -J-DORBDefaultInitRef=iioploc://<hostname>:<port> <class name> [parameters]

質問:

JMSクライアントプログラムを実行すると、「javax.naming.ConfigurationException: COS Name Service not registered with ORB under the name 'NameService' [Root exception is org.omg.CORBA.ORBPackage.InvalidName: unable to resolve initial reference: NameService]」という例外を取得します。

回答:

jBroker MQサーバが実行されていない可能性があります。 このエラーは、インプロセスで実行されているネーミングサービスがjBroker MQサーバにあり、クライアントアプリケーションではこのネーミングサービスをjBroker MQサーバで検出することを予測しているために発生します。 jBroker MQサーバが確実に実行されていても、「-DORBDefaultInitRef=iioploc://host:port」をコマンドラインに置かなかった場合は、この状況が発生することがあります。 jBroker MQサーバがローカルホストのポート3506で実行されている場合は、「-DORBDefaultInitRef=iioploc://localhost:3506」をコマンドラインで指定する必要があります。

質問:

JMSクライアントプログラムを実行すると、「Exception in thread "main" javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial」という例外が発生します。

回答:

「-Djava.naming.factory.initial=com.sun.jndi.cosnaming.CNCtxFactory」をクライアントプログラムのコマンドラインに指定する必要があります。 これは、CORBAネーミングサービスを使用してJMS管理オブジェクトを検索するようJNDIに指示します。

質問:

メモリを増設した状態では、jBroker MQをどのように実行しますか?

回答:

-Jコマンドラインフラグを使用して、フラグをjvmに渡すことができます。 最大ヒープサイズを250MBに設定するには、次のようにjBroker MQを開始できます。
   jmqserv -J-Xmx250m

質問:

jBroker MQでは、クライアントとサーバ間でメッセージをどのように通信しますか?

回答:

jBroker MQサーバはjBroker ORBの上で実行されているため、IIOPが使用されます。 IIOPでは、TCP/IPプロトコルスタックを使用してメッセージを送信します。 IIOPは、スケーラビリティ、信頼性、および相互運用性を含むさまざまな利点のある標準ベースのプロトコルです。

質問:

クライアントは異なるホストからどのように実行しますか?

回答:

クライアントを実行するには、そのクライアントにjBroker MQライブラリが必要です。 最も簡単な方法は、一般的に、jBroker MQをクライアントマシンにインストールすることです。 次に、ORBDefaultInitRefコマンドラインパラメータの「localhost」という部分を、jBroker MQサーバが実行されているホストで置き換えてください。 jmqrunは、依然として使用することができます。

質問:

クライアントを実行すると、「javax.jms.JMSException: maximum connection count of developer version exceeded」という例外を取得します。

回答:

開発者バージョンで許可されている数よりも多い接続を作成しようとしています。 接続をさらに作成するには、jBroker MQライセンスを購入する必要があります。

質問:

jBroker MQサーバはどのように停止しますか?

回答:

「jmqserv -stop」を別のウィンドウから単に呼び出してください。

質問:

「jmqserv」を実行すると、「Socket bind exception: Address already in use.」というエラーメッセージを取得します。

回答:

これは、別のjBroker MQサーバがそのポートですでに実行されていることを意味しています。 最初に、現在実行しているブローカを停止するか、新しいブローカを異なるポートで開始する必要があります。

質問:

複数のjBroker MQサーバを同じマシンで実行できますか?

回答:

はい。ただし、データベースへのアクセス時にサーバが競合しないように注意する必要があります。 msgsvc.propertiesファイルには、特定のjBroker MQサーバを識別する「msgsvc.name」というエントリがあります。 複数のサーバには、データベース競合を避けるために異なる名前を付ける必要があります。 異なるメッセージサーバ名に対しては、それぞれ「dbinit -create」を実行し、その名前でjBroker MQサーバのテーブルを作成する必要があります。 また、各サーバが異なるポートで実行されるようにする必要もあります。 これを行う最も簡単な方法は、次のように、2つの個々のプロパティファイルを保持して、2つのブローカを開始することです。
   jmqserv -props b1.properties
   jmqserv -props b2.properties

質問:

複数のjBroker MQサーバでは同じデータベースを共有できますか?

回答:

はい。ただし、同じテーブルを共有することはできません。 各サーバに対しては、サーバに異なる名前を付けることによって、同じデータベースに異なるテーブルを作成できます。 詳細については、このエントリを参照してください。

高度なメッセージング

質問:

JMSクライアントアプリケーションのスレッド数が増え続けています。 どのようになる可能性がありますか?

回答:

jBroker MQクライアントライブラリの観点から見て最も可能性の高い原因は、InitialContextオブジェクトの作成です。 JNDI/CosNamingドライバの構造化形式のため、InitialContextオブジェクトをインスタンス化するたびに新しいORBが作成されます。 したがって、各クライアントアプリケーションでは、初期ネーミングコンテキストを1つだけ作成する必要があります。

質問:

マルチホームホストがあります。 jBroker MQサーバは特定のアダプタにどのようにバインドしますか?

回答:

jBroker MQはjBroker ORBに基づいたCORBAサーバであるため、ORBランタイムプロパティのORBHostを使用できます。 次のように、単にサーバを実行してください。
   jmqserv -J-DORBHost=hostname
詳細については、jBroker ORBのドキュメントを参照してください。

質問:

クライアントアプリケーションを実行するときに接続時フェイルオーバが実行されないのはなぜですか?

回答:

これは、ORBDefaultInitRefプロパティを正しく指定しなかったことが原因の可能性があります。 このプロパティでは、jBroker MQネームサービスの場所が判断されます。また、このプロパティは、JNDI検索文字列に一致する必要があります。 たとえば、検索文字列の「topic://jms1:3506,jms2:3506/connectionFactory」が含まれている接続ファクトリを使用している場合は、次のようにORBDefaultInitRefを使用する必要があります。
   jmqrun -J-DORBDefaultInitRef=iioploc://jms1:3506,jms2:3506 Client

質問:

jBroker MQクラスタの機能を要約していただけますか?

回答:

主な機能は次のとおりです。
  • 宛先情報、ユーザ、グループ、およびACLを、クラスタ内のすべてのブローカで同期化する。 つまり、利用可能なブローカを使用して、宛先および認証を取得できます。
  • 生成側アプリケーションでは、使用可能なブローカに送信できる。 メッセージは、jBroker MQクラスタによって適切な宛先に自動的にルーティングされます。
  • 生成側アプリケーションは耐障害性である。 生成側で特定のブローカに送信できない場合、jBroker MQでは、別のブローカにメッセージを透過的および自動的に送信します。
  • 生成側アプリケーションでは、任意のブローカから受信できる。 ローカルブローカにないキューにキュー受信者が接続すると、プロキシにより、メッセージはアプリケーションブローカから受信者に転送されます。
  • 生成側アプリケーションおよびコンシューマアプリケーションでは、両方とも接続時フェイルオーバを実行できる。 特定のブローカが使用できない場合、アプリケーションは、使用可能な別のブローカに自動的に接続されます。

質問:

クラスタリングによって、Pub/Sub (パブリッシュ/サブスクライブ)メッセージングはどのような影響を受けますか?

回答:

トピックは、jBroker MQクラスタ内のすべてのブローカで自動的に使用可能になります。 トピックメッセージは、ブローカ間で転送されます。つまり、発行者は任意のブローカにメッセージを公開でき、加入者は任意のブローカからメッセージを受信できます。

質問:

クラスタリングによって、P2P (ポイントツーポイント)メッセージングはどのような影響を受けますか?

回答:

キューは、各キューメッセージを1人の受信者だけが取得できるように、ブローカにバインドされます。 クライアントアプリケーションでは、「queue@broker」JNDI検索文字列を使用することによって、特定のキューに接続できます。 キュー受信者は、プロキシを使用して、キューがないブローカからメッセージを受信できます。

質問:

クラスタを使用してメッセージを送信するときに時間がかかることがあるのはなぜですか?

回答:

このような状況は、クラスタ内のサーバを起動した直後に発生することがあります。 クラスタ内のブローカでは一定の間隔で互いにpingし、クラスタブローカが相互接続されるまでメッセージは流されません。

質問:

クラスタ内のブローカの1つをシャットダウンするときに生成側アプリケーションでフェイルオーバが実行されません。 なぜですか?

回答:

理由としては、使用している接続にコンシューマもあることが考えられます。 フェイルオーバは、生成側アプリケーションに対してのみサポートされています。 接続により作成されたセッションにコンシューマがある場合(または接続に接続コンシューマがある場合)、フェイルオーバは発生しません。

質問:

クラスタリングによって、メッセージの順序はどのような影響を受けますか?

回答:

順序は、待ち時間およびブローカダウンタイムが原因によるメッセージ遅延のために影響を受けることがあります。 たとえば、同じトピックに対して2つの加入者が存在しているが、それぞれが2つの異なるブローカに接続されている場合、複数の発行者が両方のブローカにメッセージを送信すると、加入者がメッセージを受信する順序は異なる可能性があります。

質問:

生成側障害対策に制限はありますか?

回答:

接続にはコンシューマを含むことはできないという制限の他に、分散トランザクションではフェイルオーバを実行することもできません。 この制限は、あるブローカでトランザクションを準備できないために別のブローカにコミットする場合に適用されます。 さらに、一時宛先でもフェイルオーバを実行することできません。これは、クラスタで複製されないためです。

Java Message Service

質問:

メッセージの順序に関してJMSで保証していることは何ですか?

回答:

JMSの仕様に従うと、優先度のより高いメッセージが優先されます。 つまり、2つのメッセージを送信し、後に送信したメッセージの優先度の方が高い場合、JMSでは、後のメッセージを最初に配信します。 優先度内では、JMSの仕様により、メッセージはセッション範囲内で順序付けられなければなりません。 1つまたは複数のメッセージ生成側が同じセッションを使用してメッセージを送信する場合、コンシューマは、これらのメッセージを、生成側のセッションで受信された順序で受信します。 つまり、FIFOの順序付けは、セッション内で施行されます。 異なるセッションまたはプロセスで実行されている複数のサプライヤからのメッセージは、JMSサーバによって受信された場合に従って順序付けられます。

質問:

JMSを使用してXMLドキュメントを送信できますか?

回答:

はい。setTextメソッドを使用して、XMLドキュメントを単にTextMessageに挿入してください。 受信側では、MessageTextMessage型にキャストし、getTextメソッドを呼び出すことによって、XMLドキュメントを抽出できます。

質問:

特定のメッセージを確認できますか?

回答:

はい。ただし、jBroker MQ専用のAPIを使用する必要があります。 JMQSessionでは、INDIVIDUAL_ACKNOWLEDGEモードが定義され、Messageacknowledgeメソッドによって現在のメッセージだけが確認されるようになります。 標準APIでは、これは不可能です。 CLIENT_ACKNOWLEDGEを使用する場合でも、Messageacknowledgeメソッドは、現在のメッセージだけでなく、acknowledgeが最後に呼び出されてから受信されたメッセージもすべて確認します。

質問:

トピックのメッセージを参照できますか?

回答:

トピックでは将来の加入者に対するメッセージを保持しないため、通常のトピックブラウザは使用できません。 トピック加入者を作成し、接続した時点からトピックのメッセージをすべて表示することは可能です。 また、永続的加入者を作成して、この永続的加入者が接続するたびに、最後に接続されていた時点から受信したメッセージをすべて参照することもできます。 このようなブラウザでトピックメッセージを複数回参照できるようにする場合は、CLIENT_ACKNOWLEDGEを使用して、任意のメッセージを確認しないようにする必要があります。 このような永続的加入者はメッセージを永久的に累積するため、最終的にメッセージを期限切れにするか、または確認するメカニズムが必要になります。

質問:

セレクタはどのように機能しますか?

回答:

Pub/Sub (パブリッシュ/サブスクライブ)では、セレクタはフィルタのように機能します。つまり、メッセージが加入者セレクタに一致しない場合、そのメッセージは、その加入者に関する限り存在しません。 これは、加入者が接続する前にメッセージがトピックによって受信された場合のようになります。 P2Pでは、特定の受信者が表示できるメッセージ、つまり、受信者が利用するビューだけがセレクタによって制限されます。 受信者は、別の受信者セレクタに一致しないメッセージでも取得できます。

質問:

(RMIを使用して実行する場合のように) JMSを使用して同期リクエストをシミュレートできますか?

回答:

はい。TopicRequestorまたはQueueRequestorを使用できます。 リクエスタは、ReplyToフィールドが新しく作成された一時宛先に設定されている通常の宛先にJMSメッセージを送信するjavax.jmsパッケージの具体的なクラスです。 アプリケーション開発者は、ReplyTo宛先にメッセージを送信し直す必要のあるコンシューマを実装します。 リクエスタが一時トピックに返信を受信すると、この返信は、リクエスタのユーザに戻されます。

質問:

JMSに関するその他のFAQはありますか?

回答:

はい。次のいずれかを参照できます。 また、jBroker MQに関する記事やディスカッションについては、Novell DevCenterにアクセスしてください。

Copyright (C) 1998-2003, Novell, Inc. All rights reserved.