問題タブ [message-driven-bean]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - MDB を使用した WebSphere MQ でのサブスクライバーの許可
次のような MDB があります。
WebSphere MQ 7 でトピックを設定しました。MQ Explorer を使用すると、pub 操作と sub 操作の両方が問題ないようです。
WebSphere でリスナー ポートをセットアップしました。リスナー ポートは正常に起動できます。
アプリをデプロイして起動すると、MDB がメッセージを読み取れません。与えられた例外は次のとおりです。
リスナーポートは起動できますが、接続されたアプリケーションがそれを使用しようとするまでアクティブに接続しないと思われます。この時点では認証されていますが、許可されていません。
Q: WebSphere で構成された認証資格情報はどこにありますか? 自分が誰として認証されているのかわかりません。@ActivationConfigProperty
MDB に設定されているクライアント IDですか?
Q: MQ エクスプローラーの認証設定はどこにありますか? グループまたは個人に公開またはサブの権利を付与する方法がわかりません。現在、おそらくすべての人に対して、許可/許可するように設定されています。
events - weblogicMDBを使用したイベント駆動型プログラミング
私はイベントリスナーとして機能するアプリケーションを構築しており、受け取ったイベントに基づいて、特定のステップまたはワークフローを実行する必要があります。イベントを単一のキューに投稿し、MDBがイベントタイプに基づいて異なるビジネスロジックコンポーネントを呼び出すようにするか、イベントタイプごとに1つのキューを持ち、対応するMDBが異なるビジネスロジックを呼び出す方がよいでしょうか。特定のイベントに対応する重いワークフローは、別のキューで処理されるため、他のイベントのパフォーマンスに影響を与えないと想定しています。
jboss - JBoss MDB - JMSBytesMessage クラスのキャスト例外
離れたサーバーの MQ キューをリッスンする EJB3 MDB に取り組んでいます。MDB によって行われる処理を除いて、すべて正常に動作しています (メッセージがリッスン キューに入れられると MDB がトリガーされます)。詳細については、WMQ リソース アダプターを使用してキューをマップします。
MDB のメソッド「onMessage」に、指定されたメッセージをクラス「com.ibm.jms.JMSBytesMessage」にキャストしようとしましたが、奇妙なエラー メッセージが表示されます。
コードは次のとおりです (この例では単純です)。
そして例外メッセージ:
入力要求の読み取り中に例外が発生しました: com.ibm.jms.JMSBytesMessage は com.ibm.jms.JMSBytesMessage と互換性がありません
わかりました。受信したメッセージは「com.ibm.jms.JMSBytesMessage」タイプであるはずですが、なぜアプリケーションが機能しないのでしょうか? JBoss サーバーが別のバージョンのライブラリー 'com.ibm.mqjms.jar' (JMSBytesMessage クラスを含む) を既に使用していて、この種のエラーが発生する可能性はありますか?
ps: Linux システムの JBoss サーバー バージョン 4.2.3 にアプリケーションをデプロイしました。同じバージョンの JBoss サーバーを使用しているが、ウィンドウ システム (同じ構成、同じライブラリなど) を使用しているローカル マシンで、アプリケーションを既に動作させています。
誰かがそのようなエラーの理由について考えを持っていますか?
助けてくれてありがとう。
よろしく、
編集: 解決策: com.ibm.jms.JMSBytesMessage の代わりに javax.jms.BytesMessage でキャストする
java - Java コネクタ アーキテクチャと TCP/IP
ここでの私の最も基本的な質問は、Java EE アプリケーションに TCP インターフェースをどのように組み込むのですか? 従来の EIS と対話する代わりに、TCP/IP ポートのブロックと対話する必要があります。理想的には、メッセージ駆動型 Bean の onMessage メソッドが着信 TCP 要求によって呼び出され、同じ接続を介して応答できるようにしたいと考えています。
JCA は、Java EE 環境内でこのようなことを実行できるほど十分に一般的です。カスタム コネクタを開発することは、インバウンド/アウトバウンド TCP インターフェイスを Java エンタープライズ エコシステムに統合するための適切な手法でしょうか?
私がこれまでに試した限りでは、現在、多数の TCP リスナーを開始することから始まるライフサイクル モジュールを利用しています。これにより、ビジネス メソッドを呼び出すメッセージ駆動型 Bean が呼び出され、すべてが同じ TCP ストリームを介して返されます。これは実際には問題なく動作していますが、私のアプリケーション サーバー (Glassfish) でのライフサイクル サポートは、後付けで追加されたように感じます。したがって、JCA はこの種の問題に対する第一級のソリューションのように見え、TCP を介した通信を可能にします。
しかし、私たちが行った最初の調査から、コネクタ アーキテクチャは、一般化された TCP 通信ではなく、従来の情報システムを「対象としている」ように見えます。したがって、私の質問は次のようになります。カスタム JCA を使用して TCP/IP を Java EE アプリケーションに統合している人はいますか? それとも、EJB から TCP 接続を受け入れるためのより良い手法はありますか?
java - java MDBで例外を処理する最良の方法はどれですか?
私はこのユースケースを得ました:
この図は、エンタープライズ モデルを表しています。Weblogic 10.3 上の Java EE テクノロジは、IoC および AOP 用の Spring フレームワーク、Spring jpatemplate を使用した永続性用の JPA、対話フレーム用の Spring 統合を活用しています。ご覧のとおり、春の統合により必要なすべての魔法の砂糖が追加されるため、サービスとゲートウェイの間に結合はありません。
次に、例外処理に対処する必要があります。すべてのチェーンにはチェック例外がありません。jpatemplate は実行時例外ですべての SQL 例外をラップするため、データ アクセスにもチェック例外はありません。
したがって、私が処理する唯一のチェック例外は MDB にあります
たとえば、チェーンの一部のコンポーネントで NPE を取得すると、メッセージが JMS キューでロールバックされ、プロセスがループバックされることに気付きました。
このシナリオで例外を処理する最良の方法はどれですか? MDB ですべての runtimeExceptions をキャッチしますか?
よろしくマッシモ
java - デプロイ時に MDB を読み取るトピックのアクティベーション構成を変更する
これは簡単だと思います。ただRTMして行きます。しかし、必要な情報が見つかりません。
Q:@ActivationConfigProperty
XML を記述しなくても、展開時にの値を変更できますか?
もっと詳しく
@MessageDriven
注釈を使用している MDB があります。この中には、それを構成するいくつかの@ActivationConfigProperty
注釈があります。
この MDB を複数回展開する必要があり、毎回異なるトピックを参照します。
展開時 (WebSphere 7 ND) にTopicListenerPort
、EAR ごとに個別の (異なるトピックへの WebSphere のマッピング方法) を構成できます。ただし、2 番目のインスタンスを開始しようとすると、次のエラーで失敗します。
WMSG0019E: MDB リスナー TopicReaderBean、JMSDestination jms/MMiSInLonTopic を開始できません: com.ibm.msg.client.jms.DetailedIllegalStateException: JMSWMQ0026: MQSUB を使用してトピック「MMIS_LON_IN」にサブスクライブできませんでした。サブスクリプションが別のメッセージ コンシューマーによって使用されているため、サブスクリプションの作成に問題があった可能性があります。同じ名前で新しいサブスクリプションを作成する前に、このサブスクリプションを使用しているすべてのメッセージ コンシューマーが閉じていることを確認してください。詳細については、リンクされた例外を参照してください。原因: com.ibm.mq.MQException: JMSCMQ0001: WebSphere MQ 呼び出しが compcode '2' ('MQCC_FAILED') 理由 '2429' ('MQRC_SUBSCRIPTION_IN_USE') で失敗しました。
MQ エクスプローラーを見ると、サブスクリプション名がJMS:GGWKNNG5:gmm_poc_06:TopicReaderBeanSubscriptionName
「JMS」、QueueManager 名、Topic Connection Factory ID、および ActivationConfigProperty「subscriptionName」で構成されていることがわかります。このサブスクリプション名が衝突するため、2 番目の接続は失敗します。個別の MDB インスタンスで使用されるサブスクリプション名を区別する必要があります。
Bean ごとに新しい Topic Connection Factory を作成することもできますが、それは大変な作業であり、あまり意味がありません。
意味のあることは、Bean ごとに異なるサブスクリプション名を持つことです。ただし、このプロパティは注釈に組み込まれており、それをオーバーライドできる WebSphere のどこにもありません。
では、XML デプロイメント記述子を記述せずに、このプロパティをオーバーライドできますか? また、XML を記述する必要がある場合、そのプロパティをオーバーライドするにはどうすればよいでしょうか。
java - OpenEJB に MDB を無視するように指示する
最終的にメッセージをキューに入れるアクティビティの単体テストを作成しました。メッセージがそのキューに入れられるとすぐに、メッセージ駆動型 Bean が処理を開始します。しかし、単体テストで MDB をテストしたくありません。それらを無視するように OpenEJB に指示するにはどうすればよいですか?
いくつかのプロパティを使用して OpenEJB をセットアップしました。
を設定する必要があることはわかってopenejb.deployments.classpath.exclude
いますが、正しい値がわかりません。
たとえば、私のクラスの名前はorg.example.mdb.MyMDB
.
jakarta-ee - セキュリティで保護されたキュー @RunAs からの Weblogic メッセージ駆動型 Bean の読み取りが機能しない
メッセージの読み取り元のキューが保護されていない限り、非常に単純な MDB が正常に動作します。
ユーザー名でキューを保護した後、メッセージを読み取れなくなりました
@weblogic.jws.security.RunAs(role="Joan",mapToPrincipal="ccc_user")
ccc_user がキューからメッセージを読み取ることができるあらゆる種類の @RunAs アノテーションを試してみまし
た
import javax.annotation.security.RunAs;
@RunAs("SomeRole")
デプロイ時にエラーが発生する EJB をデプロイできません: mdbReceiver.jar からの MdbReceiver: マッピングでの役割が期待されます
注釈を使用してこれを行うにはどうすればよいですか? 注釈なしでも試してみました... weblogicコンソールの例外は同じです
weblogic.jms.common.JMSSecurityException: Access denied to resource: type=<jms>, application=UNIV_REC_Module, destinationType=queue, resource=DistributedQueueTest, action=receive
ありがとうございました
jboss - Jboss JMS キューをリッスンする MDB インスタンスの数を制限する方法
次の設定に問題があります。
Java アプリケーションが電子メール メッセージを JMS キューに送信し、キューをリッスンしている MDB が onMessage メソッドで電子メール メッセージを取得し、Gmail SMTP で接続を開き、電子メールを SMTP に送信して接続を閉じます。JMS キュー内のすべてのメッセージに対してこれを実行します。
キューに同時に最大 5 つのメッセージがある場合、うまく機能しています。すべてのメッセージは MDB の 5 つの異なるインスタンスによって同時に取得されるため、Gmail SMTP サーバーへの同時接続は 5 つあります。しかし、JMS キューにさらにメッセージがあると、Gmail SMTP サーバーから接続エラーが発生します。最初の 5 つのメッセージは正しく送信されますが、残りのメッセージは正しく送信されないため、他のメッセージはキューに存在しないため失われます。
私の質問は、JMS キューをリッスンする MDB インスタンスの数を制限することは可能ですか? 最大 5 つの MDB がある場合、キューに 1000 個のメッセージがあったとしても、キューを空にするのに時間がかかりますが、少なくともメッセージを失うことはありません。
この問題を解決するための他の提案は非常に高く評価されます。
Jboss のバージョンは次のとおりです。
[サーバー] リリース ID: JBoss [Trinity] 4.2.3.GA (ビルド: SVNTag=JBoss_4_2_3_GA date=200807181417)
MDB の構成は次のとおりです。
もっと必要ですか?
ありがとう
EDIT 2011-02-14
MDB インスタンスの数を制限したいのは、私が間違っているのかもしれません。JMS スレッドの数に関する構成を見ました。MDB に投稿するスレッドの数を制限すると、問題が解決する可能性がありますか? JMS は、MDB が使用可能になるまで待機してから、msg を再度送信しますか? それを行うことによる副作用はありますか?でもお願いします。ありがとう
編集終了
jboss - org.jboss.ejb3.mdb.MdbDelegateWrapper を設定する場所
接続に関して制限されている外部リソースに接続するため、MDB のプール サイズを 5 に減らす必要があります。JMS キューに 15 のメッセージがある場合、5 つのメッセージのみが正常に処理され、残りの 10 は MDB コードで接続エラーが発生したために処理されません。
Jboss JMX コンソールでこの設定を示します。
Jboss 4.2.3 を使用しています。この MaxPoolSize 構成をどこで編集できるかを知る必要があります。あちこち探しましたが見つかりません。
ありがとう