3

誰かが私にこの振る舞いを説明できますか?で多数のアプリケーションスコープ設定を設定しましたonApplicationStartが、そのうちのいくつかはで参照されていonSessionStartます。ただし、ORMを有効にすると、onApplicationStartがまったく実行されていないように見えるため、onSessionStartメソッドが失敗します。

これが問題であると理解するのに少し時間がかかりました。通常、onApplicationStart開発中にプログラムでヒットしてテストします。そのため、症状が出たのはサービスを再開してからでした。最終的に私はそれをORMにさかのぼり、それは次のように単純です。

THIS.ormenabled = true; // Error
THIS.ormenabled = false; // Everything peachy

Application.cfcを削除し、さまざまなメソッドにいくつかのタイムスタンプを入れて、何が実行されているかを確認できるようにしました。

<cfscript>
    THIS.Name = "TestyMcTestable"
    THIS.datasource = 'Test';        
    THIS.ormenabled = true;
</cfscript>    


<cfsetting
    requesttimeout="20"
    showdebugoutput="false"
    enablecfoutputonly="false"
    />


<cfset request.pseudo = Now() />
<cfset sleep(1500)>

<cffunction name="OnApplicationStart" access="public" returntype="boolean" output="false">
    <cfset request.application = Now() />
    <cfset sleep(1500)>
    <!--- Return out. --->
    <cfreturn true />
</cffunction>


<cffunction name="OnSessionStart" access="public" returntype="void" output="false">
    <cfset request.session = Now() />
    <cfset sleep(1500)>
    <!--- Return out. --->
    <cfreturn />
</cffunction>


<cffunction name="OnRequestStart" access="public" returntype="boolean" output="false">
    <cfargument name="TargetPage" type="string" required="true" />
     <cfset request.requeststart = Now() />
     <cfset sleep(1500)>
    <!--- Return out. --->
    <cfreturn true />
</cffunction>


<cffunction name="OnRequest" access="public" returntype="void" output="true">
     <cfargument name="TargetPage" type="string" required="true" />
     <cfset request.request = Now() />
     <cfset sleep(1500)>

    <!--- Include the requested page. --->
    <cfinclude template="#ARGUMENTS.TargetPage#" />

    <!--- Return out. --->
    <cfreturn />
</cffunction>

私のindex.cfmには、リクエストスコープのダンプが含まれています。orm設定を削除すると、すべて期待どおりに戻ります。ただし、そこに設定があると、アプリケーションの開始時に設定された変数が完全に失われ、onApplicationStartがまったく実行されていないように見えます。

リクエストの合間にアプリケーションの名前を変更してテストしていますが、念のため、サービスも再起動しました。

私は何かが足りないのですか?これは文書化された動作ですか?私はこれをRailoで実行しています-私はACFで広範囲にテストしていませんが、最初の問題はそこでも発生したので、同じ原因であると思います。

誰かがこれに光を当てることができますか?

4

2 に答える 2

0

OnApplicationStartは、アプリケーションが最初にメモリに作成されたときにのみ実行され、ApplicationStop()などを明示的に呼び出さない限り、アプリケーションの存続期間中に1回だけ実行されます。または、メソッドを再度呼び出すなど。さらに、設定したアプリケーションスコープの変数は、1つのリクエストの存続期間中にのみ存在するリクエストスコープ変数です。onSessionStartと同様に、その要求変数は、ユーザーセッションが初めて作成されたときにのみ存在します。

最初のリクエスト:(ApplicationStart&SessionStart Fire)

struct: request
application     {ts '2013-03-20 18:50:17'}
cfdumpinited    false
pseudo  {ts '2013-03-20 18:50:20'}
session     {ts '2013-03-20 18:50:19'}

struct: session
cfid    5600
cftoken     a8bf96c34c2cac7a-68400880-E1E6-ACDF-3B204DBBCD9A04A9
session     {ts '2013-03-20 18:50:19'}
sessionid   TESTYMCTESTABLE_5600_a8bf96c34c2cac7a-68400880-E1E6-ACDF-3B204DBBCD9A04A9
urltoken    CFID=5600&CFTOKEN=a8bf96c34c2cac7a-68400880-E1E6-ACDF-3B204DBBCD9A04A9

2番目のリクエスト:(アプリケーション/SessionStartは起動しません)

struct: request
cfdumpinited    false
pseudo  {ts '2013-03-20 18:50:59'}

struct: session
cfid    5600
cftoken     a8bf96c34c2cac7a-68400880-E1E6-ACDF-3B204DBBCD9A04A9
session     {ts '2013-03-20 18:50:19'}
sessionid   TESTYMCTESTABLE_5600_a8bf96c34c2cac7a-68400880-E1E6-ACDF-3B204DBBCD9A04A9
urltoken    CFID=5600&CFTOKEN=a8bf96c34c2cac7a-68400880-E1E6-ACDF-3B204DBBCD9A04A9

これはCF9でテストされました。

application.cfm

<cfcomponent>
<cfscript>
    this.Name = "TestyMcTestable";
    this.ormenabled = true;
    this.datasource = 'cfartgallery';
    this.sessionManagement = true;
</cfscript>

<cfset request.pseudo = Now() />
<cfset sleep(1500)>

<cffunction name="OnApplicationStart" access="public" returntype="boolean" output="false">
    <cfset request.application = Now() />
    <cfset session.application = Now() />
    <cfset sleep(1500)>
    <!--- Return out. --->
    <cfreturn true />
</cffunction>


<cffunction name="OnSessionStart" access="public" returntype="void" output="false">
    <cfset request.session = Now() />
    <cfset session.session = Now() />
    <cfset sleep(1500)>
    <!--- Return out. --->
    <cfreturn />
</cffunction>

<cffunction name="OnRequestStart">

</cffunction>

</cfcomponent>

または、リクエスト変数をOnRequestStartに入れると、毎回そこにあります。お役に立てれば。

于 2013-03-21T00:56:18.910 に答える
0

これはcfclocation設定の問題であることがわかりました。元のアプリでは、間違った場所を指していた。テストのためにApplication.cfcを削除したとき、この設定を削除しました。デフォルトの動作では、ルートからフォルダーをトラバースして永続的なCFCを探すことに気づいていません。その場合、アプリはonApplicationStartから爆破されたプロセス中に問題が発生したようですが、Application.cfcの他の関数を実行し続けました。

Railoグループのメンバーの1人が、Hibernateエンジンによって読み取られる非永続CFCで疑似コンストラクターを使用する際の問題を特定しました。それがこの問題の原因であるかどうかはわかりませんが、可能性が高いようです。

于 2013-03-26T00:31:40.667 に答える