EJB コマンド・グループ
AdminTask オブジェクトの EJB コマンド・グループには、エンタープライズ Bean の取り扱いに使用できるコマンドが用意されています。
removeAutomaticEJBTimers
アプリケーションまたはモジュールは、アノテーションや XML を使用して、自動的に EJB タイマーを作成するようにアプリケーション・サーバーに指示をします。
自動的に作成されたタイマーは、そのタイマーの作成時にアプリケーションまたはモジュールが稼働しているサーバーに関連づけられたスケジューラー・インスタンスで保持されます。スケジュールは、サーバー単位で構成されるため、トポロジーの各サーバーは、固有のスケジューラー・インスタンスを使用することができます。この場合、各サーバーに固有のスケジューラー・インスタンスは、そのサーバーで実行される EJB タイマーをサポートします。
各スケジューラー・インスタンスは、データベース表のセットに関連付けられます。 複数のスケジューラー・インスタンスがある場合、固有接頭部を付けて各スケジューラー・インスタンスを構成し、インスタンスが固有のデータベース表のセットに対応するようにしてください。
自動 EJB タイマーを要求したアプリケーションまたはモジュールがサーバーから削除されると、その自動 EJB タイマーも対応するスケジューラー・インスタンスから削除する必要があります。アプリケーションまたはモジュールが複数サーバーにインストールされ、その各サーバーが固有のスケジューラー・インスタンスを使用していた場合、タイマーはその各スケジューラー・インスタンスから削除する必要があります。言い換えれば、自動作成の EJB タイマーはサーバー単位で削除されます。
場合によっては、アプリケーションまたはモジュールの削除または更新によって、自動作成の EJB タイマーがスケジューラー・インスタンスから削除されます。このシナリオでは、ユーザー処置は必要ありません。
ただし、アプリケーションまたはモジュールの削除あるいは更新の結果、自動作成の EJB タイマーがスケジューラー・インスタンスから削除されない場合もあります。この場合は、removeAutomaticEJBTimers コマンドを使用して EJB タイマーを手動で削除する必要があります。
このコマンドは、接続モードでのみサポートされます。Network Deployment トポロジーでは、デプロイメント・マネージャー、ノード・エージェント、およびスケジューラー・インスタンスを含む管理対象サーバーは、すべて稼働していなければなりません。ベース・トポロジーでは、スタンドアロン・サーバーが稼働している必要があります。
Rational® Application Developer の、サーバーをワークスペース内のリソースで実行する構成シナリオでは、自動作成の EJB タイマーを手動で削除する必要があります。また、プログラムで作成された EJB タイマーは、自動作成の EJB タイマーとは異なり、自動的に削除されることも、このコマンドで削除されることもありません。
Network Deployment トポロジーでは、単一モジュールがトポロジー内のサーバーのサブセットにのみインストールされた場合、そのモジュールに関連付けられた自動的に作成されたタイマーは、そのサーバーのサブセットに関連付けられたスケジューラー・インスタンス (複数可) からのみ削除しなければなりません。モジュールがインストールされていないサーバーに対応するスケジューラー・インスタンスをクリーンアップする必要はありません。
ターゲット・オブジェクト: なし
- -appName
- 削除したい自動作成の EJB タイマーを要求したアプリケーションの名前。(ストリング、必須)
- -serverName
- 削除したい自動作成の EJB タイマーが含まれているアプリケーションまたはモジュールを実行するサーバーの名前。このパラメーターは、アプリケーション・サーバーのホスト名ではなく、論理名を表します。(ストリング、必須)
- -schedulerJNDIName
- このパラメーターは、削除したい自動作成の EJB タイマーを保持するスケジューラー・インスタンスの JNDI名を表します。
サーバー・インスタンスは、自動作成の EJB タイマーをサポートするために、特定のスケジューラー・インスタンスを使用するように常に構成されます。どのスケジューラー・インスタンスを使用するのかを明示して構成することができます。または、スケジューラー・インスタンスを明示しないで構成するという選択ができます。後者の場合、デフォルトのスケジューラー・インスタンスが使用されます。
削除したい自動作成の EJB タイマーを含むスケジューラー・インスタンスが、サーバーに対して現在構成されているスケジューラー・インスタンスと同じ場合、このパラメーターを省略することができます。この場合は、コマンドで構成を検査し、現在構成されているスケジューラー・インスタンスを検出し、そしてそれを使用します。
ただし、現在構成されているスケジューラー・インスタンスが、削除する EJB タイマーを含むスケジューラー・インスタンスではない 場合は、対象のタイマーを含むスケジューラー・インスタンスの JNDI 名を指定してください。(ストリング、オプション)
- -nodeName
- サーバーを含むノードの名前。(ストリング、必須)
- -moduleName
- 削除したい自動作成の EJB タイマーを要求したモジュールの名前。タイマーがどのモジュールに定義されているかに関係なく、アプリケーション内の自動的に作成されたタイマーをすべて削除する場合は、このパラメーターは省略されます。このパラメーターは、アプリケーション内の 1 つのモジュールから要求された自動的に作成されたタイマーを削除する場合にのみ指定します。同じアプリケーション内の別のモジュールから要求されたタイマーの場合は指定しません。(ストリング、オプション)
戻り値: なし
- WebSphere® Application Server は、以下の条件がすべて満たされた場合に、自動作成の EJB タイマーを削除しようとします。
- 以下の処置のうちの 1 つが実行されます。
- アプリケーションのアンインストール
- アプリケーションの更新
- モジュールのアンインストール
- モジュールの更新
- 処置が接続モード (wsadmin -conntype none ではない) で実行されました。
- 必要なサーバーが処置時に稼働していました。
- Network Deployment トポロジーの場合、デプロイメント・マネージャー、ノード・エージェント、および自動作成の EJB タイマーを含む管理対象サーバーが、すべて稼働していた。
- ベース・トポロジーの場合、スタンドアロン・サーバーが稼働していました。
- 正しいフォローアップ処置が実行されました。
- Network Deployment トポロジーの場合、変更を保存し、その変更をノード・エージェントと同期させます。変更の保存で、同期を行っていない場合、自動作成 EJB タイマーは削除されません。 自動作成の EJB タイマーは、同期処理中にのみ削除されます。
- ベース・トポロジーの場合、変更を保存します。
- スケジューラー・インスタンスをサポートしているデータベースが実行中でした。
- 以下の処置のうちの 1 つが実行されます。
- WebSphere Application
Server は、以下の条件のうちいずれか が発生した場合に、自動作成の EJB タイマーを削除しません。
- アプリケーションまたはモジュールの、更新およびアンインストール以外の処置が行われます。
- 処置 (アプリケーションやモジュールのアンインストールまたは更新の場合でも) が切断モードで行われました。
- 必要なサーバーが稼働していませんでした。
- Network Deployment トポロジーの場合、デプロイメント・マネージャー、ノード・エージェント、または管理対象サーバーが稼働していませんでした。
- ベース・トポロジーの場合、スタンドアロン・サーバーが稼働していませんでした。
- 正しいフォローアップ処置が実行されませんでした。
- Network Deployment トポロジーの場合、保存または同期化のいずれかが行われませんでした。
- ベース・トポロジーの場合、保存が行われませんでした。
- スケジューラー・インスタンスをサポートしているデータベースが実行していませんでした。
エラーが発生する場合、アプリケーション・サーバーが自動作成の EJB タイマーを削除しようとしなかった場合、または、自動作成の EJB タイマーが削除されたかどうか確信がない場合は、手動で removeAutomaticEJBTimers コマンドを実行し、自動作成の EJB タイマーが削除されるようにします。自動的に作成されたタイマーが実際にスケジューラー・インスタンスから削除されていた場合、コマンドの実行は必要ありませんが、実行しても悪影響はありません。
クラスター環境で稼働し、ご使用のクラスターに複数のノードが含まれ、同じクラスター・レベルのスケジューラー・インスタンスにマップされたサーバーがそれらのノードにそれぞれ含まれている場合、自動的に作成されたタイマーはその複数サーバーのうちの 1 つから削除するだけで構いません。これは、共有スケジューラー・インスタンスが更新されると、その共有スケジューラー・インスタンスを使用しているすべてのサーバーは、その変更を認識するからです。
この結果、1 つのノード内のサーバーが稼働しておらず、自動タイマーをサーバーから削除できなかったというログ警告を受け取ったけれども、サーバーが、正常にクリアされた別のノード内のサーバーとクラスター・レベルのスケジューラー・インスタンスを共有していることが明らかな場合は、共有スケジューラー・インスタンスは既に更新されているため、ユーザー処置は必要ありません。
これは、1 つのクラスターに複数のサーバーがあり、それらがすべて同じノードの一部で、単一のクラスター・レベルのスケジューラー・インスタンスを共有し、それらのクラスター・メンバーの 1 つ以上が稼働していない場合にも当てはまります。この場合、アプリケーション・サーバーは、自動タイマーをそれらのサーバーから削除できなかったというログ警告を出します。 ただし、サーバーが共通のスケジューラー・インスタンスを共有していることが明らかで、クラスター・メンバーの 1 つが正常にクリアされた場合は、共有スケジューラー・インスタンスは既に更新されているため、ユーザー処置は必要ありません。
Network Deployment トポロジーで複数のサーバーが稼働する場合は、使用されているスケジューラーのタイプ (デフォルトとカスタム構成済み) によって、スケジューラーのクリーンアップに関するパフォーマンス上の影響があります。デフォルトの EJBContainer スケジューラーはサーバーごとに固有です。デフォルトの EJBContainer スケジューラー・インスタンスを使用していて、サーバーが 5 台の場合、5 つの固有のスケジューラー・インスタンスがあり、アプリケーションが更新または削除されると自動タイマーを 5 台のサーバーすべてから削除する必要があることを意味します。ただし、単一の共有カスタム構成済みスケジューラー・インスタンスを使用している場合は、自動タイマーを 1 つのスケジューラー・インスタンスから 1 度だけ削除してください。
例 1
トポロジー:
- ワークステーション A で稼働中のデプロイメント・マネージャー。
- ワークステーション B で稼働中の ノード・エージェント。このノードを Node01 と呼びます。
- ワークステーション C で稼働中の管理対象サーバー server1。
- ワークステーション D で稼働中の管理対象サーバー server2。
- セキュリティーは使用可能になっています。
- server2 は現在、タイマーが含まれる同じスケジューラー・インスタンスを使用するように構成されています。
背景:
testApp アプリケーションが管理コンソールから接続モードでアンインストールされました。どのモジュールから要求されているかに関係なく、アプリケーション内の自動的に作成されたタイマーをすべて削除しようと考えています。
デプロイメント・マネージャー、ノード・エージェント、および server1 サーバーが稼働中で、自動 EJB タイマーは server1 から削除されました。しかし、server2 は稼働していなかったため、自動 EJB タイマーは server2 から削除されませんでした。
ここで、自動 EJB タイマーを server2 から手動で削除する必要があります。
- Jacl を使用する場合、デプロイメント・マネージャーに接続された wsadmin セッションから、以下のコード行を入力します。
$AdminTask removeAutomaticEJBTimers "-appName testApp -serverName server2 -nodeName Node01"
- Jython を使用する場合、デプロイメント・マネージャーに接続された wsadmin セッションから、以下のコード行を入力します。
AdminTask.removeAutomaticEJBTimers('-appName testApp -serverName server2 -nodeName Node01')
例 2
トポロジー:
- ワークステーション A で稼働中のスタンドアロン server1。このノードを Node01 と呼びます。
- 管理セキュリティーが使用不可になっている。
- server1 は、自動 EJB タイマーが作成されたときに、スケジューラー・インスタンス jndi/sched_1 を使用するように構成されました。しかし、server1 は、現在、スケジューラー・インスタンス jndi/sched_2 を使用するように構成されています。
背景:
アプリケーション testApp のモジュール mod1 はアンインストールされましたが、server1 はアンインストール時には jndi/sched_2 インスタンスを使用するように構成されていたため、自動 EJB タイマーはスケジューラー・インスタンス jndi/sched_1 から削除されませんでした。
ここで、自動 EJB タイマーを server1 上の jndi/sched_1 スケジューラー・インスタンスから手動で削除する必要があります。
アプリケーションには、モジュール mod1 および mod2 が含まれています。これらのモジュールは、両方とも、自動作成の EJB タイマーを要求しました。mod2 モジュールは、まだインストールされているので、このモジュールが要求した自動作成の EJB タイマーは、引き続き必要です。mod1 によって要求された自動作成の EJB タイマーのみを削除しようと考えています。
- Jacl を使用する場合、スタンドアロン・サーバー内の接続された wsadmin セッションから、以下のコード行を入力します。
$AdminTask removeAutomaticEJBTimers "-appName testApp -moduleName mod1 -serverName server1 -nodeName Node01 -schedulerJNDIName jndi/sched_1"
- Jython を使用する場合、スタンドアロン・サーバー内の接続された wsadmin セッションから、以下のコード行を入力します。
AdminTask.removeAutomaticEJBTimers('-appName testApp -moduleName mod1 -serverName server1 -nodeName Node01 -schedulerJNDIName jndi/sched_1')