AcknowledgeMode |
メッセージをコンシュームし、メッセージドリブンBeanのメッセージ・リスナー・メソッド(JMSメッセージ・リスナーのonMessage メソッドなど)をコールするリスナー・スレッドがメッセージの配信を確認する方法。
有効な値は次のとおりです。
Auto-acknowledge (デフォルト): リスナー・スレッドは、メッセージがMDBに受信されると同時に確認応答を送信します。
Dups-ok-acknowledge : リスナー・スレッドは、確認応答を遅延送信します。これにより、パフォーマンスが向上する可能性があります。MDBでは、確認応答が実際に送信されるまでメッセージを重複して受信できます。このオプションを選択する場合、MDBでは重複メッセージを処理できる必要があります。
|
ClientId |
リスナー・スレッドがメッセージドリブンBeanのかわりに取得した接続に設定するString 名。
デフォルトは名前なしです。 |
EndpointFailureRetryInterval |
リスナー・スレッドの数が0(ゼロ)に低下するなんらかの障害の発生後に、OC4Jが新規リスナー・スレッドを開始してJMSプロバイダへの再接続を試行するまでに待機するミリ秒数。
リスナー・スレッドは、JMSプロバイダの障害時に自動的に終了します。たとえば、MessageConsumer のメソッドreceive をコールするリスナー・スレッドに例外が返された場合などです。持続的なネットワーク障害やJMSサーバーの停止などを原因としてエンドポイントの実行中にすべてのリスナー・スレッドが終了すると、MDBではメッセージを受信できません。この場合、Oracle JMSコネクタは、EndpointFailureRetryInterval ミリ秒ごとに新規リスナー・スレッドを開始してJMSプロバイダへの再接続を試行します。この処理は、成功するか、エンドポイントが停止するまで続きます。リスナー・スレッドの作成に成功すると、通常のリスナー・スレッド管理が再開します(「ReceiverThreads」、「ListenerThreadMaxIdleDuration」および「ListenerThreadMinBusyDuration」を参照)。
接続障害リカバリの結果として、次の点を考慮してください。
- メッセージの順序: 接続障害からのリカバリでは、新規JMSセッションを作成する必要がありますが、JMSメッセージの順序の保証は単一のセッション内に受信されたメッセージにのみ適用されるため、再接続後に受信されたメッセージの順序は、再接続前に受信されたメッセージに対して不適切となる可能性があります。
- メッセージの紛失: エンドポイントが非永続サブスクライバの場合、メッセージは失われるか、重複する可能性があります。この問題は、キューを使用している場合、または永続サブスクライバを備えたトピックを使用している場合は発生しません。
これらの問題が発生するかどうかは、使用しているJMSプロバイダの特定の動作によって決まります。
デフォルトは60000ミリ秒です。 |
ExceptionQueueName |
例外キューとして使用するjavax.jms.Queue オブジェクトのJNDI名。
このプロパティは、UseExceptionQueueがtrue の場合は必須で、false の場合は無視されます。 |
IncludeBodiesInExceptionQueue |
例外キューに送信されるメッセージにメッセージ・ボディを含めるかどうかを指定します。
有効な値は次のとおりです。
true (デフォルト): OC4Jは、例外キューに送信されるメッセージにメッセージ・ボディを含めます。
false : OC4Jは、例外キューに送信されるメッセージにメッセージ・ボディを含めません。通常の操作中に多くのメッセージが例外キューに送信される状況で、そのメッセージ・ボディが例外キューに不要の場合、このプロパティをfalseに設定するとパフォーマンスが向上する可能性があります。
次の場合にはこのプロパティは適用されません。
- UseExceptionQueueが
false の場合。
- 元のメッセージにメッセージ・ボディが含まれない場合、例外キューに送信されるメッセージにもメッセージ・ボディは含まれません。
- なんらかの理由で元のメッセージのコピーを作成できない場合、かわりに元のメッセージが例外キューに送信されることがあります。この場合、メッセージ・ボディが例外キューに送信される可能性があります。
|
ListenerThreadMaxIdleDuration |
メッセージを受信していないリスナー・スレッドをOC4Jで維持するミリ秒数。エンドポイントがアクティブである場合、少なくとも1つのリスナー・スレッドは維持されます。
デフォルトは300000ミリ秒です。 |
ListenerThreadMaxPollInterval |
Oracle JMSコネクタの適用可能なポーリング間隔アルゴリズムのポーリング間隔に対する上限値(ミリ秒単位)。
Oracle JMSコネクタでは、適用可能なアルゴリズムを使用して実際のポーリング間隔を決定します。アクティブな期間中は、短いポーリング間隔(高頻度のポーリング)を使用し、非アクティブな期間中は、このプロパティを超えない範囲で長いポーリング間隔(低頻度のポーリング)を使用します。
リスナー・スレッドは、処理を待機中のメッセージが存在するかどうかを確認するためにポーリングを行います。このポーリングの実行頻度がより短くなると、所定のリスナー・スレッドは新規メッセージに(平均して)より高速に応答できます。ただし、高頻度のポーリングには、オーバーヘッドが伴います。リソース・プロバイダでは、ポーリングのたびに受信リクエストを処理する必要があります。
デフォルトは5000ミリ秒です。 |
ListenerThreadMinBusyDuration |
過去のListenerThreadMinBusyDuration ミリ秒間の任意の時点でリスナー・スレッドがメッセージを受信してアイドル状態(新規メッセージの到着を待機する状態)ではなくなり、このエンドポイントに対応するリスナー・スレッドの現在の数がReceiverThreads未満の場合、OC4Jは可能であれば追加のリスナー・スレッドを作成します。
デフォルトは10000ミリ秒です。 |
LogLevel |
Oracle JMSコネクタのログ・メッセージの詳細レベルを決定します。主にOracle JMSコネクタ自体のデバッグを目的としていますが、これらのメッセージは、デバッグ問題がOracle JMSコネクタの使用方法に関連している場合にも役立つ可能性があります。このプロパティは、デバッグ目的で一時的に設定することをお薦めします。本番用のコードには設定しないでください。(特定のログ・メッセージとログ・レベルは、Oracle JMSコネクタの将来のバージョンで追加、削除または変更される可能性があります。)
有効な値は次のとおりです。
ConnectionPool : 接続プール関連のメッセージのみを記録します。
ConnectionOps : 接続関連のメッセージのみを記録します。
TransactionalOps : トランザクション関連のメッセージのみを記録します。
ListenerThreads : リスナー・スレッド関連のメッセージのみを記録します。
INFO : ユーザー名を含め、各サーバー・セッションのログインおよびログアウトを記録します。セッションの取得後に、詳細な情報が記録されます。
CONFIG : ログイン、JDBC接続およびデータベース情報のみを記録します。
FINE : SQLを記録します。
FINER : WARNINGと同様です。スタック・トレースが含まれます。
FINEST : 低レベルな追加情報が含まれます。
SEVERE : TopLinkが続行不可能であることを示す例外と、ログイン中に生成されるすべての例外を記録します。これには、スタック・トレースが含まれます。
WARNING : SEVEREレベルで記録されないすべての例外を含め、TopLinkを停止させることのない例外を記録します。これには、スタック・トレースは含まれません。
OFF : ロギングは無効です。
|
MaxDeliveryCnt |
リスナー・スレッドがメッセージドリブンBeanへのメッセージ配信を試行する最大回数。0 (ゼロ)の値を指定すると、メッセージは破棄されません。
MaxDeliveryCnt を超える値が設定されたJMSXDeliveryCount プロパティがメッセージに含まれる場合、そのメッセージは破棄されます。つまり、リスナー・スレッドは、メッセージドリブンBeanのメッセージ・リスナー・メソッド(JMSメッセージ・リスナーのonMessage メソッドなど)をコールしません。
例外キューが有効の場合(「UseExceptionQueue」を参照)、メッセージのコピーが例外キューに送信されます。
0 (ゼロ)の値を使用する場合は注意してください。メッセージを破棄しないようにMaxDeliveryCnt を0 に設定した状態で、メッセージドリブンBeanが特定のメッセージに常に例外をスローして応答する場合、同じメッセージが何度も再配信されるためメッセージドリブンBeanはその処理を無制限に失敗し続ける可能性があります。
デフォルト値は5 です。 |
MessageSelector |
MDBが受信する必要のあるメッセージのタイプに一致するメッセージ・プロパティのString セレクタ式。式に一致しないメッセージはフィルタされます(MDBに配信されません)。
これは、リスナー・スレッドで作成されたJMSセッション用のmessageSelector として使用されます。
デフォルトはフィルタなしです。 |
ReceiverThreads |
このエンドポイントに作成するリスナー・スレッドの最大数。
キューの場合、2つ以上のスレッドを使用すると、メッセージをコンシュームする速度が向上する可能性があります。
トピックの場合、この値は常に1 に設定する必要があります。
各リスナー・スレッドは、独自のセッションとトピック・サブスクライバを取得します。永続サブスクライバの場合、同じサブスクリプション名で複数のサブスクライバを保持するとエラーが発生します。非永続サブスクライバの場合、複数のスレッドを保持するサブスクライバがあっても効果はありません。スレッドが増加するとサブスクライバが増加し、各メッセージのコピーも増加するためです。
「ListenerThreadMinBusyDuration」も参照してください。
デフォルトは1 です。 |
ResPassword |
OC4Jがリソース・プロバイダに渡すStringパスワード。ResPassword プロパティでは、標準のパスワード・インダイレクション・オプションがサポートされます(たとえば、->joeuser を使用してjoeuser のパスワードを表すことができます)。
設定すると、その値はOC4Jによりパスワード引数としてcreate*Connection メソッドに渡されます。
ResUserまたはResPassword のいずれか1つのみが設定されている場合、OC4Jでは未設定のプロパティに対してNULLが渡されます。
ResUserもResPassword も設定されていない場合、このMDBのインバウンド・メッセージ処理と例外キュー処理(「UseExceptionQueue」を参照)に使用される接続が、引数なしのcreate*Connection メソッドを使用して作成されます。
デフォルトはnull です。 |
ResUser |
OC4Jがリソース・プロバイダに渡すString ユーザー名。
設定すると、その値はOC4Jによりuser 引数としてcreate*Connection メソッドに渡されます。
ResUser またはResPasswordのいずれか1つのみが設定されている場合、OC4Jでは未設定のプロパティに対してNULLが渡されます。
ResUser もResPasswordも設定されていない場合、このMDBのインバウンド・メッセージ処理と例外キュー処理(「UseExceptionQueue」を参照)に使用される接続が、引数なしのcreate*Connection メソッドを使用して作成されます。
デフォルトはnull です。 |
SubscriptionDurability |
リスナー・スレッドに使用されるトピック・コンシューマの永続性を決定します。これは、トピックにのみ適用されます(キューにはこのプロパティを設定しません)。
有効な値は次のとおりです。
Durable : メッセージは、OC4Jが稼働していない場合でも失われません。信頼性の高いアプリケーションでは、通常、非永続的なトピック・サブスクリプションではなく永続的なトピック・サブスクリプションを使用します。このプロパティをDurable に設定する場合(およびDestinationTypeがjavax.jms.Topic またはjavax.jms.Destination の場合)、SubscriptionNameプロパティが必要です。
NonDurable (デフォルト): OC4JでメッセージドリブンBeanがメッセージに対応することが保証されるのは、OC4Jが稼働中である場合にかぎります。OC4Jが一定の期間停止すると、メッセージは失われる可能性があります。
|
SubscriptionName |
永続サブスクライバの作成時にリスナー・スレッドが使用するString 名。特定のJMSサーバーでは、(1つ以下のリスナー・スレッドを保持する必要のある)最大1つのMDBに特定のサブスクリプション名を割り当てる必要があります。
SubscriptionDurabilityがDurable の場合(およびDestinationTypeがjavax.jms.Topic またはjavax.jms.Destination の場合)、このプロパティは必須です。他のすべての場合、このプロパティは無視されます。 |
TransactionTimeout |
現在のトランザクションを終了する前に、Oracle JMSコネクタがメッセージの到着を待機する上限値(ミリ秒単位)。
OC4Jトランザクション・マネージャは、トランザクションの継続時間を制限します(transaction-manager.xml のtransaction-timeout を参照)。特に問題がないかぎり、メッセージドリブンBeanのメッセージ・リスナー・メソッド(JMSメッセージ・リスナーのonMessage メソッドなど)へのコール中は、トランザクション・マネージャがトランザクションのタイムアウトを行わないようこのプロパティを設定します。たとえば、トランザクション・マネージャのタイムアウトが30秒に設定され、通常の状態でonMessage ルーチンが10秒を超えない場合、TransactionTimeout を20秒(20000ミリ秒)に設定できます。
デフォルトは300000ミリ秒です。 |
UseExceptionQueue |
メッセージドリブンBeanのメッセージ・リスナー・メソッド(JMSメッセージ・リスナーのonMessage メソッドなど)が例外をスローしたため、またはリスナー・スレッドがMaxDeliveryCntしきい値を超えたために配信できなくなったメッセージをOC4Jで処理する方法を決定します。
有効な値は次のとおりです。
デフォルトはfalse です。
UseExceptionQueue がtrue に設定されている場合、OC4Jは配信不能メッセージを次の手順で例外キューに送信します。
- 同じタイプの新規メッセージを作成します。
- 元のメッセージから新規メッセージにプロパティとボディをコピーします。
getJMS{Header} を通じて取得された各ヘッダーをGJRA_CopyOfJMS{Header} プロパティに割り当てることで、元のヘッダーをコピーのプロパティに変換します。javax.jms.Destination は無効なプロパティ・タイプのため、宛先ヘッダーは説明的なメッセージに変換されます。
このサービスは、JMSX* プロパティ(特にJMSXDeliveryCount プロパティ)には提供されません。
ヘッダーがコピーされると、例外キューへのメッセージ送信によりそのほとんどが失われる(リソース・プロバイダに上書きされる)ため、OC4Jはこの方法でヘッダーを変換します。
- メッセージが配信されなかった理由を示す
GJRA_DeliveryFailureReason という文字列プロパティを追加します。
- 配信障害の直前にメッセージドリブンBeanのメッセージ・リスナー・メソッドが例外を生成した場合、例外情報を含む
GJRA_onMessageExceptions という文字列プロパティを追加します。
- 新規メッセージを次のように検証します。
コピーおよび拡張プロセスに成功した場合、値true を含むGJRA_CopySuccessful というboolean プロパティが追加されます。
コピーまたは拡張プロセスの一部に失敗した場合でも、OC4Jは停止しません。残りの手順を完了するよう試みます。Bytes 、Map およびStream メッセージ・タイプでは、ボディの一部がコピーされ、残りはコピーされない可能性があります。この場合、値false を含むGJRA_CopySuccessful というboolean プロパティが追加されます。
- ConnectionFactoryJndiNameプロパティで指定されたコネクション・ファクトリを使用して、生成されたメッセージを例外キューに送信します。
例外キューへのメッセージの送信は、1回のみ試行されます。この試行に失敗すると、メッセージは例外キューに配置されることなく破棄されます。
OC4Jでは、ConnectionFactoryJndiNameプロパティで指定されたコネクション・ファクトリを(第1宛先以外にも)使用して例外キューにメッセージを送信するため、(DestinationNameプロパティで指定された)第1宛先がトピックの場合、コネクション・ファクトリはキューとトピックの両方に対応している必要があります(つまり、コネクション・ファクトリはjavax.jms.ConnectionFactory またはjavax.jms.XAConnectionFactory である必要があります)。
これらの手順に適用できるバリエーションは、「IncludeBodiesInExceptionQueue」を参照してください。 |