- PR -

WebLogicのとクラスロードのタイミング

1
投稿者投稿内容
くりお
常連さん
会議室デビュー日: 2004/01/30
投稿数: 34
投稿日時: 2004-08-07 05:44
WebLogicのweblogic-ejb-jar.xmlにて「<initial-beans-in-free-pool>」を設定しようと考えています。

この値を設定するとクラスがロードされるタイミングは以下のように変更となると思ってよろしいでしょうか?

【変更前】"initial-beans-in-free-pool → 0に設定"
 → クラスの初回アクセス時

【変更後】"initial-beans-in-free-pool → 1に設定"
 → デプロイ及びWebLogic起動時
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-08-07 09:16
-verbose:class オプションでクラスのロード/アンロードのタイミングがわかりますよ。
くりお
常連さん
会議室デビュー日: 2004/01/30
投稿数: 34
投稿日時: 2004-08-08 02:25
ご回答ありがとうございます。

上記を試した結果
クラスロードのタイミングはまったく関係ありませんでした。
※「initial-beans-in-free-pool」を指定しなくても、
WebLogic起動時にクラスロードされていたことを確認できました。

「initial-beans-in-free-pool」を設定することでStatelessSessionBeanのプール値を設定できるとのことですが、本値はどの値にあわせて設定すべきなのかを検討しています。

1度にEJBへのアクセスが2回あると1つのStatelessSessionBeanのインスタンスで処理(1インスタンスで複数要求を処理する)はできないと考えてよろしいでしょうか?
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-08-08 03:32
EJB のメソッド呼び出しはかならずシングルスレッドで行われることが保障されています。
initial-beans-in-free-pool が 1 に設定されていて同時に複数のスレッドから同じ StatelessSessionBean へ呼び出しが行われたら max-beans-in-free-pool の数を超えない範囲内でインスタンスが生成されてメソッド呼び出しが行われます。
通常は initial-beans-in-free-pool は実行スレッド数(プロダクションモードのデフォルトで25)と同じに設定しておけばよいでしょう。

また、同時呼び出しスレッド数が max-beans-in-free-pool を超えてしまった場合は RemoteException が投げられます。
ただし allow-concurrent-calls が True に設定されている場合は例外を投げずに max-beans 以内のインスタンスでやりくりします(他のスレッドでメソッド呼び出し中はブロックされる)。

よって以下のように設定すれば Ok です。
・普通
initial-beans-in-free-pool = 実行スレッド数
max-beans-in-free-pool = 設定せず(デフォルトで1000)
->実行スレッド数以上にインスタンスが生成されることはありませんので max-beans-in-free-pool を敢えて設定する必要はありません

・1つのbean が利用するリソースがめちゃくちゃ大きい
initial-beans-in-free-pool = max-beans-in-free-pool
allow-concurrent-calls = True
->生成される bean の数を抑えかつ確実にサービスを提供します
(スループットを考えると MDB で実装して非同期にした方がいいかも)
1

スキルアップ/キャリアアップ(JOB@IT)