- PR -

【WebLogic】ステートフルセッションBEANの削除タイミングについて

1
投稿者投稿内容
夜一
会議室デビュー日: 2004/10/18
投稿数: 2
投稿日時: 2004-10-18 21:18
WebLogic Server(7.0.2.0)の環境において
下記の例外が発生しました。

[Catch Exception]com.ec_one.cBank.framework.control.GeneralFailureException: fail to handleEvent: Bean has been deleted.

Start server side stack trace:
java.rmi.NoSuchObjectException: Bean has been deleted.
at weblogic.ejb20.swap.DiskSwap.read(DiskSwap.java:172)
at weblogic.ejb20.manager.StatefulSessionManager.getBean(StatefulSessionManager.java:271)
at weblogic.ejb20.manager.StatefulSessionManager.preInvoke(StatefulSessionManager.java:341)
at weblogic.ejb20.internal.BaseEJBObject.preInvoke(BaseEJBObject.java:127)
at weblogic.ejb20.internal.StatefulEJBObject.preInvoke(StatefulEJBObject.java:179)
at com.ec_one.cBank.retail.client.RetailEJBControllerEJB_7bfw52_EOImpl.handleEvent(RetailEJBControllerEJB_7bfw52_EOImpl.java:29)
at com.ec_one.cBank.retail.client.RetailEJBControllerEJB_7bfw52_EOImpl_WLSkel.invoke(Unknown Source)
at weblogic.rmi.internal.activation.ActivatableServerRef.invoke(ActivatableServerRef.java:87)
at weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:313)
at weblogic.security.service.SecurityServiceManager.runAs(SecurityServiceManager.java:821)
at weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:308)
at weblogic.rmi.internal.BasicExecuteRequest.execute(BasicExecuteRequest.java:30)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:213)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:189)
End server side stack trace

当方で※考えた原因が外れたため
他にどのような原因が考えられるかご教授願いたいのですが。

※考えた原因
問題のEJBの「weblogic-ejb-jar.xml」の情報

<weblogic-ejb-jar>
<weblogic-enterprise-bean>
<ejb-name>XXXEJBController</ejb-name>

<stateful-session-descriptor>
<stateful-session-cache>
<max-beans-in-cache>1000</max-beans-in-cache>
<idle-timeout-seconds>600</idle-timeout-seconds>
</stateful-session-cache>
</stateful-session-descriptor>
<reference-descriptor>
<ejb-reference-description>
<ejb-ref-name>ejb/AnotherEJB</ejb-ref-name>
<jndi-name>ejb/AnotherEJB</jndi-name>
</ejb-reference-description>
</reference-descriptor>
<jndi-name>ejb/XXXEJBController</jndi-name>
</weblogic-enterprise-bean>

から「XXXEJBController」が「idle-timeout-seconds:10分」を
越えて非アクティブ状態となり、Bean のインスタンスが削除されたため
(cache-typeがデフォルトのNRUのためパッシベーションは起きない)
だと考えたのですが、別環境で試してみたところ
30分経過しても尚、問題なく動作しました。


何か問題の箇所や勘違いしている点がありましたらご教授願いたいのですが、、、
宜しくお願い致します。
YOU@IT
ぬし
会議室デビュー日: 2002/03/29
投稿数: 284
お住まい・勤務地: 大阪
投稿日時: 2004-10-21 09:59
当方もcFrameworkで同じ現象に遭遇したことがあります。

結局、システムの実稼動には直接影響なかったので、
原因不明(と言うか深く調査していない)のままで放置していますが、
EC-Oneに問い合わせてみてはいかがでしょうか。
(株)ぽち
ぬし
会議室デビュー日: 2002/09/10
投稿数: 376
投稿日時: 2004-10-21 10:08
同じくcFramework1.5(??)ってなったことありますね。
# version正確なのは忘れました。

当時はその他のEJBが全てステートレスだったこともあり
EJBControllerをステートレスにして回避してた記憶が。。

同じく問い合わせがいいのかな。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-10-22 15:58
NoSuchObjectException は既に削除された StatefulSessionBean のメソッド呼び出しを試みた場合に発生します。
idle-timeout-seconds(デフォルトで600秒) 以上Bean にさわらない状態で呼び出したということはないでしょうか?
サーブレット等、EJB のクライアントの生存期間がそれよりも長い場合は同じ程度に合わせる必要があります。
より長期間にわたって生存している必要のあるオブジェクトであれば EntityBean として実装しましょう。
・ステートフル セッション EJB のキャッシュとパッシベーション
http://edocs.beasys.co.jp/e-docs/wls/docs81/ejb/session.html#1121360

[ メッセージ編集済み 編集者: インギ 編集日時 2004-10-22 15:59 ]
夜一
会議室デビュー日: 2004/10/18
投稿数: 2
投稿日時: 2004-11-01 23:28
質問を投げておきながら放置してしまってすいませんでした。
まず結果ですが、やはりEJBが削除されておりました。
MAX−BEANS−IN−CASHE以上の数のEJBを
強制的に取得し、アイドルタイムの経過後にメソッドコールという
再現を試みたところ再現しました。
前回再現しなかったのは
MAX−BEANS−IN−CASHEに達していなかったため
パッシベーション及びEJBの削除が行われてなかったためでした。
http://edocs.beasys.co.jp/e-docs/wls/docs81/ejb/DDreference-ejb-jar.html#1113204
にあるように3以下なら8として扱うと書いてあるので
単純化するために5を指定して試したいたのが悪かったかもしれません。
(今は3は8の誤植か?と思っています。)
ちなみにEC−ONE殿からは1日放っておいても平気でした。とMAX−BEANS−IN−CASHを無視したお答えをいただきました。
YOU様、ぽち様、インギ様、アイドルタイムを伸ばす、キャッシュサイズを増やす以外に回避策が浮かんでいなかった所返信ありがとうございました。
1

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