【问题标题】:ColdFusion variables missing缺少 ColdFusion 变量
【发布时间】:2016-08-30 04:03:13
【问题描述】:

好的,我已经与 ColdFusion 合作了 20 年,但从未见过这种情况。我有一个 ContentBox 站点(不相信这会影响问题,但想包含信息),其中我有前端网页被拉出并通过事件网关运行后端代码。我每分钟收到大约 30 个网关事件。我的问题是,当前端网页运行(通常是从数据库中提取数据)时,我的变量在例程中消失了。

因为 ContenBox/ColdBox 模块目录的 Application.cfcs 包含中止命令,网关事件 cfc 位于应用程序根目录下的子文件夹中(因为网关 cfc 或其 Application.cfc 中的任何中止都会导致网关错误)。

代码中的错误点是不断变化的。有时它是结构键不存在而循环遍历结构的键:

for(var structKey in structureName)
{
    var structValue = structureName[structKey];
}

其他时候,代码引用了应用程序范围内的结构,同样,前几行出现的键现在丢失并引发错误。因此,似乎各种变量范围(变量、应用程序等)在处理网页时正在失去它们的值(这通常在处理网关事件时发生)。

网络服务器受到严格保护,我在开发/暂存中没有不安全的问题。因此,我的直觉当然是安全中的某些东西导致了这个问题。我在日志中没有看到任何可以指出问题的内容。

由于合同义务,我无法在此处发布代码。话虽如此,我认为这个描述本身就是一个想法,即问题不在于 CF 代码,而在于服务器的加固。

有没有人知道什么样的事情会导致 CF 应用程序在中途丢失变量?

【问题讨论】:

  • 可能是竞争条件。您是否在确定变量的范围?请参阅stackoverflow.com/q/19859690/1636917stackoverflow.com/q/36942015/1636917stackoverflow.com/q/27408067/1636917 进行一些讨论。
  • 可能是竞争条件 ...特别是考虑到错误的零星性质,这是竞争条件的典型症状。通常,它们仅在负载下才会显现。
  • 我很确定这不是竞争条件。我更改了代码以将套接字网关事件放在单独的应用程序中,现在我唯一的问题是引用不在应用程序范围内的现有变量。通常,正如我上面提到的,在遍历结构的键时。当我创建循环时,我总是使用 var (尽管我在帖子中的原始代码位没有......我正在编辑它)。我专门按范围调用变量(例如 variables.this["that"] 等)。
  • 作为补充说明,有时抛出的错误是 Java 错误:java.util.ConcurrentModificationException。正如我办公室的一名 Java 开发人员所解释的那样,这通常是由于在循环访问密钥时删除了密钥。也就是说,它不会每次都发生,而且我没有做任何事情来删除/删除/更改任何键,只有 subValues(被迭代的键的值本身就是结构)。
  • 在某种程度上 ConcurrentModificationException is 是一种竞争条件 ;-) 当然,除了缺少 var 作用域之外,还有其他原因。 (被迭代的键的值本身就是结构)。 A) 嗯...代码对子结构做了什么? B)结构是“函数本地”还是函数参数?因为结构是通过引用传递的。虽然我可以理解“专有”问题,但如果没有太多代码或错误消息,很难推测。您是否有机会伪造一个小的通用示例,即“apples/oranges/pears”和“scrubbed”堆栈跟踪? ;-)

标签: struct coldfusion coldfusion-11


【解决方案1】:

问题解决了。虽然竞态条件听起来很合理,但我没有看到它是如何在单个线程中如此简洁的循环中发生的。但这确实是一种竞争条件。问题源于代码位于 ColdBox 处理程序中。在这种情况下,我误解了 Wirebox 的用法。我认为调用处理程序将创建处理程序的缓存单例的单个实例。相反,所有调用都使用相同的实例!这意味着处理程序的每个调用都与其他并发调用共享变量范围,而不仅仅是它自己。这就是变量被覆盖的方式。

ColdFusion 20 年,但第一个项目是 ColdBox 和 ContentBox。生活吧。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-28
    • 2015-07-25
    • 1970-01-01
    • 2012-09-11
    • 2018-12-21
    • 2020-08-01
    相关资源
    最近更新 更多