为什么ColdFusion隐式Setter最终会进行网络调用?

为什么ColdFusion隐式Setter最终会进行网络调用?,coldfusion,Coldfusion,我在CFC的init()方法中有一个隐式setter。我观察到(使用Fusion Reactor,并通过错误消息)对setActive(false)的简单调用最终导致联网。我不知道为什么ColdFusion在使用ColdFusion 9引入的隐式setter设置此值时会做这么多工作 我正在运行最新的ColdFusion 9.01,并应用了所有修补程序更新 你知道为什么ColdFusion会遇到这么多麻烦吗 谢谢 我的CFC的初始方法 /* Constructor @user_id A v

我在CFC的init()方法中有一个隐式setter。我观察到(使用Fusion Reactor,并通过错误消息)对setActive(false)的简单调用最终导致联网。我不知道为什么ColdFusion在使用ColdFusion 9引入的隐式setter设置此值时会做这么多工作

我正在运行最新的ColdFusion 9.01,并应用了所有修补程序更新

你知道为什么ColdFusion会遇到这么多麻烦吗

谢谢

我的CFC的初始方法

/* Constructor
    @user_id A valid User_ID. If provided, the User will self-populate.
*/
public shared.models.objects.User function init (numeric user_id = -1) {
    super.init(argumentCollection=arguments);

    // Prepare structs required for 'adding' methods
    clearRoles();
    setActive(false);  // <--- THIS IS THE LINE 

    setUser_ID(user_id);

    settings = {};

    defaultLanguage = new shared.models.objects.Language();

    setLanguages( [defaultLanguage] );
    setLanguage( defaultLanguage );

    if (user_id == -1) {
        // Construct a 'blank' User
        // addRole('Contributor');
        setRequirePasswordChange(false);
    } else {
        // Attempt to populate a user
        populate();
    }

    return this;
}

我遇到了同样的问题。我相信我可以添加一些东西,但最终我认为这里有一个CF缺陷,我将尝试详细说明

堆栈跟踪中的第一个注意事项是:

    at coldfusion.runtime.CgiScope.resolve(CgiScope.java:221)
    at coldfusion.runtime.CgiScope.containsName(CgiScope.java:301)
    at coldfusion.runtime.CgiScope.search(CgiScope.java:334)
    at coldfusion.runtime.NeoPageContext.searchScopes(NeoPageContext.java:766)
    at coldfusion.runtime.NeoPageContext.findAttribute(NeoPageContext.java:638)
当ColdFusion试图解析一个未划分范围的变量时,它将按照范围的优先顺序来测试每个范围。如果它一直到达CGI范围,CF服务器将尝试向Web服务器连接器请求请求头中的CGI信息。反过来,连接器尝试从保持TCP连接的连接器句柄读回浏览器。您在此原始消息中看到的网络连接可能是试图通过TCP从浏览器收集某些CGI属性的连接器

如果浏览器连接不再处于活动状态,例如用户关闭了浏览器,单击了其他位置,或者网络中断,那么TCP连接可能“过时”。在这种情况下,您将在如下日志中看到堆栈跟踪,主消息为“**读取头时出错”

再次得出的结论是,如果浏览器连接已断开,则 在执行CGI查找时,您的代码可能会显示“reading header”错误,这可能是由于您的意图,也可能是因为您在非作用域变量名上使用了isDefined

这只是一些相关的背景信息。此问题与此线程中的ORM问题相交

我发现在ColdFusion 9.01中,有时对隐式setter的调用会导致ColdFusion尝试解析setter方法,就像它是一个属性一样,并且它会查看CGI范围以尝试找到它

我在此处(部分)显示了以下实体:

请注意,它扩展了myBaseClass,如下(部分)所示:

在某些情况下,当请求使用实体的模板时,模板请求会无限期地挂在浏览器中,地址栏会旋转。稍后查看日志时,我会发现请求的相关条目显示“读取头时出错”

