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

时间:2013-11-19 21:31:36

标签: java coldfusion coldfusion-9

我有一个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(Native Method)at   coldfusion.runtime.RWLock.waitForLock(RWLock.java:154)at   coldfusion.runtime.RWLock.requestWriteLock(RWLock.java:124)at   coldfusion.runtime.RWLock.requestLock(RWLock.java:46)at   coldfusion.runtime.LockManager.requestNamedLock(LockManager.java:73)   在coldfusion.tagext.lang.LockTag.doStartTag(LockTag.java:186)at   cfeventCachedQueryUpdate2ecfc749015300 $ funcONINCOMINGMESSAGE.runFunction(d:\应用程序\ CFusion \ CustomTags \ 4C \ eventCachedQueryUpdate.cfc:21)   在coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:472)at   coldfusion.filter.SilentFilter.invoke(SilentFilter.java:47)at   coldfusion.runtime.UDFMethod $ ArgumentCollectionFilter.invoke(UDFMethod.java:368)   在   coldfusion.filter.FunctionAccessFilter.invoke(FunctionAccessFilter.java:55)   在coldfusion.runtime.UDFMethod.runFilterChain(UDFMethod.java:321)at   coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:220)at at   coldfusion.runtime.TemplateProxy.invoke(TemplateProxy.java:491)at   coldfusion.runtime.TemplateProxy.invoke(TemplateProxy.java:437)at   coldfusion.filter.EventComponentFilter.invoke(EventComponentFilter.java:67)   在   coldfusion.filter.ApplicationFilter.invoke(ApplicationFilter.java:399)   在   coldfusion.filter.EventRequestMonitorFilter.invoke(EventRequestMonitorFilter.java:47)   at coldfusion.filter.MonitoringFilter.invoke(MonitoringFilter.java:40)   在   coldfusion.filter.ClientScopePersistenceFilter.invoke(ClientScopePersistenceFilter.java:28)   在coldfusion.filter.GlobalsFilter.invoke(GlobalsFilter.java:38)at   coldfusion.filter.DatasourceFilter.invoke(DatasourceFilter.java:22)at at   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)   at coldfusion.util.SimpleWorkerThread.run(SimpleThreadPool.java:210)

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

我在Windows Server 2008 R2上使用Java 1.6.0_17运行Adobe ColdFusion 9.0.1.274733 Enterprise。

1 个答案:

答案 0 :(得分:0)

如果我不得不猜测,事件网关请求将错误地处理timeout="0"的方式。 <cflock> for ColdFusion 9的文档说明了这一点:

  

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

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

要进行故障排除,可能会在锁定的代码中放入sleep(),以便并发网关请求 超时,并查看记录的内容?

您是否设置了请求超时?