new object throws java.lang.NullPointerException

105 views
Skip to first unread message

Marcus Schopen

unread,
Sep 27, 2011, 10:56:20 AM9/27/11
to je...@googlegroups.com
Hi,

I get the following error when opening a users news object:

------------------------------------------
java.lang.NullPointerException
at jease.cms.domain.Factory.sync(Factory.java:73)
at jease.cms.domain.Factory.getProperties(Factory.java:62)
at
jease.cms.web.content.editor.ContentEditor.doLoad(ContentEditor.java:147)
at jfix.zk.ObjectEditor.invokeLoad(ObjectEditor.java:116)
at jfix.zk.ObjectEditor.refresh(ObjectEditor.java:98)
at
jease.cms.web.content.editor.ContentEditor.refresh(ContentEditor.java:102)
at jease.cms.web.content.editor.ContentEditor
$6.actionPerformed(ContentEditor.java:254)
at jfix.zk.Modal$3.onEvent(Modal.java:87)
at org.zkoss.zul.impl.MessageboxDlg
$Button.onClick(MessageboxDlg.java:172)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at org.zkoss.zk.ui.impl.EventProcessor.process0(EventProcessor.java:205)
at org.zkoss.zk.ui.impl.EventProcessor.process(EventProcessor.java:138)
at
org.zkoss.zk.ui.impl.UiEngineImpl.processEvent(UiEngineImpl.java:1636)
at org.zkoss.zk.ui.impl.UiEngineImpl.process(UiEngineImpl.java:1420)
at org.zkoss.zk.ui.impl.UiEngineImpl.execUpdate(UiEngineImpl.java:1133)
at
org.zkoss.zk.au.http.DHtmlUpdateServlet.process(DHtmlUpdateServlet.java:567)
at
org.zkoss.zk.au.http.DHtmlUpdateServlet.doGet(DHtmlUpdateServlet.java:462)
at
org.zkoss.zk.au.http.DHtmlUpdateServlet.doPost(DHtmlUpdateServlet.java:470)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at
jease.cms.web.servlet.JeaseController.doFilter(JeaseController.java:204)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:185)
at
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:151)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:269)
at org.apache.coyote.AbstractProtocol
$AbstractConnectionHandler.process(AbstractProtocol.java:515)
at org.apache.tomcat.util.net.JIoEndpoint
$SocketProcessor.run(JIoEndpoint.java:302)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor
$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:636)
------------------------------------------

I find the following error in the log at the time when the object was
changed:

------------------------------------------
12.09.2011 11:59:21 org.apache.catalina.core.ApplicationDispatcher
invoke
SCHWERWIEGEND: Servlet.service() for servlet jsp threw exception
java.net.SocketException: Connection reset
at
java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:113)
at
java.net.SocketOutputStream.write(SocketOutputStream.java:153)
at
org.apache.coyote.http11.InternalOutputBuffer.realWriteBytes(InternalOutputBuffer.java:218)
at
org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:437)
at
org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:351)
at org.apache.coyote.http11.InternalOutputBuffer
$OutputStreamOutputBuffer.doWrite(InternalOutputBuffer.java:243)
at
org.apache.coyote.http11.filters.ChunkedOutputFilter.doWrite(ChunkedOutputFilter.java:119)
at
org.apache.coyote.http11.AbstractOutputBuffer.doWrite(AbstractOutputBuffer.java:190)
at org.apache.coyote.Response.doWrite(Response.java:533)
at
org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:364)
at
org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:437)
at
org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:351)
at
org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:392)
at
org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:381)
at
org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:93)
at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1026)
at org.apache.commons.io.IOUtils.copy(IOUtils.java:999)
at jfix.servlet.Servlets.write(Servlets.java:47)
at
org.apache.jsp.site.domain.File_jsp._jspService(File_jsp.java:66)
at
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:419)
at
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
at
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at jease.site.Controller.doFilter(Controller.java:134)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at
org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684)
at
org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:471)
at
org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:402)
at
org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:329)
at
org.apache.jasper.runtime.PageContextImpl.doForward(PageContextImpl.java:745)
at
org.apache.jasper.runtime.PageContextImpl.forward(PageContextImpl.java:716)
at
org.apache.jsp.site.Dispatcher_jsp._jspService(Dispatcher_jsp.java:108)
at
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:419)
at
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
at
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at jease.site.Controller.doFilter(Controller.java:134)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at
org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684)
at
org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:471)
at
org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:402)
at
org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:329)
at jease.site.Controller.doFilter(Controller.java:149)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
at
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:399)
at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:317)
at org.apache.coyote.http11.Http11Protocol
$Http11ConnectionHandler.process(Http11Protocol.java:204)
at org.apache.tomcat.util.net.JIoEndpoint
$SocketProcessor.run(JIoEndpoint.java:311)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor
$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:636)
------------------------------------------

