ColdFusion-启用ORM会停止ApplicationStart的运行
谁能向我解释一下这种行为吗? 我在ApplicationStart的ColdFusion-启用ORM会停止ApplicationStart的运行,orm,coldfusion,railo,application.cfc,Orm,Coldfusion,Railo,Application.cfc,谁能向我解释一下这种行为吗? 我在ApplicationStart的中设置了一系列应用程序范围的设置,其中一些设置在onSessionStart中提到。然而,当我启用ORM时,似乎onApplicationStart根本没有运行,因此我的onSessionStart方法失败 我花了一段时间才弄明白这是个问题,通常我会在开发过程中通过编程方式点击applicationstart上的进行测试。因此,只有在重新启动服务后,我才发现一个症状。最终,我将其追溯到ORM,它非常简单: THIS.ormena
中设置了一系列应用程序范围的设置,其中一些设置在onSessionStart
中提到。然而,当我启用ORM时,似乎onApplicationStart根本没有运行,因此我的onSessionStart方法失败
我花了一段时间才弄明白这是个问题,通常我会在开发过程中通过编程方式点击applicationstart上的进行测试。因此,只有在重新启动服务后,我才发现一个症状。最终,我将其追溯到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>
THIS.Name=“TestyMcTestable”
THIS.datasource='Test';
THIS.ormenabled=true;
My index.cfm只包含请求范围的转储。
如果我删除orm设置,它会按预期返回。但是,在设置中,应用程序启动时设置的变量完全丢失,并且应用程序启动时似乎根本没有运行
我正在通过在请求之间更改应用程序的名称进行测试,但只是为了确定我也重新启动了服务
我错过什么了吗?这是记录在案的行为吗?我在Railo上运行这个程序-我还没有在ACF上进行过广泛的测试,但是最初的问题也发生在那里,所以我认为这是相同的原因
有人能解释一下吗?OnApplicationStart仅在应用程序首次在内存中创建时运行,并且在应用程序的生命周期内仅运行一次,除非您显式调用ApplicationStop()之类的东西;或者再次调用该方法,等等。此外,您设置的应用程序范围中的变量是一个请求范围变量,该变量仅在一个请求的生存期内存在。与onSessionStart相同,该请求变量仅在首次创建用户会话时存在
第一个请求:(ApplicationStart&SessionStart Fire)
第二个请求:(应用程序/会话启动不启动)
这是在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>
this.Name=“TestyMcTestable”;
this.ormenabled=true;
this.datasource='cfartgallery';
this.sessionManagement=true;
或者,如果您将请求变量放在OnRequestStart中,它们每次都会出现。希望这有帮助。原来这是位置设置的问题。在最初的应用程序中,它指向了一个错误的位置。当我剥离Application.cfc进行测试时,我删除了这个设置——没有意识到默认行为是从根目录遍历文件夹以查找持久的cfc。
在这个过程中,应用程序似乎遇到了一个问题,应用程序启动失败,但继续运行Application.cfc中的其他功能
Railo小组的一名成员发现了在Hibernate引擎读取的非持久性CFC中使用伪构造函数的问题。我不确定这是否导致了这个问题,但这似乎很有可能。您是否尝试过使用cfset
而不是cfscript
,您是否也尝试过提供或msettings
结构来查看发生了什么?我认为这些都不重要,但如果它是一个bug,陌生人可以修复它。在你的应用程序的非精简版本中。cfc
你是否启用了会话管理
?在本例中,您不需要这样做。在非精简版本中,我启用了会话管理。不过,这两种方式似乎都没有任何区别。我尝试移动到cfset并提供一个ormsettings结构,但没有成功。谢谢你!我会在每次请求时更改应用程序的名称,以确保onApplicationStart正在启动(或者至少应该启动)。为了确保这一点,我在重启CF服务后进行了测试。如果我在设置中启用ORM,即使在第一次请求时,onApplicationStart也不会启动。我无法在ACF中复制。我会让Railo去看看我能否复制你看到的。
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
<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>