IPVS-AS / MBP

A management platform for IoT environments and applications
Other
23 stars 14 forks source link

CEP rule execution does not work #636

Closed schneiti closed 2 years ago

schneiti commented 2 years ago

It seems to me that the execution of CEP rules does not work at the moment. If a rule should be triggered the following exception is thrown:

2022-03-07 16:30:18.733 ERROR 10 --- [f0cc2e2c3510ad4] c.e.e.c.s.ResultDeliveryStrategyImpl     : Unexpected exception when invoking method 'update' on subscriber class 'EsperCEPQueryDispatcher' for parameters [{event_0=MapEventBean eventType=com.espertech.esper.event.map.MapEventType@2be08869}] : IllegalAccessError : failed to access class de.ipvs.as.mbp.service.cep.engine.esper.EsperCEPQueryDispatcher from class de.ipvs.as.mbp.service.cep.engine.esper.EsperCEPQueryDispatcher$$FastClassByCGLIB$$bcc416f0 (de.ipvs.as.mbp.service.cep.engine.esper.EsperCEPQueryDispatcher is in unnamed module of loader org.springframework.boot.loader.LaunchedURLClassLoader @2e5d6d97; de.ipvs.as.mbp.service.cep.engine.esper.EsperCEPQueryDispatcher$$FastClassByCGLIB$$bcc416f0 is in unnamed module of loader org.springframework.boot.web.embedded.tomcat.TomcatEmbeddedWebappClassLoader @7a7471ce)

java.lang.IllegalAccessError: failed to access class de.ipvs.as.mbp.service.cep.engine.esper.EsperCEPQueryDispatcher from class de.ipvs.as.mbp.service.cep.engine.esper.EsperCEPQueryDispatcher$$FastClassByCGLIB$$bcc416f0 (de.ipvs.as.mbp.service.cep.engine.esper.EsperCEPQueryDispatcher is in unnamed module of loader org.springframework.boot.loader.LaunchedURLClassLoader @2e5d6d97; de.ipvs.as.mbp.service.cep.engine.esper.EsperCEPQueryDispatcher$$FastClassByCGLIB$$bcc416f0 is in unnamed module of loader org.springframework.boot.web.embedded.tomcat.TomcatEmbeddedWebappClassLoader @7a7471ce)

at de.ipvs.as.mbp.service.cep.engine.esper.EsperCEPQueryDispatcher$$FastClassByCGLIB$$bcc416f0.invoke(<generated>) ~[classes!/:na]

at net.sf.cglib.reflect.FastMethod.invoke(FastMethod.java:57) ~[cglib-nodep-3.2.5.jar!/:na]

at com.espertech.esper.core.service.ResultDeliveryStrategyImpl.execute(ResultDeliveryStrategyImpl.java:126) ~[esper-7.1.0.jar!/:na]

at com.espertech.esper.core.service.StatementResultServiceImpl.dispatchInternal(StatementResultServiceImpl.java:335) ~[esper-7.1.0.jar!/:na]

at com.espertech.esper.core.service.StatementResultServiceImpl.processDispatch(StatementResultServiceImpl.java:230) ~[esper-7.1.0.jar!/:na]

at com.espertech.esper.core.service.StatementResultServiceImpl.execute(StatementResultServiceImpl.java:216) ~[esper-7.1.0.jar!/:na]

at com.espertech.esper.core.service.UpdateDispatchViewBase.execute(UpdateDispatchViewBase.java:72) ~[esper-7.1.0.jar!/:na]

at com.espertech.esper.core.service.UpdateDispatchFutureSpin.execute(UpdateDispatchFutureSpin.java:82) ~[esper-7.1.0.jar!/:na]

at com.espertech.esper.dispatch.DispatchServiceImpl.dispatchFromQueue(DispatchServiceImpl.java:45) ~[esper-7.1.0.jar!/:na]

at com.espertech.esper.dispatch.DispatchServiceImpl.dispatch(DispatchServiceImpl.java:29) ~[esper-7.1.0.jar!/:na]

at com.espertech.esper.core.service.EPRuntimeImpl.dispatch(EPRuntimeImpl.java:1228) ~[esper-7.1.0.jar!/:na]

at com.espertech.esper.core.service.EPRuntimeImpl.processWrappedEvent(EPRuntimeImpl.java:486) ~[esper-7.1.0.jar!/:na]

at com.espertech.esper.core.service.EPRuntimeImpl.sendEvent(EPRuntimeImpl.java:300) ~[esper-7.1.0.jar!/:na]

