[jboss-user] [JBossCache] - Problem reading (deserializing) objects from FileCacheLoader
arjan
do-not-reply at jboss.com
Tue Nov 20 07:24:27 EST 2007
Hi,
I can't seem to get it working.. I'm running JBossCache on a default JBoss4.0.5 installation (JDK 1.5). I've configured JBossCache as a service (deploy/treecache-service.xml). For each deployed webapp a separate ClassLoader is instantiated, so I have to register a ClassLoader for a section of the TreeCache (see below).
The problem is that once objects are serialized to the file cache, they can't be de-serialized (unmarshalled).
I'm getting stack traces like this:
| java.lang.ClassNotFoundException: No ClassLoaders found for: nl.yirdis.monet.chart.ChartMetadata
| at org.jboss.mx.loading.LoadMgr3.beginLoadTask(LoadMgr3.java:212)
| at org.jboss.mx.loading.RepositoryClassLoader.loadClassImpl(RepositoryClassLoader.java:514)
| at org.jboss.mx.loading.RepositoryClassLoader.loadClass(RepositoryClassLoader.java:408)
| at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
| at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
| at java.lang.Class.forName0(Native Method)
| at java.lang.Class.forName(Class.java:242)
| at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:584)
| at org.jboss.invocation.MarshalledValueInputStream.resolveClass(MarshalledValueInputStream.java:109)
| at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1543)
| at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1465)
| at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1698)
| at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1304)
| at java.io.ObjectInputStream.readObject(ObjectInputStream.java:349)
| at java.util.HashMap.readObject(HashMap.java:1013)
| at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
| at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
| at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
| at java.lang.reflect.Method.invoke(Method.java:585)
| at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:946)
| at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1818)
| at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1718)
| at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1304)
| at java.io.ObjectInputStream.readObject(ObjectInputStream.java:349)
| at org.jboss.cache.loader.FileCacheLoader.loadAttributes(FileCacheLoader.java:486)
| at org.jboss.cache.loader.FileCacheLoader.get(FileCacheLoader.java:136)
| at org.jboss.cache.interceptors.CacheLoaderInterceptor.loadData(CacheLoaderInterceptor.java:443)
| at org.jboss.cache.interceptors.CacheLoaderInterceptor.loadNode(CacheLoaderInterceptor.java:353)
| at org.jboss.cache.interceptors.CacheLoaderInterceptor.invoke(CacheLoaderInterceptor.java:180)
| at org.jboss.cache.interceptors.Interceptor.invoke(Interceptor.java:68)
| at org.jboss.cache.interceptors.UnlockInterceptor.invoke(UnlockInterceptor.java:32)
|
In my treecache configuration I've enabled RegionBasedMarshalling and InactiveOnStartup, as described in the user guide:
| <attribute name="UseRegionBasedMarshalling">true</attribute>
| <attribute name="InactiveOnStartup">true</attribute>
|
The region is configured like this:
| <region name="/nl/yirdis/monet/charts">
| <attribute name="maxNodes">1000</attribute>
| <attribute name="timeToLiveSeconds">86400</attribute>
| <attribute name="maxAgeSeconds">86400</attribute>
| </region>
|
In my code (using Spring), I've set the ClassLoader for that region to the Classloader of the webapp:
| public void afterPropertiesSet() throws Exception {
| treeCache.registerClassLoader("/nl/yirdis/monet/charts/", ChartMetadata.class.getClassLoader());
| treeCache.activateRegion("/nl/yirdis/monet/charts/");
| }
|
(ChartMetadata is a class containing the serialized stuff. It implements the Serializable interface).
Deactivation on undeployment of the webapp is done likewise, as stated in the docs.
Where did I go wrong? What's causing the TreeCache (FileCacheLoader) to cause class loading errors?
Regards,
Arjan
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4106343#4106343
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4106343
More information about the jboss-user
mailing list