我有一个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。
答案 0 :(得分:0)
如果我不得不猜测,事件网关请求将错误地处理timeout="0"
的方式。 <cflock>
for ColdFusion 9的文档说明了这一点:
如果设置timout =“0”,则超时由ColdFusion管理员设置页面中的“x后超时请求”设置决定,如果启用了该设置。但是,如果未启用该设置,并且您设置了timeout =“0”,则ColdFusion可以无限期地等待获取锁定。
也许 - 这真的只是猜测 - CF处理通过事件网关运行时错误超时的锁?
要进行故障排除,可能会在锁定的代码中放入sleep()
,以便并发网关请求 超时,并查看记录的内容?
您是否设置了请求超时?