|
|
|
From my experience de/serialization of caches is seriously broken in OSCache 2.1.1 (and probably all version before) - at least with LRUCache.
From my observation the problem is that LRUCache during deserialization tries to write into a collection, which is null at that moment. I fixed this in my own patched version of AbstractConcurrentReadCache and LRUCache. I will attach them to this issue. The patched classes. Note: AbstractConcurrentReadCache contains other, unrelated changes as well.
Please try the current CVS HEAD of the upcoming release 2.3. Java 1.4 is required.
Hi all!
I can still confirm this bug using oscache-2.3.2. Environment: Apache Tomcat 5.5 on Windows XP, JDK 1.5.0_06 Stacktrace: java.lang.NullPointerException at com.opensymphony.oscache.base.algorithm.LRUCache.itemPut(LRUCache.java:93) at com.opensymphony.oscache.base.algorithm.AbstractConcurrentReadCache.put(AbstractConcurrentReadCache.java:1612) at com.opensymphony.oscache.base.algorithm.AbstractConcurrentReadCache.put(AbstractConcurrentReadCache.java:863) at com.opensymphony.oscache.base.algorithm.AbstractConcurrentReadCache.readObject(AbstractConcurrentReadCache.java:1210) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at java.io.ObjectStreamClass.invokeReadObject(Unknown Source) at java.io.ObjectInputStream.readSerialData(Unknown Source) at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source) at java.io.ObjectInputStream.readObject0(Unknown Source) at java.io.ObjectInputStream.defaultReadFields(Unknown Source) at java.io.ObjectInputStream.readSerialData(Unknown Source) at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source) at java.io.ObjectInputStream.readObject0(Unknown Source) at java.io.ObjectInputStream.readObject(Unknown Source) at org.apache.catalina.session.StandardSession.readObject(StandardSession.java:1379) at org.apache.catalina.session.StandardSession.readObjectData(StandardSession.java:914) at org.apache.catalina.session.StandardManager.doLoad(StandardManager.java:393) at org.apache.catalina.session.StandardManager.load(StandardManager.java:320) at org.apache.catalina.session.StandardManager.start(StandardManager.java:636) at org.apache.catalina.core.ContainerBase.setManager(ContainerBase.java:431) at org.apache.catalina.core.StandardContext.start(StandardContext.java:4130) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1013) at org.apache.catalina.core.StandardHost.start(StandardHost.java:718) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1013) at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:442) at org.apache.catalina.core.StandardService.start(StandardService.java:450) at org.apache.catalina.core.StandardServer.start(StandardServer.java:709) at org.apache.catalina.startup.Catalina.start(Catalina.java:551) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:275) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413) Regards, Florian Florian, how did you configured OSCache? Do you use any cluster settings or serialize the cache?
This problem isn't easy to solve without structual changes in OSCache. This issue should be fixed with release 3.0 which involves a big change in OSCache. Furthermore I haven't any clue why LRUCache etc. should be serializable.
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<Mar 16, 2005 2:23:45 PM CET> <Error> <HTTP> <101017> <[ServletContext(id=5962703,name=docs,context-path=)] Root cause of ServletException
java.lang.NullPointerException
at com.opensymphony.oscache.base.algorithm.LRUCache.itemPut(LRUCache.java:157)
at com.opensymphony.oscache.base.algorithm.AbstractConcurrentReadCache.put(AbstractConcurrentReadCache.java:1566)
at com.opensymphony.oscache.base.algorithm.AbstractConcurrentReadCache.put(AbstractConcurrentReadCache.java:866)
at com.opensymphony.oscache.base.algorithm.AbstractConcurrentReadCache.readObject(AbstractConcurrentReadCache.java:1188)
at java.lang.reflect.Method.invoke(Native Method)
at java.io.ObjectInputStream.invokeObjectReader(ObjectInputStream.java:2209)
at java.io.ObjectInputStream.inputObject(ObjectInputStream.java:1406)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:381)
at java.io.ObjectInputStream.inputClassFields(ObjectInputStream.java:2258)
at java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:514)
at java.io.ObjectInputStream.inputObject(ObjectInputStream.java:1407)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:381)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:231)
at weblogic.servlet.internal.AttributeWrapper.getObject(AttributeWrapper.java:104)
at weblogic.servlet.internal.AttributeWrapper.getObject(AttributeWrapper.java:66)
at weblogic.servlet.internal.WebAppServletContext.getAttribute(WebAppServletContext.java:410)
at com.opensymphony.oscache.web.ServletCacheAdministrator.getAppScopeCache(ServletCacheAdministrator.java:239)
at com.opensymphony.oscache.web.ServletCacheAdministrator.getCache(ServletCacheAdministrator.java:220)
at se.posten.pse.framework.core.cache.admin.internal.CacheableAdminOSCacheImpl.getCache(CacheableAdminOSCacheImpl.java:106)
at se.posten.pse.framework.core.cache.admin.internal.CacheableAdminOSCacheImpl.doFlush(CacheableAdminOSCacheImpl.java:123)
at se.posten.pse.framework.core.cache.admin.internal.CacheableAdminOSCacheImpl.flush(CacheableAdminOSCacheImpl.java:114)
at se.posten.pse.framework.core.cache.web.CacheAdminController.flushCacheable(CacheAdminController.java:135)
at se.posten.pse.framework.core.cache.web.CacheAdminController.handleRequest(CacheAdminController.java:78)
at jsp_servlet._admin._cache.__cacheAdmin_do._jspService(__cacheAdmin_do.java:181)
at se.posten.pse.framework.application.presentation.PseJspBase.service(PseJspBase.java:73)
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1058)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:401)
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:20)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
at se.posten.pse.business.darksite.DarkSiteServletFilter.doFilter(DarkSiteServletFilter.java:61)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
at se.posten.pse.framework.core.cache.web.filter.PseCacheFilter.doFilter(PseCacheFilter.java:203)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
at se.posten.pse.framework.core.thread.filter.ThreadQueueRedirectFilter.doFilter(ThreadQueueRedirectFilter.java:69)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
at se.posten.pse.framework.core.monitor.filter.MonitorURLMappingFilter.doFilter(MonitorURLMappingFilter.java:84)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
at se.posten.pse.framework.core.oldurls.filter.CheckOldURLFilter.doFilter(CheckOldURLFilter.java:67)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
at se.posten.pse.framework.core.request.RequestServletFilter.doFilter(RequestServletFilter.java:45)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:5418)
at weblogic.security.service.SecurityServiceManager.runAs(SecurityServiceManager.java:744)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3086)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2544)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:153)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:134)