当前位置: 首页 > 知识库问答 >
问题:

为什么cflock有时会导致“超时值为负”错误?

归鸿朗
2023-03-14

我有一个ColdFusion事件网关,有时会在以下行产生错误(其中Local.cur线程是数字1-5):

<cflock name="eventCachedQueryUpdate_thread_#Local.curThread#" timeout="0" throwontimeout="no">

错误是:

消息:超时值为负。类型:java。lang.IllegalArgumentException

这是StackTrace:

Java语言lang.IllegalArgumentException:java的超时值为负。lang.Object。在coldfusion上等待(本机方法)。运行时。RWLock。coldfusion的waitForLock(RWLock.java:154)。运行时。RWLock。coldfusion上的requestWriteLock(RWLock.java:124)。运行时。RWLock。coldfusion上的requestLock(RWLock.java:46)。运行时。LockManager。coldfusion上的requestNamedLock(LockManager.java:73)。tagext。lang.LockTag。doStartTag(LockTag.java:186)位于cfeventCachedQueryUpdate2ecfc749015300$funcONINCOMINGMESSAGE。在coldfusion上运行函数(D:\Applications\CFusion\CustomTags\4C\eventCachedQueryUpdate.cfc:21)。运行时。UDF方法。在coldfusion中调用(UDFMethod.java:472)。滤器SilentFilter。调用(SilentFilter.java:47)。运行时。UDFMethod$ArgumentCollectionFilter。在coldfusion中调用(UDFMethod.java:368)。滤器FunctionAccessFilter。调用(FunctionAccessFilter.java:55)。运行时。UDF方法。在coldfusion上运行FilterChain(UDFMethod.java:321)。运行时。UDF方法。在coldfusion中调用(UDFMethod.java:220)。运行时。模板代理。调用(TemplateProxy.java:491)。运行时。模板代理。调用(TemplateProxy.java:437)。滤器EventComponentFilter。在coldfusion中调用(EventComponentFilter.java:67)。滤器应用程序过滤器。在coldfusion中调用(ApplicationFilter.java:399)。滤器EventRequestMonitorFilter。在coldfusion中调用(EventRequestMonitorFilter.java:47)。滤器监控过滤器。在coldfusion中调用(MonitoringFilter.java:40)。滤器ClientScopePersistenceFilter。在coldfusion中调用(ClientScopePersistenceFilter.java:28)。滤器全局过滤器。调用(GlobalsFilter.java:38)。滤器数据源过滤器。在coldfusion调用(DatasourceFilter.java:22)。事件网关。事件代理。coldfusion上的invokeComponent(EventProxy.java:66)。事件网关。事件代理。coldfusion上的invokeComponent(EventProxy.java:47)。事件网关。EventRequestHandler。在coldfusion上调用ECFC(EventRequestHandler.java:185)。事件网关。EventRequestHandler。coldfusion上的processRequest(EventRequestHandler.java:111)。事件网关。EventRequestDispatcher$Task。在coldfusion上运行(EventRequestDispatcher.java:122)。util。SimpleWorkerThread。运行(SimpleThreadPool.java:210)

由于cflock的timeout属性始终为0,因此我看不出这如何导致负超时值。知道是什么导致了这种情况以及如何防止它吗?这是cflock中的错误吗?

我在Windows Server 2008 R2上运行Adobe ColdFusion9.0.1.274733 Enterprise,Java1.6.0_17。

共有1个答案

颜哲彦
2023-03-14

如果我不得不猜测的话,可能是事件网关请求处理方式不正确。

如果设置timout=“0”,则超时由ColdFusion管理员设置页面中的“x之后的超时请求”设置确定(如果该设置已启用)。但是,如果未启用该设置,并且您设置了timeout=“0”,ColdFusion可以无限期地等待以获取锁。

也许-这真的只是猜测-CF处理通过事件网关运行时错误超时的锁?

要进行故障排除,可以在锁定的代码中放置一个sleep(),以便并发网关请求超时,并查看记录了什么?

您是否设置了请求超时?

 类似资料:
  • 好的,正如你所看到的,即使我将等待时间设置为0.1秒,仍然没有引发超时异常。当执行时,它不会阻塞,直到整个页面加载完毕,这就是为什么出现了,令我惊讶的是,等到整个页面加载。如果使用,则会得到相同的结果。 我的观点是,有时候在你点击一个元素之后,可能会因为一个坏的代理而需要几个小时才能加载一个页面,而且你显然不想等待那么长时间,你想要的是一个超时异常。在这种情况下,您将如何使其工作?

  • 问题内容: 遇到一个错误地使用 而不是 在其代码中的人,它没有显示为编译错误。 是因为 是相同的 ? 问题答案: 没有编译错误,因为它是有效的(尽管相当无用) 一元运算符 ,其使用方式与以下方式相同: Java语言规范中的相关部分是Unary Plus运算符+(第15.15.3节) 。它指定调用一元运算会导致操作数的一元数值提升(第5.6.1节)。这意味着: * 如果操作数是编译时类型的,,,或,

  • 根据SQL字符串组合文档,我想在postgresql数据库中执行DELETE语句: 这将导致以下错误: 另一方面,类似的execute工作正常: 我真的看不出有什么区别...

  • 我发现切片映射函数和通道经常作为引用类型一起提到。然而,我注意到有些东西表现出非引用行为,就像它们会过时一样: 或 通常我是通过记住slice描述器实现的内部组件来理解这一点的:slice值可以被看作len、cap和数据指针的结构。 但是地图值永远不需要像 为什么?映射值只是映射描述符的指针吗?如果是这样,为什么不这样做呢?

  • 为什么我在下面的代码段中的X轴上有一个溢出? 在我的网格容器上应用时,就会产生溢出。 null null https://codepen.io/anon/pen/wdjexz?editors=1100

  • 问题内容: 我发现切片图功能和通道经常一起作为 参考类型 提及。但是我注意到,切片的东西不会表现出参考行为,就像它们会过时一样: 要么 通常,我会通过牢记切片描述符实现的内部组件来理解这一点:切片值可以视为len,cap和data指针的结构。 但是地图值永远不需要像 为什么?映射值仅仅是指向映射描述符的指针吗?如果是这样,为什么还不这样做呢? 问题答案: 在Go中,没有像C ++中那样的引用类型。