問題タブ [workmanagers]
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.
spring - タスク エグゼキュータ スレッドで実行する Spring スケジュール タスクの取得
背景: Websphere 7 アプリケーションで Spring 3.0.x を使用して、CommonJ WorkManager と TimerManager を取得します。これらを使用して、デプロイされたアプリケーションで特定の間隔で任意のタスクを実行します。
問題:
スケジューラーで Bean を次のように設定すると、次のようになることを知りました。
Websphere ではThreadTester
、TimerManager スレッド プールでクラスを直接実行します。このスレッド プールは、WorkManager スレッド プールよりもはるかに高い優先度 (およびスレッド数が少ない) を持っています。代わりに WorkManager を使用してスレッドを実行し、適切な優先順位でスレッド用に設定された適切なリソースを使用するようにします。
別の方法として、上記のようにスケジューラで Bean を設定する代わりに、次のようにクラスで Spring@Scheduled
アノテーションを使用できます。ThreadTester
質問:
アノテーションを使用@Scheduled
すると、スケジュールされたクラスが TimerManager スレッド プールまたは WorkManager スレッド プールで実行されますか?
WorkManager を使用して実行する場合は、すばらしいことです。それは私の問題を解決します。ただし、TimerManager を使用してクラスを直接実行している場合は、WorkManager を正しく呼び出すためのラッパーを作成する必要があると思います。
助けてくれてありがとう!
編集:ここでは、Websphere 7 commonj 実装を使用してスケジューラとエグゼキュータをセットアップする方法を含めます。
jakarta-ee - EJB 並列処理のワーク マネージャ
複数の異なる EJB の非同期呼び出しを並列化する必要があり、それぞれでトランザクション メソッドを呼び出す必要があります。デプロイメント環境として WebLogic のクラスター化されたインストールを使用しています。理想的には、クラスターのさまざまなノードのさまざまなスレッドにワークロードを分散させたいと考えています。
この件に関する以前 の投稿を見つけた後、ワーク マネージャーを使用することは私の環境では実行可能な代替手段になる可能性があると思いますが、ドキュメントを読んだ後、いくつかの質問が残っています。マネージャーは、これらにいくつかの光を当てることができます:
- メソッドが呼び出されたときにその EJB のトランザクション メソッドの 1 つを呼び出すことができる
Work
ように、EJB にインターフェイスを実装することは可能ですか?run()
それぞれが異なる作業単位を表す複数の EJB を非同期的かつ同時に呼び出すことに関心がありますが、ワーク マネージャーが必要な実行コンテキストを EJB に伝達するかどうかはわかりません。 - グローバル ワーク マネージャーを構成する場合、それを使用すると、クラスター内のすべてのノードにワークロードが自動的に分散されますか? または、送信されたすべてのワークが同じクラスター ノードで実行されますが、異なるスレッドで実行されますか? - その場合、クラスタ内のすべてのノードが作業を分担できるようにワークロードを並列化するにはどうすればよいでしょうか?
また、この質問の最初の段落の要件が満たされている限り、誰かが (ワーク マネージャーを使用する代わりに) 別の代替案を提案できれば素晴らしいことです。
spring - TimerManager によってトリガーされたときに WorkManager でスレッドを実行する方法
背景: Websphere 7 アプリケーションで Spring 3.0.x を使用して、CommonJ WorkManager と TimerManager を取得します。これらを使用して、デプロイされたアプリケーションで特定の間隔で任意のタスクを実行します。
背景 2:これは、TimerManager からトリガーされたスレッドが実際に TimerManager スレッド プールによって実行されたのか、それとも WorkManager スレッド プール (最終的には TimerManager スレッドになったのか) によって実行されたのか疑問に思っていた (タイトルが不適切な) 以前の質問のフォローアップの質問です。プール)。 前の質問: Spring のスケジュールされたタスクをタスク実行スレッドで実行する
質問:
TimerManager からトリガーされたときに、Spring またはその他の方法を使用して、WorkManager スレッド プールでスレッドを実行するためのシンプルまたはエレガントな方法はありますか?
よりコンテナに依存しないため、Spring ソリューションを好みます。
ありがとう!
jakarta-ee - WebLogic WorkManager スレッド間でトランザクションを共有する (CommonJ を使用)
JNDI 経由で検索するエンティティ Bean にワーク マネージャーを構成しました。変更の背後にあるアイデアは、時間がかかる可能性があるため、検証の一部をマルチスレッド化することでしたが、これには現在のトランザクションへのアクセスが必要です。
私のテストでは、ワーカー スレッドではトランザクションにアクセスできないようです。ワーカー スレッドでトランザクションにアクセスしたいのですが、できますか?
作業がスケジュールされたときに XID オブジェクトが渡されるこのExecutionContextに似た、つまり現在のトランザクションを継承することを望んでいました。WebLogic はこれをサポートしていますか?
これは私がやったことです:
weblogic-ejb-jar.xml
次のように、ワーク マネージャーの定義を追加しました。
の Bean 定義に関する参照を追加しましたejb-jar.xml
次に、コードでワーク マネージャーを検索し、いくつかの作業を実行するようにスケジュールしました。
私が得る出力は次のとおりです。これは、生成されたスレッドでトランザクションが利用できないことを示しています。このトランザクションをワーカー スレッドで共有することは可能ですか? 私は彼らがこれを JCA 1.5 (JSR 112) の一部として行ったと思っていました。
編集: weblogic.connector.work.WorkManager と javax.resource.spi.work.WorkManager も使用してみましたが、JNDI ルックアップの実行時にこれらが返されませんでした。これらは、ExecutionContext をワーク マネージャーに渡して、XID を与えることを可能にしているように見えます。これらのクラスを使用した最初のテストでは、うまくいかないように見えました。おそらく私は何かを逃しましたか?
multithreading - Need sample code explaning Workmanager in Tomcat
I want to know how to use WorkManager in Tomcat 7. I came across the open source library Foo-CommonJ but nowhere i found a sample code explaning the usage. The input parameter for FooWorkManager's constructor is an instance of commonj.work.work class, where as no one provides the commonj.work.work class (neither tomcat nor foo-commonj). Basically i need a sample code explaining usage of WorkManager (FooCommonj jar) in tomcat. And if Foo-Commonj doesn't support workmanager properly, then some alternative.
weblogic11g - JNDI ツリーの Weblogic WorkManager
Application Server をターゲットとする WorkManager が Application Server の JNDI ツリーの一部ではないのはなぜですか? 私はこれに多くの時間を費やしました。それとも私は何かを逃していますか?その後、java:comp/env/WorkManagerName を使用して取得できます。
jakarta-ee - EJBを利用したバックグラウンド処理
私が踏み込んだ設計上の問題を解決する方法を見つけようとしています。私のアプリケーションでは、クライアントがオブジェクトを利用できるようにするために、オブジェクトのプールを管理するバックグラウンドで継続的に動作する一種のデーモン/サービスが必要であると仮定しましょう。特に、このデーモンは、これらのオブジェクトのライフサイクル全体を管理します。
さて、このデーモン スコープの詳細に飛び込むことなく、これをどのように設計できるかを考えていました。WorkManager
私の最初のアイデアは、 APIに依存することでした。アプリケーションのコアをモデル化する Singleton EJB があるため、 を取得してからWorkManager
デーモンを生成するというアイデアがありました (明らかに を実装していますWork
)。リソース アダプタの開発中に WorkManager を使用したことがあり、EJB でも使用できると考えていましたが、WorkManager
API に対する Glassfish (3.1.2.2) のサポート (基本的には によって提供されます) を使用javax.resource.spi.work
しているため、RA のコンテキスト外ではこれは不可能であることがわかりました。 .
私はウェブを見て、Daniel Veselka による興味深い記事を見つけました。これは、WorkManager の CommonJ 実装を導入する問題にアプローチしているようで、このアプローチに従うことを決定的に考えていました。
これについてあなたはどう思いますか?
jakarta-ee - アプリケーションが WorkManager API を使用している場合に Jboss 5.x から Jboss 7.x に移行する方法
ワークロードを並列化するために (垂直方向のスケーラビリティとして) WorkManager を使用する場合がある実稼働環境の既存のアプリケーションを移行する作業を行っています。
アプリケーションは JMS も使用しますが、パフォーマンスの問題により、一部の部分はJBossWorkManagerTaskExecutor [Spring 3.1] を使用して実装され、実行中のすべてのスレッドで同じ JVM メモリを共有し、Java EE 環境でネイティブ スレッドを開かないようにします。
WorkManager API が Jboss 7.x で利用できないため、このトピックとその理由に関する他の多くの議論を読みました。
https://community.jboss.org/thread/169380
https://community.jboss.org/message/718053
しかし、ソースコードに影響を与えずに (または非常に小さな影響を与えるだけで)、Jboss 5.x から Jboss 7.x (Jboss EAP 5 から Jboss EAP 6) にアプリケーションを(非常に高速な方法で)移行する方法がわかりません。.
私が正しく理解していれば、workmanager は JMX 経由では利用できないため、JCA リソース アダプタを実装して workmanager を使用する方法しかありません。それは正しいですか?
以上の理由から、commonj を導入する機会はなかなかないと思います。
現時点ではソース コードを書き直すことはできず、非常に短い時間で状況を解決するためにネイティブ スレッドを開くことは避けたいと考えています。
誰かがこの問題を解決しましたか? 以前のバージョンの Jboss のように WorkManager を使用する JCA リソース アダプタの実装を誰かが持っていますか?
java - WorkManager のテスト
CommonJ workManager のテストに問題があります。どのアプローチに従うべきかわかりません。実行するタスクを実装するワーカー クラスと、ジョブのステータス (開始、完了、拒否など) を更新する WorkListener を作成しました。単体テストを使用することで、Worker オブジェクトと Listener オブジェクトを分離してテストできますが、それだけでは十分ではありません。これら 2 つのオブジェクト間の連携をテストしたいと思います。
たとえば、可能性として、 Worker オブジェクトを作成し、 Listener をモックアウトします。