|
SecondLevelCacheStatistics throw an NullPointerException when elements in the cache are expired:
org.hibernate.cache.ehcache.internal.regions.EhcacheDataRegion.toMap(EhcacheDataRegion.java:191) at org.hibernate.stat.internal.ConcurrentSecondLevelCacheStatisticsImpl.getEntries(ConcurrentSecondLevelCacheStatisticsImpl.java:77) at org.apache.jsp.admin.hibernateCache_jsp._jspService(hibernateCache_jsp.java:443) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:388) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at net.sourceforge.stripes.controller.StripesFilter.doFilter(StripesFilter.java:260) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at com.dreikraft.commons.util.EncodingFilter.doFilter(EncodingFilter.java:38) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:563) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) at java.lang.Thread.run(Thread.java:695) Caused by: java.lang.NullPointerException at org.hibernate.cache.ehcache.internal.regions.EhcacheDataRegion.toMap(EhcacheDataRegion.java:180) ... 27 more
The line throwing the Exception is this one:
result.put( key, getCache().get( key ).getObjectValue() );
It reads an element from the Cache (which is an EhCache instance). The contract of this method says, that it returns the element or null if it does not exist. If the returned value is null, an NPE is thrown because it immediately calls .getObjectValue() on null without checking.
Further analysis reveals that the default Cache implementation by EhCache expires Element upon get(). This means, if an object expired from the cache, it might still be returned by getKeys(), but may subsequently return null because it is expired.
Another issue with this call is that statistics are updated. This may not be intended for a method generating statistics, therefore getQuiet() may need to be used.
|