パブリックEJBメソッドへの非同期呼び出しの結果、EJBコンテナのスレッドプールによって割り当てられた別の子スレッドに渡すInheritableThreadLocal変数があります。非同期呼び出しを開始する親の呼び出し元は、ステートレスEJBであるRESTリソースです。 InheritableThreadLocalは、子スレッドが新規作成された場合にのみ、値を子スレッドに渡します。スレッドがプールに作成されると、サーバーがバウンスされるまでスレッドを破壊することはありません。ThreadLocal変数をEJBコンテナに渡すスレッドプール
上記の事実を考慮すると、私のケースの子スレッドは、EJBコンテナによって管理されるスレッドプールから得られます。 InheritableThreadLocalの値を子スレッドに渡すのは、サーバーの起動後に初めてResourceが呼び出された場合、またはスレッドプールで作成されたばかりの新しいスレッドが子スレッドとして割り当てられた場合のみです。他のすべてのケースでは、スレッドが最初に作成されて割り当てられたときに、プールから子スレッドに割り当てられた初期値を取得しています。
IBM WebSphereでコードを実行していて、非同期呼び出しのメソッドパラメータとしてThreadLocal値を渡すことはオプションではありません。
ThreadLocalの値を再割り当てして、実行ごとに子スレッドに割り当てられている現在の値を取得できるようにするにはどうすればよいですか?
以下のリンクは多少似ていますが、私の場合、ThreadPoolはEJBコンテナによって提供されるものです。
Propagating ThreadLocal to a new Thread fetched from a ExecutorService
回答が得られない場合は、コードスニペットを追加することをおすすめします。そうすれば、誰かが正しく読んでいるかどうかを簡単に確認できます。 –