Menu

#49 Tree crashes after server restart

open
nobody
None
5
2007-09-27
2007-09-27
No

When the webserver restarts while an echo2 application is active with an active Tree, the Echo2 application crashes when the page is reloaded. This is caused by a nullPointerException in Tree, because the expandedStack and expandedState fields in echopointng.Tree are transient, and thus not set when the Tree is deserialized.

Stack trace is:
java.lang.NullPointerException
at echopointng.Tree.isExpanded(Tree.java:945)
at echopointng.ui.syncpeer.TreeRenderer.renderExpandoCell(TreeRenderer.java:499)
at echopointng.ui.syncpeer.TreeRenderer.renderTreeRow(TreeRenderer.java:754)
at echopointng.ui.syncpeer.TreeRenderer.renderTreeRecursive(TreeRenderer.java:691)
at echopointng.ui.syncpeer.TreeRenderer.renderTree(TreeRenderer.java:708)
at echopointng.ui.syncpeer.TreePeer.renderHtml(TreePeer.java:311)
at echopointng.ui.syncpeer.AbstractEchoPointPeer.renderHtml(AbstractEchoPointPeer.java:298)
at nextapp.echo2.webcontainer.syncpeer.ContentPanePeer.renderChild(ContentPanePeer.java:236)
at nextapp.echo2.webcontainer.syncpeer.ContentPanePeer.renderHtml(ContentPanePeer.java:302)
at nextapp.echo2.webcontainer.syncpeer.ContentPanePeer.renderAdd(ContentPanePeer.java:165)
at nextapp.echo2.webcontainer.syncpeer.SplitPanePeer.renderChild(SplitPanePeer.java:341)
at nextapp.echo2.webcontainer.syncpeer.SplitPanePeer.renderAdd(SplitPanePeer.java:288)
at nextapp.echo2.webcontainer.syncpeer.SplitPanePeer.renderChild(SplitPanePeer.java:341)
at nextapp.echo2.webcontainer.syncpeer.SplitPanePeer.renderAdd(SplitPanePeer.java:288)
at nextapp.echo2.webcontainer.syncpeer.SplitPanePeer.renderChild(SplitPanePeer.java:341)
at nextapp.echo2.webcontainer.syncpeer.SplitPanePeer.renderAdd(SplitPanePeer.java:288)
at nextapp.echo2.webcontainer.syncpeer.SplitPanePeer.renderChild(SplitPanePeer.java:341)
at nextapp.echo2.webcontainer.syncpeer.SplitPanePeer.renderAdd(SplitPanePeer.java:288)
at nextapp.echo2.webcontainer.syncpeer.ContentPanePeer.renderChild(ContentPanePeer.java:238)
at nextapp.echo2.webcontainer.syncpeer.ContentPanePeer.renderHtml(ContentPanePeer.java:302)
at nextapp.echo2.webcontainer.syncpeer.ContentPanePeer.renderAdd(ContentPanePeer.java:165)
at nextapp.echo2.webcontainer.syncpeer.WindowPeer.renderRefresh(WindowPeer.java:124)
at nextapp.echo2.webcontainer.ContainerSynchronizeService.renderInit(ContainerSynchronizeService.java:427)
at nextapp.echo2.webrender.service.SynchronizeService.service(SynchronizeService.java:269)
at nextapp.echo2.webrender.WebRenderServlet.process(WebRenderServlet.java:273)
at nextapp.echo2.webrender.WebRenderServlet.doPost(WebRenderServlet.java:189)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at com.aci.hibernate.HibernateSessionFilter.doFilter(HibernateSessionFilter.java:45)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:541)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Unknown Source)

One solution is to check for if transient fields are null in methods like Tree.isExpanded() and Tree.setExpandedState() and if they are null, initialize them.

Discussion


Log in to post a comment.

MongoDB Logo MongoDB