2016-07-04 25 views
0

Ich wollte Musterstatus aus historischen Daten initialisiert/aktualisiert und oft StackOverflowError für einige Fälle erhalten. Ich schrieb einfaches Beispiel zu demonstrieren:Esper: StackOverflowError beim Verschieben von Mustern in/aus isolierten Zustand in esper

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 ist eine einfache Klasse mit zwei Feldern: int theInt, String theString.

Ergebnis:

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) 
....................................................................................................................................................................... 

Auch habe ich die nächste Ausnahme für ähnliche Fälle (unterscheiden sich nur in Top-Punkt der Exception):

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) 
...................................................................................................................................................................... 

Warum diese Ausnahme ausgelöst wird und wie kann ich dieses Problem lösen Problem? Danke.

+0

Sie sollten den vollständigen Stack-Trace bereitstellen. – goodie

+0

Alle folgenden Zeilen sind .......................................... \t bei com.espertech.esper.core.service.EPRuntimeImpl.handleFilterFault (EPRuntimeImpl.java:1271) \t bei com.espertech.esper.core.service.EPRuntimeImpl.processStatementFilterSingle (EPRuntimeImpl.java:1242) \t bei com.espertech .esper.core.service.EPRuntimeImpl.handleFilterFault (EPRuntimeImpl.java:1271) \t bei com.espertech.esper.core.service.EPRuntimeImpl.processStatementFilterSingle (EPRuntimeImpl.java:1242) \t bei com.espertech.esper.core .service.EPRuntimeImpl.handleFilterFault (EPRuntimeImpl.java:1271) – quantum

Antwort