【发布时间】:2013-12-03 15:39:38
【问题描述】:
我有一个 ColdFusion 事件网关,它有时会在以下行中产生错误(其中 Local.curThread 是一个数字 1-5):
<cflock name="eventCachedQueryUpdate_thread_#Local.curThread#" timeout="0" throwontimeout="no">
错误是:
消息:超时值为负
类型:java.lang.IllegalArgumentException
这是一个 StackTrace:
java.lang.IllegalArgumentException:超时值为负 java.lang.Object.wait(本机方法)在 Coldfusion.runtime.RWLock.waitForLock(RWLock.java:154) 在 Coldfusion.runtime.RWLock.requestWriteLock(RWLock.java:124) 在 Coldfusion.runtime.RWLock.requestLock(RWLock.java:46) 在 Coldfusion.runtime.LockManager.requestNamedLock(LockManager.java:73) 在coldfusion.tagext.lang.LockTag.doStartTag(LockTag.java:186) 在 cfeventCachedQueryUpdate2ecfc749015300$funcONINCOMINGMESSAGE.runFunction(D:\Applications\CFusion\CustomTags\4C\eventCachedQueryUpdate.cfc:21) 在coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:472) 在 Coldfusion.filter.SilentFilter.invoke(SilentFilter.java:47) 在 Coldfusion.runtime.UDFMethod$ArgumentCollectionFilter.invoke(UDFMethod.java:368) 在 Coldfusion.filter.FunctionAccessFilter.invoke(FunctionAccessFilter.java:55) 在coldfusion.runtime.UDFMethod.runFilterChain(UDFMethod.java:321) 在 Coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:220) 在 Coldfusion.runtime.TemplateProxy.invoke(TemplateProxy.java:491) 在 Coldfusion.runtime.TemplateProxy.invoke(TemplateProxy.java:437) 在 Coldfusion.filter.EventComponentFilter.invoke(EventComponentFilter.java:67) 在 Coldfusion.filter.ApplicationFilter.invoke(ApplicationFilter.java:399) 在 Coldfusion.filter.EventRequestMonitorFilter.invoke(EventRequestMonitorFilter.java:47) 在coldfusion.filter.MonitoringFilter.invoke(MonitoringFilter.java:40) 在 Coldfusion.filter.ClientScopePersistenceFilter.invoke(ClientScopePersistenceFilter.java:28) 在coldfusion.filter.GlobalsFilter.invoke(GlobalsFilter.java:38) 在 Coldfusion.filter.DatasourceFilter.invoke(DatasourceFilter.java:22) 在 Coldfusion.eventgateway.EventProxy.invokeComponent(EventProxy.java:66) 在 Coldfusion.eventgateway.EventProxy.invokeComponent(EventProxy.java:47) 在 Coldfusion.eventgateway.EventRequestHandler.invokeCFC(EventRequestHandler.java:185) 在 Coldfusion.eventgateway.EventRequestHandler.processRequest(EventRequestHandler.java:111) 在 Coldfusion.eventgateway.EventRequestDispatcher$Task.run(EventRequestDispatcher.java:122) 在coldfusion.util.SimpleWorkerThread.run(SimpleThreadPool.java:210)
由于 cflock 的超时属性始终为 0,我看不出这会如何导致负超时值。任何想法是什么导致了这种情况以及如何防止它?这是 cflock 中的错误吗?
我在带有 Java 1.6.0_17 的 Windows Server 2008 R2 上运行 Adobe ColdFusion 9.0.1.274733 Enterprise。
【问题讨论】:
-
我没有答案,但错误似乎不是指 you 提供的值。而是 CF 服务器根据堆栈跟踪在
RWLock类的某处生成(使用您的值)的内部编号。如果要相信错误,则该数字为负数,这会在 CF 调用Object.wait(...)时导致异常。 -
Leigh,这也是我的想法……这表明存在某种 CF 错误。
-
我不会过多地讨论这是否是 CF 错误,而会更多地关注如何使您的代码正常工作。即使结论是它是一个错误......这也不会神奇地让你的代码没有错误。
-
我不会过多考虑这是否是 CF 错误 同意。我提到它是为了在弄清楚如何修复错误时将这种可能性留在你的脑海中。即您可能必须解决错误,而不是修复代码/逻辑错误。这并不能真正帮助解决问题,但可能指向解决问题的正确方法。
标签: java coldfusion coldfusion-9