这个堆栈跟踪告诉我ColdFusion试图解析隐式setter,并试图通过向连接器请求相同名称的HTTP请求头,在CGI范围内找到它

对我来说,试图通过在CGI作用域中搜索请求头来解析隐式getter似乎是ColdFusion的缺陷


意见?

您的CFC是否扩展了另一个可能明确定义了setActive的组件?此外,您是否为CFC(或您可能扩展的CFC)定义了onMissingMethod函数?@JakeFeasel否,没有其他setActive()方法,也没有onMissingMethod()。谢谢。您的用户.cfc的第131行是什么?@StephenMoretti setActive(false);//记录2个缺陷:和
    at coldfusion.runtime.CgiScope.resolve(CgiScope.java:221)
    at coldfusion.runtime.CgiScope.containsName(CgiScope.java:301)
    at coldfusion.runtime.CgiScope.search(CgiScope.java:334)
    at coldfusion.runtime.NeoPageContext.searchScopes(NeoPageContext.java:766)
    at coldfusion.runtime.NeoPageContext.findAttribute(NeoPageContext.java:638)
03/06 13:45:52 error Error while reading header <headername>
java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
...
at coldfusion.runtime.CgiScope.resolve(CgiScope.java:221)
at coldfusion.runtime.CgiScope.containsName(CgiScope.java:301)
at coldfusion.runtime.CgiScope.search(CgiScope.java:334)
    error Error while reading header S_UNABLE
java.net.SocketTimeoutException: Read timed out
    at java.net.SocketInputStream.socketRead0(Native Method)
          ...
    at coldfusion.runtime.CgiScope.resolve(CgiScope.java:221)
    at coldfusion.runtime.CgiScope.containsName(CgiScope.java:301)
    at coldfusion.runtime.CgiScope.search(CgiScope.java:334)
          ...
    at cfsavecontent2ecfm1472308084.runPage(E:\cf9_final\cfusion\wwwroot\WEB-INF\cftags\savecontent.cfm:11)
          ...
    at cfexception_en2exml1502993924.runPage(D:\JRun4\servers\cfusion\cfusion.ear\cfusion.war\WEB-INF\exception\exception_en.xml:52)
          ...
    at cfdetail2ecfm1809038875.runPage(D:\JRun4\servers\cfusion\cfusion.ear\cfusion.war\WEB-INF\exception\detail.cfm:35)
          ...
    at cfApplicationException2ecfm797577125.runPage(D:\JRun4\servers\cfusion\cfusion.ear\cfusion.war\WEB-INF\exception\coldfusion\runtime\ApplicationException.cfm:2)
component persistent="true" table="myTable" output="false" extends="myBaseClass" {
property name="myProperty" column="myProperty" type="date" ormtype="timestamp";
component {
public void function doSomething(){
    if (hasProperty('myProperty'))
        setMyProperty(now());
}
                03/06 13:45:52 error Error while reading header SETMYPROPRTY
            java.net.SocketTimeoutException: Read timed out
            at java.net.SocketInputStream.socketRead0(Native Method)
            ...
            at coldfusion.runtime.CgiScope.resolve(CgiScope.java:221)
            at coldfusion.runtime.CgiScope.containsName(CgiScope.java:301)
            at coldfusion.runtime.CgiScope.search(CgiScope.java:334)
            ...                
            at cfmybaseclass2ecfc1915167844$funcDOSOMETHING.runFunction(X:\MyApp\myBaseClass.cfc:8)
            ...                
            at coldfusion.orm.hibernate.HibernateEventHandler.onFlushDirty(HibernateEventHandler.java:130)
            ...                
            at coldfusion.orm.hibernate.HibernatePersistenceManager.onCommit(HibernatePersistenceManager.java:950)
            ...
            at cfsomecomp2ecfc1707726523$funcRUN.runFunction(X:\MyApp\SomeComp.cfc:131)