-
Bug
-
Resolution: Fixed
-
Normal
-
7.0.4
-
None
-
None
-
ZK 7.0.5.1
after a pair of executions' activate and deactive were called, using mechanism of server push event queue will cause illegalStateException.
java.lang.IllegalStateException: Before calling Executions.schedule(), the server push must be enabled for [Desktop z_tcr:/index.zul]
at org.zkoss.zk.ui.impl.DesktopImpl.checkSeverPush(DesktopImpl.java:1496)
at org.zkoss.zk.ui.impl.DesktopImpl.scheduleServerPush(DesktopImpl.java:1472)
at org.zkoss.zk.ui.Executions.schedule(Executions.java:870)
at org.zkoss.zk.ui.event.impl.ServerPushEventQueue$DesktopInfo.publish(ServerPushEventQueue.java:158)
at org.zkoss.zk.ui.event.impl.ServerPushEventQueue$DesktopInfo.access$000(ServerPushEventQueue.java:138)
at org.zkoss.zk.ui.event.impl.ServerPushEventQueue.publish(ServerPushEventQueue.java:54)
at org.zkoss.zss.model.impl.EventQueueListenerAdaptor.sendModelEvent(EventQueueListenerAdaptor.java:76)
at org.zkoss.zss.model.impl.BookImpl.sendModelEvent(BookImpl.java:203)
at org.zkoss.zss.range.impl.NotifyChangeHelper.notifyCustomEvent(NotifyChangeHelper.java:209)
at org.zkoss.zss.range.impl.RangeImpl$48.invoke(RangeImpl.java:1591)
at org.zkoss.zss.model.util.ReadWriteTask.doInWriteLock(ReadWriteTask.java:43)
at org.zkoss.zss.range.impl.RangeImpl.notifyCustomEvent(RangeImpl.java:1597)
at org.zkoss.zss.ui.Spreadsheet.moveSelfEditorFocus(Spreadsheet.java:697)
at org.zkoss.zss.ui.Spreadsheet.doMoveSelfFocus(Spreadsheet.java:707)
at org.zkoss.zss.ui.Spreadsheet.access$52(Spreadsheet.java:706)
at org.zkoss.zss.ui.Spreadsheet$5.onEvent(Spreadsheet.java:788)
at org.zkoss.zk.ui.AbstractComponent.onEvent(AbstractComponent.java:2752)
at org.zkoss.zk.ui.AbstractComponent.service(AbstractComponent.java:2723)
at org.zkoss.zk.ui.AbstractComponent.service(AbstractComponent.java:2664)
at org.zkoss.zk.ui.impl.EventProcessor.process(EventProcessor.java:136)
at org.zkoss.zk.ui.impl.UiEngineImpl.processEvent(UiEngineImpl.java:1765)
at org.zkoss.zk.ui.impl.UiEngineImpl.process(UiEngineImpl.java:1550)
at org.zkoss.zk.ui.impl.UiEngineImpl.execUpdate(UiEngineImpl.java:1260)
at org.zkoss.zk.au.http.DHtmlUpdateServlet.process(DHtmlUpdateServlet.java:611)
at org.zkoss.zk.au.http.DHtmlUpdateServlet.doGet(DHtmlUpdateServlet.java:485)
at org.zkoss.zk.au.http.DHtmlUpdateServlet.doPost(DHtmlUpdateServlet.java:494)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:401)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:450)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:945)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:756)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:410)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
extra information:
it's because desktop itself wasn't added into existing subscription enabler list, so that calling deactivate will also turn off server push.
we should fix statement at ServerPushEventQueue$DesktopInfo
desktop.enableServerPush(true);
with
((DesktopImpl)desktop).enableServerPush(true, this);