yawlfoundation / yawl

Yet Another Workflow Language
http://www.yawlfoundation.org
GNU Lesser General Public License v3.0
88 stars 35 forks source link

Exception thrown in a Data Gateway causes YAWL Engine to stop working #606

Closed fmannhardt closed 4 years ago

fmannhardt commented 7 years ago

If a Data Gateway throws a NoClassDefFoundError the case cannot be stopped anymore and there are no log messages to diagnose the issue. Since Data Gateways are quite likely to require 3rd party libraries, which might not be on the correct path NoClassDefFoundError are likely to be encountered.

the YAWL Engine stops working and can only be recovered by restarting the Tomcat sever. Here a test case Data Gateway that simply throws an Exception: TestDataGateway.zip

The respective calls to 'populateTaskParameter' and 'updateFromTaskCompletion' should also catch an Error. At least the YAWL Engine should not crash.

For completeness, the following exception is logged:

2017-06-03 12:56:41,770 [ERROR] ResourceManager :- IO Exception with checkout: 10:Fill_in java.io.IOException: Server returned HTTP response code: 500 for URL: http://localhost:8080/yawl/ib at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source) ~[?:1.8.0_131] at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source) ~[?:1.8.0_131] at org.yawlfoundation.yawl.engine.interfce.Interface_Client.send(Interface_Client.java:131) ~[yawl-lib-4.1.jar:?] at org.yawlfoundation.yawl.engine.interfce.Interface_Client.send(Interface_Client.java:186) ~[yawl-lib-4.1.jar:?] at org.yawlfoundation.yawl.engine.interfce.Interface_Client.executePost(Interface_Client.java:56) ~[yawl-lib-4.1.jar:?] at org.yawlfoundation.yawl.engine.interfce.interfaceB.InterfaceB_EnvironmentBasedClient.checkOutWorkItem(InterfaceB_EnvironmentBasedClient.java:397) ~[yawl-lib-4.1.jar:?] at org.yawlfoundation.yawl.engine.interfce.interfaceB.InterfaceBWebsideController.checkOut(InterfaceBWebsideController.java:314) ~[yawl-lib-4.1.jar:?] at org.yawlfoundation.yawl.resourcing.ResourceManager.checkOutWorkItem(ResourceManager.java:1844) [yawl-lib-4.1.jar:?] at org.yawlfoundation.yawl.resourcing.ResourceManager.start(ResourceManager.java:1166) [yawl-lib-4.1.jar:?] at org.yawlfoundation.yawl.resourcing.jsf.userWorkQueues.doAction(userWorkQueues.java:682) [yawl-lib-4.1.jar:?] at org.yawlfoundation.yawl.resourcing.jsf.userWorkQueues.btnStart_action(userWorkQueues.java:512) [yawl-lib-4.1.jar:?] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_131] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_131] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_131] at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_131] at com.sun.faces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:126) [jsf-impl.jar:2.4.1] at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:72) [jsf-impl.jar:2.4.1] at com.sun.rave.web.ui.appbase.faces.ActionListenerImpl.processAction(ActionListenerImpl.java:57) [appbase.jar:?] at javax.faces.component.UICommand.broadcast(UICommand.java:312) [jsf-api.jar:2.4.1] at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:267) [jsf-api.jar:2.4.1] at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:381) [jsf-api.jar:2.4.1] at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:75) [jsf-impl.jar:2.4.1] at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:221) [jsf-impl.jar:2.4.1] at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:90) [jsf-impl.jar:2.4.1] at javax.faces.webapp.FacesServlet.service(FacesServlet.java:197) [jsf-api.jar:2.4.1] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) [catalina.jar:7.0.65] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) [catalina.jar:7.0.65] at com.sun.rave.web.ui.util.UploadFilter.doFilter(UploadFilter.java:194) [webui.jar:?] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) [catalina.jar:7.0.65] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) [catalina.jar:7.0.65] at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) [tomcat7-websocket.jar:7.0.65] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) [catalina.jar:7.0.65] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) [catalina.jar:7.0.65] at org.yawlfoundation.yawl.resourcing.jsf.PageFilter.doFilter(PageFilter.java:34) [yawl-lib-4.1.jar:?] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) [catalina.jar:7.0.65] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) [catalina.jar:7.0.65] at org.yawlfoundation.yawl.resourcing.jsf.LoginFilter.doFilter(LoginFilter.java:36) [yawl-lib-4.1.jar:?] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) [catalina.jar:7.0.65] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) [catalina.jar:7.0.65] at org.yawlfoundation.yawl.resourcing.jsf.SessionTimeoutFilter.doFilter(SessionTimeoutFilter.java:69) [yawl-lib-4.1.jar:?] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) [catalina.jar:7.0.65] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) [catalina.jar:7.0.65] at org.yawlfoundation.yawl.util.CharsetFilter.doFilter(CharsetFilter.java:61) [yawl-lib-4.1.jar:?] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) [catalina.jar:7.0.65] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) [catalina.jar:7.0.65] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) [catalina.jar:7.0.65] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) [catalina.jar:7.0.65] at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505) [catalina.jar:7.0.65] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) [catalina.jar:7.0.65] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) [catalina.jar:7.0.65] at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956) [catalina.jar:7.0.65] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) [catalina.jar:7.0.65] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423) [catalina.jar:7.0.65] at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079) [tomcat-coyote.jar:7.0.65] at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625) [tomcat-coyote.jar:7.0.65] at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318) [tomcat-coyote.jar:7.0.65] at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [?:1.8.0_131] at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [?:1.8.0_131] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-coyote.jar:7.0.65] at java.lang.Thread.run(Unknown Source) [?:1.8.0_131] 2017-06-03 12:56:41,784 [ERROR] ResourceManager :- Could not start workitem: 10:Fill_in

After a while the following message is logged

2017-06-03 13:04:53,356 [FATAL] InterfaceA_EngineBasedServer :- **** 2017-06-03 13:04:53,356 [FATAL] InterfaceA_EngineBasedServer :- A failure has occurred whilst persisting workflow state to the 2017-06-03 13:04:53,356 [FATAL] InterfaceA_EngineBasedServer :- database. Check the status of the database connection defined 2017-06-03 13:04:53,356 [FATAL] InterfaceA_EngineBasedServer :- for the YAWL service, and restart the YAWL web application. 2017-06-03 13:04:53,356 [FATAL] InterfaceA_EngineBasedServer :- Further information may be found within the Tomcat log files. 2017-06-03 13:04:53,356 [FATAL] InterfaceA_EngineBasedServer :- ****

fmannhardt commented 7 years ago

Please note that also other Errors , like ExceptionInInitializerError might be thrown when JAR files are missing in the class path. Some error handling and printout to the log would be very helpful to diagnose these errors.

adamsmj commented 4 years ago

Fixed in latest update. All Throwables from data gateways now caught and logged.