at de.ipvs.as.mbp.service.cep.engine.esper.EsperCEPEngine.sendEvent(EsperCEPEngine.java:175) ~[classes!/:1.0]

at de.ipvs.as.mbp.service.cep.trigger.CEPTriggerService.onValueReceived(CEPTriggerService.java:144) ~[classes!/:1.0]

at de.ipvs.as.mbp.service.receiver.ValueLogReceiver.lambda$notifyValueLogObservers$1(ValueLogReceiver.java:250) ~[classes!/:1.0]

at java.base/java.lang.Iterable.forEach(Unknown Source) ~[na:na]

at de.ipvs.as.mbp.service.receiver.ValueLogReceiver.notifyValueLogObservers(ValueLogReceiver.java:250) ~[classes!/:1.0]

at de.ipvs.as.mbp.service.receiver.ValueLogReceiver.processValueLogMessage(ValueLogReceiver.java:231) ~[classes!/:1.0]

at de.ipvs.as.mbp.service.receiver.ValueLogReceiver.lambda$new$0(ValueLogReceiver.java:116) ~[classes!/:1.0]

at de.ipvs.as.mbp.service.messaging.dispatcher.MessageDispatcher.lambda$dispatchMessage$3(MessageDispatcher.java:148) ~[classes!/:1.0]

at java.base/java.util.HashMap.forEach(Unknown Source) ~[na:na]

at de.ipvs.as.mbp.service.messaging.dispatcher.MessageDispatcher.dispatchMessage(MessageDispatcher.java:136) ~[classes!/:1.0]

at de.ipvs.as.mbp.service.messaging.impl.mqtt.MQTTClientCallback.messageArrived(MQTTClientCallback.java:98) ~[classes!/:1.0]

at org.eclipse.paho.client.mqttv3.internal.CommsCallback.deliverMessage(CommsCallback.java:519) ~[org.eclipse.paho.client.mqttv3-1.2.5.jar!/:na]

at org.eclipse.paho.client.mqttv3.internal.CommsCallback.handleMessage(CommsCallback.java:417) ~[org.eclipse.paho.client.mqttv3-1.2.5.jar!/:na]

at org.eclipse.paho.client.mqttv3.internal.CommsCallback.run(CommsCallback.java:214) ~[org.eclipse.paho.client.mqttv3-1.2.5.jar!/:na]

at java.base/java.lang.Thread.run(Unknown Source) ~[na:na]

This behavior was observed using the dockerized version of the MBP.

I was not able to find a solution for this yet. Looks to me like a more deeply rooted issue with the Springs cglib proxies. No real idea what causes this.

schneiti commented 2 years ago

I was able to reproduce this issue now on the master branch too without using the docker container.

2022-03-09 02:05:39.009 ERROR 19820 --- [   scheduling-1] c.e.e.c.s.ResultDeliveryStrategyImpl     : Unexpected exception when invoking method 'update' on subscriber class 'EsperCEPQueryDispatcher' for parameters [{event_0=MapEventBean eventType=com.espertech.esper.event.map.MapEventType@320faf67}] : IllegalAccessError : failed to access class de.ipvs.as.mbp.service.cep.engine.esper.EsperCEPQueryDispatcher from class de.ipvs.as.mbp.service.cep.engine.esper.EsperCEPQueryDispatcher$$FastClassByCGLIB$$bcc416f0 (de.ipvs.as.mbp.service.cep.engine.esper.EsperCEPQueryDispatcher is in unnamed module of loader 'app'; de.ipvs.as.mbp.service.cep.engine.esper.EsperCEPQueryDispatcher$$FastClassByCGLIB$$bcc416f0 is in unnamed module of loader org.springframework.boot.web.embedded.tomcat.TomcatEmbeddedWebappClassLoader @5fb5ad40)
schneiti commented 2 years ago

The issue does not occur if one calls restarts after the creation and activation of a rule definition. However if one deactivates and activates this rule, then the problem occurs again.

Maybe this warning which appears at the start of spring boot application has something to do with it. WARNING: An illegal reflective access operation has occurred WARNING: Illegal reflective access by net.sf.cglib.core.ReflectUtils$1 (file:/C:/.../.m2/repository/cglib/cglib-nodep/3.2.5/cglib-nodep-3.2.5.jar) to method java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain)

schneiti commented 2 years ago

Issue fix: Make the EsperCEPQueryDispatcher class public. For some reasons it was not public