お疲れ様です。石橋です。
いろいろそちらでも調査頂いている様で、本当にありがとうございます。
私も調査をしていますが、なかなか本筋にたどり着けずにいます。
ためしにNetBeansのプロファイルなども使ってみましたが、よく分かりませんでした。
今、試しにSessionBeanの@PreDestroyでログ出力させて、タイマーが動かなくなる時間との
関連を見てみたのですが、確かにSessionBeanの破棄とTimerの停止はあまり
関係なさそうです。
今、glassfishの管理画面を見ていて気がついたのですが、
Configuration>EJB Container>EJB Timer Service
というタグがあり、少し弄って見ようと思います。
Shinya Ogino さんは書きました:
> お疲れさまです。
>
> 助けになっておらずすみません。
> ご存じかとは思いますが、管理コンソールで、
>
> 設定 > EJB コンテナ
>
> からプールの設定を変更することができます。また、
>
> 設定 > 監視
>
> にて EJB コンテナの監視レベルを例えば HIGH と設定しておくと、
>
> アプリケーションサーバー > 監視 > アプリケーション
>
> からご自身のアプリケーションの EJB の生成/破棄などの統計を
> 見ることができます。念のため試しましたが、セッションビーンの
> 生成/破棄が繰り返されても Timer の通知は継続してました。
>
> 以上、調査の助けになれば。
>
> 荻布
>
> 石橋 和洋 wrote:
>> 石橋です。お疲れ様です。
>>
>> テストプログラムを作成して動かしたところ、特にTimerが落ちる問題は発生しませんでした。
>> Timer周りのコードは殆ど同じなんですが・・・
>>
>> よく考えると、落ちるとtimerがnullになってしまっているという事は、別人が勝手にnullに書き換える
>> 事はありえないんで(privateメンバですし)、StatelessSessionBeanインスタンスが別のものになって
>> しまっている可能性が高いように思います。
>>
>> 以下想像ですが、
>> Timer用のSessionBeanだけだと何も起きない事から考えると、他にいろいろなBeanが存在する状況でのみ
>> 発生するように思えます。
>> メモリの利用のせいなのか、スレッドプールの利用のせいなのかわかりませんが、それらの理由で
>> SessionBeanが一旦消え、別のSessionBeanに切り替わった段階でエラーになる・・・のではないでしょうか。
>>
>> 10分というのは、きっとSessinBeanが死ぬまでの期間なんでしょうか。
>> 本来は、TimerはSessionBeanと関係なく生き続けるはず・・・ですよね。
>>
>>
>> 石橋 和洋 さんは書きました:
>>> こんばんわ。
>>> 石橋です。
>>>
>>> コメントアウトされているほうでも、発生しています。
>>>
>>> 今テストプログラム作成中です。。。
>>> 少々おまちください。
>>>
>>>
>>> Shinya Ogino さんは書きました:
>>>> どうもありがとうございます。
>>>>
>>>> コメントアウトされている方の handleTimeout でも現象は起きますか?
>>>>
>>>>> (再現するためのプログラムという事は、アプリの部分ではなく、再現するための
>>>>> 最小セットを作らないといけないと言う事ですよね・・・そちらも少しおまちを)
>>>> 仮に GlassFish のバグとして報告することになった場合にも
>>>> あると良いのでできればよろしくお願いします。
>>>>
>>>> 荻布
>>>>
>>>> 石橋 和洋 wrote:
>>>>> 荻布さま。こんばんわ。
>>>>> 早速のご返事ありがとうございます。
>>>>>
>>>>> 再現されませんか・・・ということはコードの問題なんでしょうか。
>>>>>
>>>>> ログにはなにも出力されていないようです。
>>>>> server.logですが、現象が何時起きるのか監視が難しいのですが取ってみます。
>>>>>
>>>>>
>>>>> コードは以下のとおりです。不足ありましたらご指摘ください。
>>>>> (極力元のまま貼り付けます)
>>>>> (再現するためのプログラムという事は、アプリの部分ではなく、再現するための
>>>>> 最小セットを作らないといけないと言う事ですよね・・・そちらも少しおまちを)
>>>>>
>>>>> -------------------------------
>>>>> @Stateless
>>>>> public class ActionFacadeBean implements ActionFacade{
>>>>>
>>>>> @Resource
>>>>> private TimerService timerService;
>>>>>
>>>>> private Timer timer = null;
>>>>>
>>>>> public void startTimer(Date startdate, long interval ){
>>>>> Collection<Timer> timers = timerService.getTimers();
>>>>> for(Timer t : timers) t.cancel();
>>>>> if(interval==0){
>>>>> timer = null;
>>>>> return;
>>>>> }
>>>>> timer = timerService.createTimer(startdate, interval, null);
>>>>> System.out.println("**** TIMER STARTED AT " + new Date());
>>>>>
>>>>> }
>>>>> public Timer getTimer(){
>>>>> return timer;
>>>>> }
>>>>>
>>>>> /**
>>>>> * アクションタイマーが実行されたときに、実行するメソッド。
>>>>> *
>>>>> * @param timer
>>>>> */
>>>>> @Timeout
>>>>>
>>>>> public void handleTimeout(Timer timer){
>>>>> try{
>>>>> Collection<TimerAction> actions = em.createNamedQuery("findTimerAction").getResultList();
>>>>> for(TimerAction a : actions){
>>>>> System.out.println("************実行中のタイマーアクション:"+
>>>>> a.getId());
>>>>> Collection<Apply> applies =
>>>>> applyfacade.findApplyByStatus(a.getStatus());
>>>>> a.fireAll(applies);
>>>>> }
>>>>> }catch(Throwable e){
>>>>> System.out.println("************アクションタイマーの実行中にエラーが
>>>>> 発生しました。");
>>>>> e.printStackTrace();
>>>>> }
>>>>> }
>>>>> /*
>>>>> public void handleTimeout(Timer time){
>>>>> System.out.println("*************TIMER WORK AT "+new Date());
>>>>> }*/
>>>>> -----------------------------
>>>>>
>>>>>
>>>>>
>>>>> Shinya Ogino さんは書きました:
>>>>>> 石橋さん、こんにちは。
>>>>>>
>>>>>> 少し試してみたのですが、こちらで再現できていません。
>>>>>> 下記、連絡頂くことはできますか?
>>>>>> - エラーなどがログに出力されていたらその内容
>>>>>> domains/ドメイン/logs/server.log
>>>>>> - 再現するためのプログラム
>>>>>>
>>>>>> 荻布
>>>>>>
>>>>>> 石橋 和洋 wrote:
>>>>>>> お世話になります。石橋といいます。
>>>>>>>
>>>>>>> 最近本MLに加入しました。既メンバーの皆様、よろしくお願いします。
>>>>>>>
>>>>>>> 早速ですが、glassfishについて質問があります。
>>>>>>> ご存知の方がおられましたらお教えいただきたいと思います。
>>>>>>>
>>>>>>> 製品のバージョン:
>>>>>>> glassfish v2.1
>>>>>>>
>>>>>>> 質問の内容:
>>>>>>> glassfishのTimerServiceを利用しているのですが、Intervalをきっかり600秒以上に
>>>>>>> すると、2時間ほどでTimerが落ちてしまいます。600秒だと落ちずにずっと
>>>>>>> 動き続けています。
>>>>>>> これは、glassfishの仕様なのでしょうか?
>>>>>>> 制限を解除するような設定などはないのでしょうか?
>>>>>>>
>>>>>>> よろしくお願いします。
>
>