【问题标题】:Esper: How to fix error java.util.ConcurrentModificationException in core Esper engine?Esper:如何修复核心 Esper 引擎中的错误 java.util.ConcurrentModificationException?
【发布时间】:2017-07-06 09:35:02
【问题描述】:

在使用 Esper 时,我得到了这个错误。

可能是什么原因?

2017-02-05 15:51:59,781 [...] ERROR com.espertech.esper.core.service.ExceptionHandlingService  - Exception encountered processing statement '...' statement text 'INSERT INTO Window
    SELECT *
    FROM TableWithJoins
    WHERE test=3
    ORDER BY (Math.abs(Total)) DESC
    LIMIT 10' : null
    java.util.ConcurrentModificationException
            at java.util.ArrayDeque$DeqIterator.next(ArrayDeque.java:643)
            at com.espertech.esper.event.EventBeanUtility.flatten(EventBeanUtility.java:186)
            at com.espertech.esper.collection.FlushedEventBuffer.getAndFlush(FlushedEventBuffer.java:41)
            at com.espertech.esper.view.internal.SingleStreamDispatchView.execute(SingleStreamDispatchView.java:56)
            at com.espertech.esper.core.context.util.EPStatementAgentInstanceHandle.internalDispatch(EPStatementAgentInstanceHandle.java:127)
            at com.espertech.esper.epl.named.NamedWindowServiceImpl.processHandle(NamedWindowServiceImpl.java:468)
            at com.espertech.esper.epl.named.NamedWindowServiceImpl.processDispatches(NamedWindowServiceImpl.java:247)
            at com.espertech.esper.epl.named.NamedWindowServiceImpl.dispatch(NamedWindowServiceImpl.java:214)
            at com.espertech.esper.core.service.EPRuntimeImpl.processThreadWorkQueueFront(EPRuntimeImpl.java:858)
            at com.espertech.esper.core.service.EPRuntimeImpl.processThreadWorkQueue(EPRuntimeImpl.java:810)
            at com.espertech.esper.core.service.EPRuntimeImpl.processWrappedEvent(EPRuntimeImpl.java:500)
            at com.espertech.esper.event.EventSenderBean.sendEvent(EventSenderBean.java:84)

我正在使用Esper v5.2

【问题讨论】:

  • 注意:这个问题被官方标记为“分享你的知识,问答风格”。如果您正在考虑投反对票,请考虑到这一点。
  • 当前版本为 6.1

标签: java esper


【解决方案1】:

此问题可能是由先前的 insert 语句中的联接引起的。

要修复,请将undirectional 添加到连接语句之一。

这样做的原因是,如果在 Esper 中有一个 join 语句,来自任何 join 子句的任何传入事件都可以触发更新。通过添加“单向”,这意味着只有一个线程将事件推送到下游,而不是两个,这解决了任何线程问题。

此问题可能已在更高版本的 Esper 中得到修复。

【讨论】:

  • 注意:这个问题被官方标记为“分享你的知识,问答风格”。如果您正在考虑投反对票,请考虑到这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-17
  • 1970-01-01
  • 2012-07-09
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
相关资源
最近更新 更多