I moved the news object to trash and created a new one with the same
content, which works fine. Any ideas?

Ciao!

Maik Jablonski

unread,
Sep 27, 2011, 2:40:07 PM9/27/11
to je...@googlegroups.com
Hi,

> I get the following error when opening a users news object:
>
> ------------------------------------------
> java.lang.NullPointerException
> at jease.cms.domain.Factory.sync(Factory.java:73)
> at jease.cms.domain.Factory.getProperties(Factory.java:62)

somehow a null is stored in the property array of the news object. No
idea what might cause this... I've just checked in two changes which
performs additional null checks so such a null property won't create
the NPE... but this is no fix for the actual cause (which may be hard
to reproduce).

Maybe you can setup a copy of your Jease instance and perform some
property related operations (like adding / removing properties
(with/without Factories), starting/stopping the server in between and
so on). If you find a reproducable schema for creating the NPE, I'm
sure I can fix it.... without a little bit of help of you (or others)
I'm a little bit lost here, because I've lots of other work to do.

> I find the following error in the log at the time when the object was
> changed:
>
> ------------------------------------------
> 12.09.2011 11:59:21 org.apache.catalina.core.ApplicationDispatcher
> invoke
> SCHWERWIEGEND: Servlet.service() for servlet jsp threw exception
> java.net.SocketException: Connection reset

This is unrelated... Tomcat throws this error if a browser closes the
connection before the response is fully written. Maybe Tomcat can be
configured to supress this annoying log... if anyone has an idea,
please share it.

Cheers, Maik

maik.ja...@gmail.com

unread,
Oct 1, 2011, 3:09:28 PM10/1/11
to Jease - The Java CMS with Ease
Hi Marcus,

> > I get the following error when opening a users news object:
>
> > ------------------------------------------
> > java.lang.NullPointerException
> > at jease.cms.domain.Factory.sync(Factory.java:73)
> > at jease.cms.domain.Factory.getProperties(Factory.java:62)

I think I've found the bug and fixed it. Jease uses a special database-
aware garbage collector for persistent values (e.g. properties) which
is triggered every hour. The garbage collection wasn't protected
properly by a lock (guess I tried to be to smart in the past), so
there was a rare chance of a property being deleted from the database
before the corresponding content object was saved. Additionally the
user won't see a problem until the server was restarted, because the
in-memory graph was fine in the meanwhile.

If you want to avoid this problem before I release Jease 2.5 (could
take some time), you should download the fixed jfix.jar and copy it to
your installation:

http://jease.googlecode.com/svn/trunk/Jease/WEB-INF/lib/jfix.jar

Cheers, Maik

Marcus Schopen

unread,
Oct 6, 2011, 8:06:27 PM10/6/11
to je...@googlegroups.com
Am Samstag, den 01.10.2011, 12:09 -0700 schrieb
maik.ja...@gmail.com:

Thank you for your very great support! I'll install your fix and give
you some feedback.

Ciao
Marcus


Reply all
Reply to author
Forward
0 new messages