問題タブ [ejb-timer]
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 - callerPrincipal を EJB タイマーから変更するにはどうすればよいですか?
EJB タイマーは常にUNAUTHENTICATED
ユーザーと共に実行されます。入れてみました@RunAs
がうまくいきませんでした。リフレクションで値を変更しようとしましたが、うまくいきませんでした。これからリモート EJB を呼び出す必要があり、権限を持つユーザーが必要です。
wildfly - WildFly 8.2 でのタイマー復元エラー
JBoss 5.1 から WildFly 8.2 にアップグレードした後、次のエラー ログを取得しました。同時に - すべての作品。
ペア - 2 つの値を含む (シリアル化可能)
StorageData - Long trId フィールドを含む一部のデータ (シリアライズ可能)
豆で:
このエラーを取り除く方法は?
java - MQ Queue トランザクションが 2 フェーズ トランザクションでロールバックされない
Bean 管理トランザクションを持つ EJB タイマー (EJB 2.1) があります。
タイマー コードは、1 つのトランザクションで 2 つのリソースを処理するビジネス メソッドを呼び出します。1 つはデータベースで、もう 1 つは MQ キュー サーバーです。
使用するアプリケーション サーバーは Websphere Application Server 7 (WAS) です。2 つのリソース (データベースとキュー マネージャー) 間の整合性を確保するために、WAS で 2 フェーズ コミットをサポートするオプションを有効にしました。これは、データベース操作中に何らかの例外が発生した場合に、キューに投稿されたメッセージがデータベースのロールバックと共にロールバックされ、その逆も同様であることを保証するためです。
以下にフローを説明します。
Timer コードでタイムアウトが発生すると、DirectProcessor の startProcess() が呼び出されます。これがビジネス メソッドです。このメソッドには、同じクラスの createPostXMLMessage() へのメソッド呼び出しがある try ブロックがあります。これには、クラス PostMsg の別のメソッド postMessage() への呼び出しがあります。
問題は、createPostXMLMessage() メソッドでデータベース例外が発生した場合、データベース部分が正常にロールバックされても、以前に投稿されたメッセージがロールバックされないことです。助けてください。
ejb-jar.xml 内
java-ee-6 - WebSphere 8 でのスレッド スリープと EJB 3.1 タイマーによる無限ループ: バックプレッシャー
私はする必要があります
- データベース テーブルを読み取る
- データを処理する (dataCleanser)
スループットを向上させるために、5 分 (10 個) ごとに起動し、上記の作業を行う EJB タイマー (非永続) を実装しました。
問題は「バック プレッシャー」です。dataCleanser は 12 分ほどかかる場合があり (外部 API 呼び出しを行います)、これが発生すると、Websphere はハング スレッドを報告します。
そのような場合、プログラムでタイマーの数を (たとえば 10 から 5 に) 減らしたいと思います。タイマーが戻ってきて、実行の成功、例外、またはタイムアウトのステータスを報告する場合にのみ、それを行うことができます
そうすれば、背圧を制御できます。
is there anyway to do that in Websphere 8?
別の方法で質問するには
- can the EJB timers(with transaction_not_supported) invoke another EJB that have transaction timeouts?
- can those timeouts be caught in the calling timer code?
それが不可能な場合、単純な古い無限ループをスリープ状態で使用してから呼び出して EJB (次に dataCleanser を呼び出す) をトランザクション タイムアウトで使用することの欠点は何ですか?
欠点の 1 つは、これがシングル スレッドになり、タイマーのように 10 個の並列実行を行う方法がわからないことです。
websphere - 非永続的な ejb タイマーがトリガーされないのはなぜですか?
最近発生した問題により、永続的なプログラム タイマーを使用するアプリケーションの既存のロジックを非永続的なタイマーに置き換えようとしています。タイマーの永続的な情報を書き込むために WAS が使用するファイル システムがいっぱいになり、Derby データベースが読み取り専用モードで再起動されたため、アプリケーションがタイマー ポストをトリガーできなくなり、サーバーを再起動して同じ問題を修正する必要がありました。
これは、プログラム タイマーをトリガーするために使用される現在のコードです。
http://docs.oracle.com/javaee/6/tutorial/doc/bnboy.htmlに引用されている例に従って、コードを次のように変更しました
しかし、以下の例外に直面しています
62 行目で、createSingleActionTimer が呼び出されます。
いくつかの分析を行いましたが、同じ問題を修正できませんでした。どんなリードも役に立ちます..
database - 同じテーブルからデータを読み取るマルチサーバー アプリケーション
2 つの異なるサーバー インスタンスでアプリケーションを実行しています。アプリケーションには、1 分ごとに実行するようにタイマーが設定されたシングルトン EJB があります。EJB のメソッドは、テーブルからレコードを読み取り、それを削除し、キューを介して発行します (すべて 1 つのトランザクションの一部)。両方のサーバーが起動すると、同時にテーブルからレコードを読み取ろうとします。
私の質問は、トランザクションが終了するまで、1 つのアプリケーションだけがレコードを読み取れるようにする方法です。