首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Esper:在esper中以孤立状态移动模式时的StackOverflowError

Esper:在esper中以孤立状态移动模式时的StackOverflowError
EN

Stack Overflow用户
提问于 2016-07-04 07:36:57
回答 1查看 105关注 0票数 0

我希望从历史数据中初始化/更新模式的状态,并且在某些情况下经常获得StackOverflowError。我写了一个简单的例子来演示:

代码语言:javascript
复制
public class Main {
EsperPatternStackOverflow.zip
    public static void main(String[] args) {
        Configuration configuration = new Configuration();
        configuration.addEventType("TestEvent", TestEvent.class);
        configuration.getEngineDefaults().getViewResources().setShareViews(false);
        configuration.getEngineDefaults().getExecution().setAllowIsolatedService(true);
        EPServiceProvider epService = EPServiceProviderManager.getDefaultProvider(configuration);
        epService.initialize();

        EPServiceProviderIsolated isolatedService = epService.getEPServiceIsolated("Isolated");
        EPStatement stmt = isolatedService.getEPAdministrator().createEPL("select * from pattern [every (a=TestEvent -> b=TestEvent(theString=a.theString)) where timer:within(1 day)]", "TestStatement",null);
        int hour_ms = 60*60*1000;
        isolatedService.getEPRuntime().sendEvent(new CurrentTimeEvent(System.currentTimeMillis()- 2*hour_ms));
        isolatedService.getEPRuntime().sendEvent(new TestEvent("str1", 1));
         stmt.addListener((newEvents, oldEvents) -> {
            System.out.println("Fired");
        });
        isolatedService.getEPAdministrator().removeStatement(stmt);
        epService.getEPRuntime().sendEvent(new TestEvent("str1", 3));
    }
}

TestEvent是一个简单的类,有两个字段: int theInt,String theString。

结果:

代码语言:javascript
复制
Exception in thread "main" java.lang.StackOverflowError
        at com.espertech.esper.filter.FilterParamIndexEquals.matchEvent(FilterParamIndexEquals.java:29)
        at com.espertech.esper.filter.FilterHandleSetNode.matchEvent(FilterHandleSetNode.java:99)
        at com.espertech.esper.filter.EventTypeIndex.matchType(EventTypeIndex.java:170)
        at com.espertech.esper.filter.EventTypeIndex.matchEvent(EventTypeIndex.java:108)
        at com.espertech.esper.filter.FilterServiceBase.retryableMatchEvent(FilterServiceBase.java:179)
        at com.espertech.esper.filter.FilterServiceBase.evaluateInternal(FilterServiceBase.java:109)
        at com.espertech.esper.filter.FilterServiceLockCoarse.evaluate(FilterServiceLockCoarse.java:67)
        at com.espertech.esper.core.service.EPRuntimeImpl.handleFilterFault(EPRuntimeImpl.java:1267)
        at com.espertech.esper.core.service.EPRuntimeImpl.processStatementFilterSingle(EPRuntimeImpl.java:1242)
        at com.espertech.esper.core.service.EPRuntimeImpl.handleFilterFault(EPRuntimeImpl.java:1271)
        at com.espertech.esper.core.service.EPRuntimeImpl.processStatementFilterSingle(EPRuntimeImpl.java:1242)
.......................................................................................................................................................................

另外,对于类似的情况,我得到了下一个例外(仅在异常的顶端有所不同):

代码语言:javascript
复制
java.lang.StackOverflowError
        at com.espertech.esper.event.bean.CGLibPropertyGetter.get(CGLibPropertyGetter.java:63)
        at com.espertech.esper.filter.FilterParamIndexEquals.matchEvent(FilterParamIndexEquals.java:29)
        at com.espertech.esper.filter.FilterHandleSetNode.matchEvent(FilterHandleSetNode.java:99)
        at com.espertech.esper.filter.EventTypeIndex.matchType(EventTypeIndex.java:170)
        at com.espertech.esper.filter.EventTypeIndex.matchEvent(EventTypeIndex.java:108)
        at com.espertech.esper.filter.FilterServiceBase.retryableMatchEvent(FilterServiceBase.java:179)
        at com.espertech.esper.filter.FilterServiceBase.evaluateInternal(FilterServiceBase.java:109)
        at com.espertech.esper.filter.FilterServiceLockCoarse.evaluate(FilterServiceLockCoarse.java:67)
        at com.espertech.esper.core.service.EPRuntimeImpl.handleFilterFault(EPRuntimeImpl.java:1267)
        at com.espertech.esper.core.service.EPRuntimeImpl.processStatementFilterSingle(EPRuntimeImpl.java:1242)
        at com.espertech.esper.core.service.EPRuntimeImpl.handleFilterFault(EPRuntimeImpl.java:1271)
        at com.espertech.esper.core.service.EPRuntimeImpl.processStatementFilterSingle(EPRuntimeImpl.java:1242)
......................................................................................................................................................................

为什么会抛出此异常,以及如何解决此问题?谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-04 09:04:14

修正了5.5.0版

来自changelog (https://github.com/espertechinc/esper/blob/master/changelog.txt):

错误修复-固定问题ESC-000-00001堆栈溢出创建隔离模式语句,部分完成模式和未隔离的stmt。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38179199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档