1

私は CF9 アプリケーションに取り組んでおり、時々必要となるプロセスがあります。applicationStop()

この機能についての私の理解では、アプリがシャットダウンされ、次のリクエストでアプリが再起動されるということです。

これを使用して、アプリケーション スコープの変数とサード パーティのものをリロードしていますが、関数の処理が完了onApplicationStart()する前に関数が呼び出されているように見えます。onApplicationEnd()

これが機能の意図された機能であるかどうか、誰でも確認できますapplicationStop()か? それが私に引き起こしている問題は、onApplicationEnd()で再初期化したいいくつかのアプリケーションスコープのものをリセットしていますが、終了onApplicationStart()するまで待たないとonApplicationEnd()一貫性のない状態になることです。


編集 もともと、問題は、onApplicationEnd() がまだ実行されている間に onApplicationStart() が呼び出されることが予想される動作であるかどうかに関するものでした。それを確認するために、onApplicationEnd() でロックを使用して問題を修正するつもりでした。リロードを終了しました。

ただし、ロックを追加しました。

lock scope="application" type="exlusive" timeout="5" {

そして、ブロック全体を無視しているように見えます-コード(ロギングを含む)は実行されず、例外はスローされません(実行前にロックがタイムアウトした場合、例外がスローされますか?)。これは、onApplicationEnd()?

4

1 に答える 1

3

この答えはわからなかったので、適度に徹底的に調査し、結果を公開しました。

肝心なのは、それが起こるので、あなたはそれを期待するべきだということです. onApplicationStart()/メソッドはイベントハンドラーであり、イベント自体ではないため、これはバグではないと思います。onApplicationEnd()そのため、実行に時間がかかり、その間に別のメソッドも呼び出される可能性があることは完全に正当です。

ただし、実際には、それぞれのコードが同時に実行されることは望ましくないため、同期する必要があると思います。

ロックのことはチェックしていませんが、ブログ記事で言及したコーヒーの世話をするかもしれません。

于 2013-04-08T21:40:03.293 に答える