問題タブ [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 メソッドへのアクセスを同期する
監査メッセージを受け取るメッセージ駆動型 Bean があります。これらのメッセージには、監査対象のシステムに関する情報も含まれています。メッセージを受信すると、MDB は、システムが存在しない場合はシステムを作成するか、既存のシステムを再利用できます。
私の課題は、新しいシステムから大量のメッセージを同時に受信すると、複数の MDB インスタンスが作成され、重複したシステムが作成される可能性があることです。データベースに制約を追加することは、それを解決する 1 つの方法です。アプリケーション (この場合は MDB) でこれらの重複を回避する方法はありますか?
java - ActiveMQ コンシューマの実行遅延
キューがバックアップされていないという問題が発生していますが、コンシューマが実際に JMS メッセージを実行するまでの時間は、作成から 100 ~ 200 秒です (JMSTimestamp-CurrentTime で測定)。
キューへのフローはかなり低く、1 分間に 30 件未満のメッセージでした。ActiveMQ を再起動することで問題を解決できました。その後、メッセージは作成されてから 1 ミリ秒未満で開始されました。
ActiveMQ 5.4.1 を使用していますが、MDB で行われている作業の通常の合計実行時間は 2 ミリ秒未満です。遅延の時点で、ActiveMQ ログにエラー メッセージはなく、CPU は低く、十分なメモリがありました。
コンシューマーがキューからメッセージを引き出しているようですが、何らかの理由でそれらに座っています。
この問題の原因となっている構成上の問題はありますか?
編集:
私の MDB の最初の行は次のとおりです。
websphere - MDB を使用してキューから順番にメッセージを読み取る方法は?
WebSphere MQ をリッスンする MDB があります。キューが受信した順序でメッセージを取得するわけではありません。その順番で読めるようにするにはどうしたらいいですか?出来ますか?MDB を使用しないでください。
deployment - メッセージ駆動型 Bean 仕様違反の jBoss デプロイメント
1 つのメッセージ駆動型 Bean を持つ Java EE アプリケーションがあり、JBoss 4 では正常に動作しますが、JBoss 6 用にプロジェクトを構成してデプロイすると、このエラーが発生します。
しかし、私の Bean には onMessage メソッドがあります。その場合、jboss 4 でも機能しませんでした。
なぜこのエラーが発生するのですか!?
編集:
問題のクラスは次のようになります
編集2: これはjboss.xmlの関連部分です
編集3:
プロジェクトからすべての jar を削除し、関連するものだけを (新しいバージョンからも) 再追加して、NoClassDefFound エラーを出しました。それでも問題は残ります。
編集: 道順、どのエリアを見るべきですか?私のプロジェクト、または jboss-configration、またはデプロイメント設定??
java - MDB での JDK 5 ファイル/ストリーム読み取りタイムアウト API
ファイルを読み取ったり、タイムアウトでストリームを読み取ったりするための JDK 5 以前の API はありますか? また、この API は、MDB 内にラップされている場合でも安全でなければなりません。参考までに、FutureResult、TimedCallable クラスなどの使用については既に検討しました。1. これらは JDK ネイティブ クラスではなく、2. スレッドは MDB 内で生成されるため、MDB 内でこれらを使用することはお勧めできないという結論に達しました。だから私は別の解決策が必要です。
また、読み取りスレッドと、読み取りスレッドの適時性を管理し、必要に応じてブロックするスレッドが必要であるため、どのソリューションにもスレッド化が必要になると思います。したがって、そのような動作は MDB 内では違法になりますか? 上記の API が JDK にネイティブである場合、安全に実装できるでしょうか?
java - EJBとスレッディング
私が理解していることから、EJBのライフサイクルに干渉する可能性があるため、EJB内からスレッドを生成することは違法です。ただし、EJB、特にMDB内でExecutorなどのスレッドを内部で生成および処理するJDKから事前定義されたJavaクラスを使用することは違法ですか?
java - MDB サーバー環境から接続設定を取得する方法
リモート HornetQ JMS プロバイダーに接続するメッセージ駆動型 Bean があります (実稼働/テストでは異なります)。
接続設定は、sun-ejb-jar.xml に保存されるか、MDB クラスに直接 @ActivationConfigProperty 注釈として保存されます。
これらの設定はすべて ear ファイルにバンドルされているため、さまざまな環境でテストする場合、常に設定を変更することを覚えておく必要があるため、展開プロセスが非常に面倒になります。
アプリケーションにこの設定をサーバーから読み取らせる方法について何かアイデアはありますか?
いくつかのカスタム リソースを作成して @Resource で読み取ることを考えましたが、MDB が既に初期化された後に @Resource インジェクション AFAIK が行われるため、MDB にそれらの設定を読み取らせる方法がわかりません...
編集
明確にするために:私が探しているのは、特定の構成(たとえば、さまざまなJMSプロバイダー-トピック/キューなど)で各サーバーにインストールする必要があるsun-ejb-jar.xml構成ファイルのようなものです。しかし、私の耳のアプリは変わらないはずです。各サーバーから環境を自動的にロードする必要があります。それは理にかなっていますか?
java-ee-6 - CDI インジェクションは MDB と @Scheduled Bean でどのように機能しますか?
JBoss 6 Final にデプロイされた大規模な Java EE 6 アプリケーションに取り組んでいます。私の現在のタスクには、@EJB の代わりに一貫して @Inject を使用することが含まれていますが、いくつかのタイプの Bean、特に @MessageDriven Bean と @Scheduled メソッドを使用した Bean でいくつかの問題に遭遇しています。
タイミング (@Schedule の場合) が不運な場合、または起動時に MDB のキューにメッセージがある場合、注入されたリソース (EJB 自体) がまだバインドされていないため、Bean のインスタンス化が失敗します。 .
@Inject を使用しているため、コンテナー自体は @Inject を気にしないため、EJB コンテナーは Bean の準備ができていると見なしていると推測します。おそらく、@EJB インジェクションがないため、Bean を使用する準備ができていると想定しているだけです。注入するリソースがまだ実際にはバインドされていないため、注入された CDI プロキシは失敗します。
小さな例:
上記の例は、Bean が 2 つしかないため、頻繁に失敗することはありませんが、私が取り組んでいるプロジェクトでは多くの EJB がバインドされ、問題が増幅されます。ただし、MySupportingBean が最初にバインドされるという保証がないため、失敗する可能性があります。また、MySupportingBean がバインドされる前に onTimeout が呼び出されると、MyScheduledBean のインスタンス化が失敗します。代わりに @EJB を使用した場合、MyScheduledBean は、MySupportingBean への依存関係が満たされるまでバインドされません。
この例は onTimeout 自体では失敗しませんが、CDI が MySupportingBean を注入しようとしたときに失敗することに注意してください。
私はさまざまなフォーラムで、@Inject が常に優れていると多くの人が主張する多くの投稿を読みました。一般的には同意しますが、@Inject と組み合わせた @Schedule または @MessageDriven をどのように処理しますか? 私の経験では、そのような場合に Bean が機能するかどうかは運次第であり、EJB がデプロイされる順序と @Schedule または onMessage が呼び出されるタイミングに応じて、Bean は任意に失敗します。
java - MessageDrivenContext インジェクションを有効にする方法は?
JavaEE MDB で明示的にトランザクションをロールバックするように設定したい:
ただし、コンテナはsetMessageDrivenContext
私を呼び出さず、NullPointerException
. コンテキストを注入するには、どの魔法のソースが必要ですか?
jakarta-ee - MDB内からキュー名を取得する
MDB内からバインドされたキューまたはリスナーポートの名前を推測することは可能ですか?