2 Replies Latest reply on Nov 12, 2007 8:10 AM by tmp8914

    JBossCache 2.0.0.RC3 unmarshallObject exception

    tmp8914

      Hello Experts,
      I've got a bizzar replication Exception with JBossCache 2.0.0.RC3.
      The code snippet:

      1 import org.apache.log4j.Logger;
       2 import java.io.*;
       3 import java.util.*;
       4 import org.jboss.cache.*;
       5 import org.jboss.cache.config.*;
       6 import org.jboss.*;
       7
       8 class Info implements Serializable
       9 {
       10 String s;
       11 //byte[] data;
       12 String[] i;
       13
       14 Info(String s)
       15 {
       16 this.s=s;
       17 //data=new byte[10];
       18 //data[0]=0x1;
       19 i=new String[1];
       20 i[0]=new String("0x2");
       21 }
       22 }
       23
       24 class jbc_store
       25 {
       26 protected Cache c0;
       27 public jbc_store()
       28 {
       29 CacheFactory factory=DefaultCacheFactory.getInstance();
       30 c0=factory.createCache("jbc.conf",false);
       31 Configuration config = c0.getConfiguration();
       32 config.setClusterName("cluster0");
       33 c0.create();
       34 c0.start();
       35 }
       36 public void put(long id,String s)
       37 {
       38 Node rn=c0.getRoot();
       39 Fqn n_path=Fqn.fromString("/test");
       40 Node n=rn.addChild(n_path);
       41 rn.put("key",new Info(s));
       42 }
       43 }


      The application is running on two nodes.
      When I call jbc_store.put(0,"test") the second node which receives the replicated "Info" object catches an exception:
      2007-11-09 12:40:53,504 ERROR InactiveRegionAwareRpcDispatcher : exception marshalling object
      java.lang.ClassNotFoundException: [Ljava.lang.String;
       at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
       at java.security.AccessController.doPrivileged(Native Method)
       at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
       at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
       at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
       at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
       at org.jboss.util.stream.MarshalledValueInputStream.resolveClass(MarshalledValueInputStream.java:58)
       at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1575)
       at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1496)
       at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1624)
       at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1323)
       at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1945)
       at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1869)
       at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
       at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
       at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
       at org.jboss.cache.marshall.CacheMarshaller200.unmarshallObject(CacheMarshaller200.java:537)
       at org.jboss.cache.marshall.CacheMarshaller200.unmarshallMethodCall(CacheMarshaller200.java:642)
       at org.jboss.cache.marshall.CacheMarshaller200.unmarshallObject(CacheMarshaller200.java:541)
       at org.jboss.cache.marshall.CacheMarshaller200.unmarshallMethodCall(CacheMarshaller200.java:642)
       at org.jboss.cache.marshall.CacheMarshaller200.unmarshallObject(CacheMarshaller200.java:541)
       at org.jboss.cache.marshall.CacheMarshaller200.objectFromObjectStream(CacheMarshaller200.java:147)
       at org.jboss.cache.marshall.VersionAwareMarshaller.objectFromByteBuffer(VersionAwareMarshaller.java:154)
       at org.jboss.cache.marshall.InactiveRegionAwareRpcDispatcher.handle(InactiveRegionAwareRpcDispatcher.java:50)
       at org.jgroups.blocks.RequestCorrelator.handleRequest(RequestCorrelator.java:654)
       at org.jgroups.blocks.RequestCorrelator.receiveMessage(RequestCorrelator.java:544)
       at org.jgroups.blocks.RequestCorrelator.receive(RequestCorrelator.java:367)
       at org.jgroups.blocks.MessageDispatcher$ProtocolAdapter.up(MessageDispatcher.java:777)
       at org.jgroups.JChannel.up(JChannel.java:1091)
       at org.jgroups.stack.ProtocolStack.up(ProtocolStack.java:382)
       at org.jgroups.stack.ProtocolStack.receiveUpEvent(ProtocolStack.java:398)
       at org.jgroups.stack.Protocol.passUp(Protocol.java:520)
       at org.jgroups.protocols.pbcast.STATE_TRANSFER.up(STATE_TRANSFER.java:158)
       at org.jgroups.stack.UpHandler.run(Protocol.java:60)



      After some tests, I've noticed that only array couldn't be deserialized (regardless of the type of elements).
      The application is compiled and run under Java6.

      What could be the origin of this problem?
      Thank you.