スレッド管理と Spring Framework
管理対象外スレッドに関係する潜在的な問題を回避するために、以下のセクションの情報を使用してください。
管理対象外スレッド
- アプリケーション・サーバーは管理対象外スレッドを認識しません。
- 管理対象外スレッドには Java™ EE コンテキスト情報へのアクセス権限がありません。
- 管理対象外スレッドは、アプリケーション・サーバーに監視されずにリソースを使用できます。
- 管理対象外スレッドは、アプリケーション・サーバーの機能 (例えば、正常シャットダウンや障害からのリソースのリカバリー) に悪影響を与える可能性があります。
- 管理者は管理対象外スレッドの数、または管理対象外スレッドによるリソースの使用を制御できません。
- registerShutdownHook
Spring Framework の AbstractApplicationContext クラスとそのサブクラスは使用しないでください。これらのクラスに含まれるパブリック・メソッド registerShutdownHook は、スレッドを作成してそのスレッドを Java マシン (JVM) に登録し、シャットダウン時に実行してアプリケーション・コンテキストを閉じます。代わりに、アプリケーションは、アプリケーション・サーバー・コンテナーから受信するライフサイクル通知を使用して、明示的にアプリケーション・コンテキストの close メソッドを呼び出すことができます。
- WeakReferenceMonitor
Spring Framework は、EJB コンポーネントの開発を簡略化するための便利なクラスを提供しています。ただし、これらの便利なクラスでは、WeakReferenceMonitor オブジェクトがクリーンアップに使用する管理対象外スレッドが生成されます。
スレッド・プーリング
WebSphere® Application Server は、非同期作業を実行するための Spring Framework の WorkManagerTaskExecutor クラスの使用をサポートしています。
WorkManagerTaskExecutor クラスは、アプリケーション・サーバーによって管理されるスレッド・プールを使用し、構成済みの WorkManager インスタンスに委任します。作業マネージャーの構成については、関連トピックを参照してください。
Spring Framework で提供されているその他の TaskExecutor クラスは使用しないでください。それらのクラスは管理対象外スレッドを開始することがあります。
<bean id="myTaskExecutor"
class="org.springframework.scheduling.commonj.WorkManagerTaskExecutor">
<property name="workManagerName" value="wm/default" />
</bean>
スケジューリング
Spring Framework の CommonJ WorkManager スケジューリング・パッケージを使用すると、アプリケーション・サーバーによって管理されるスレッドを操作できます。Quartz スケジューラーや Java SE Development Kit (JDK) 内の Timer などの他のパッケージは使用しないでください。これらは管理対象外スレッドを開始する可能性があります。