0 Replies Latest reply on Jun 23, 2010 12:17 PM by Iñaki Serraller Vizcaino

    ConcurrentModificationException in writeSlotWithMethod

    Iñaki Serraller Vizcaino Newbie

      Hello,

       

      We have an application which runs in multiple nodes, they all connect to servers which are distributed amongst these nodes. Sometimes, around 20% of the time or less, we get a ConcurrentModificationException quite similar to https://jira.jboss.org/browse/JBREM-649 in a server when remote nodes are trying to connect (at least I think this is when it happens).

       

      Server publishes service like this:

       

      Class<I> serverInterface = (Class<I>) descriptor.getInterface();


      Remote remote = serverInterface.newInstance();


      String locatorURI = "socket://" + descriptor.getHost() + ":" + descriptor.getPort()
      + "/?serializationtype=jboss";


      transporter = TransporterServer.createTransporterServer(locatorURI, remote, descriptor
      .getName());

       

      Client connects like this:

       

      Class<? extends Remote> serverInterface = descriptor.getInterface();


      String locatorURI = "socket://" + descriptor.getHost() + ":" + descriptor.getPort()
      + "/?serializationtype=jboss";


      Remote remote = (Remote) TransporterClient.createTransporterClient(locatorURI, serverInterface);

       


      Where descriptor is a class which contains the information related to a server, it's host, port, the remote interface class name, etc...


      I'm including the exception below, if you require more code excerpts or anything else please let me know. I'm not sure if we're doing something wrong or if this maybe a problem within JBoss serialization.



      2010-06-18 10:56:54,817 FATAL [WorkerThread#17[192.168.10.1:54394]] org.jboss.serial.persister.RegularObjectPersister     - error
      java.lang.reflect.InvocationTargetException
              at sun.reflect.GeneratedMethodAccessor184.invoke(Unknown Source)
              at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
              at java.lang.reflect.Method.invoke(Method.java:597)
              at org.jboss.serial.persister.RegularObjectPersister.writeSlotWithMethod(RegularObjectPersister.java:120)
              at org.jboss.serial.persister.RegularObjectPersister.defaultWrite(RegularObjectPersister.java:86)
              at org.jboss.serial.persister.RegularObjectPersister.writeData(RegularObjectPersister.java:62)
              at org.jboss.serial.objectmetamodel.ObjectDescriptorFactory.describeObject(ObjectDescriptorFactory.java:276)
              at org.jboss.serial.objectmetamodel.DataContainer$DataContainerDirectOutput.writeObject(DataContainer.java:206)
              at org.jboss.serial.persister.ObjectOutputStreamProxy.writeObjectOverride(ObjectOutputStreamProxy.java:60)
              at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:322)
              at java.util.ArrayList.writeObject(ArrayList.java:570)
              at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
              at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
              at java.lang.reflect.Method.invoke(Method.java:597)
              at org.jboss.serial.persister.RegularObjectPersister.writeSlotWithMethod(RegularObjectPersister.java:120)
              at org.jboss.serial.persister.RegularObjectPersister.defaultWrite(RegularObjectPersister.java:86)
              at org.jboss.serial.persister.RegularObjectPersister.writeData(RegularObjectPersister.java:62)
              at org.jboss.serial.objectmetamodel.ObjectDescriptorFactory.describeObject(ObjectDescriptorFactory.java:276)
              at org.jboss.serial.objectmetamodel.DataContainer$DataContainerDirectOutput.writeObject(DataContainer.java:206)
              at org.jboss.serial.persister.RegularObjectPersister.writeSlotWithFields(RegularObjectPersister.java:182)
              at org.jboss.serial.persister.RegularObjectPersister.defaultWrite(RegularObjectPersister.java:90)
              at org.jboss.serial.persister.RegularObjectPersister.writeData(RegularObjectPersister.java:62)
              at org.jboss.serial.objectmetamodel.ObjectDescriptorFactory.describeObject(ObjectDescriptorFactory.java:276)
              at org.jboss.serial.objectmetamodel.DataContainer$DataContainerDirectOutput.writeObject(DataContainer.java:206)
              at org.jboss.serial.persister.RegularObjectPersister.writeSlotWithFields(RegularObjectPersister.java:182)
              at org.jboss.serial.persister.RegularObjectPersister.defaultWrite(RegularObjectPersister.java:90)
              at org.jboss.serial.persister.RegularObjectPersister.writeData(RegularObjectPersister.java:62)
              at org.jboss.serial.objectmetamodel.ObjectDescriptorFactory.describeObject(ObjectDescriptorFactory.java:276)
              at org.jboss.serial.objectmetamodel.DataContainer$DataContainerDirectOutput.writeObject(DataContainer.java:206)
              at org.jboss.serial.persister.ObjectOutputStreamProxy.writeObjectOverride(ObjectOutputStreamProxy.java:60)
              at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:322)
              at java.util.ArrayList.writeObject(ArrayList.java:570)
              at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
              at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
              at java.lang.reflect.Method.invoke(Method.java:597)
              at org.jboss.serial.persister.RegularObjectPersister.writeSlotWithMethod(RegularObjectPersister.java:120)
              at org.jboss.serial.persister.RegularObjectPersister.defaultWrite(RegularObjectPersister.java:86)
              at org.jboss.serial.persister.RegularObjectPersister.writeData(RegularObjectPersister.java:62)
              at org.jboss.serial.objectmetamodel.ObjectDescriptorFactory.describeObject(ObjectDescriptorFactory.java:276)
              at org.jboss.serial.objectmetamodel.DataContainer$DataContainerDirectOutput.writeObject(DataContainer.java:206)
              at org.jboss.serial.persister.RegularObjectPersister.writeSlotWithFields(RegularObjectPersister.java:182)
              at org.jboss.serial.persister.RegularObjectPersister.defaultWrite(RegularObjectPersister.java:90)
              at org.jboss.serial.persister.RegularObjectPersister.writeData(RegularObjectPersister.java:62)
              at org.jboss.serial.objectmetamodel.ObjectDescriptorFactory.describeObject(ObjectDescriptorFactory.java:276)
              at org.jboss.serial.objectmetamodel.DataContainer$DataContainerDirectOutput.writeObject(DataContainer.java:206)
              at org.jboss.serial.io.JBossObjectOutputStream.writeObjectOverride(JBossObjectOutputStream.java:181)
              at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:322)
              at org.jboss.remoting.serialization.impl.jboss.JBossSerializationManager.sendObject(JBossSerializationManager.java:133)
              at org.jboss.remoting.marshal.serializable.SerializableMarshaller.write(SerializableMarshaller.java:120)
              at org.jboss.remoting.transport.socket.ServerThread.versionedWrite(ServerThread.java:1049)
              at org.jboss.remoting.transport.socket.ServerThread.completeInvocation(ServerThread.java:807)
              at org.jboss.remoting.transport.socket.ServerThread.processInvocation(ServerThread.java:721)
              at org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThread.java:575)
              at org.jboss.remoting.transport.socket.ServerThread.run(ServerThread.java:234)

      Caused by: java.util.ConcurrentModificationException
              at java.util.HashMap$HashIterator.nextEntry(HashMap.java:793)
              at java.util.HashMap$EntryIterator.next(HashMap.java:834)
              at java.util.HashMap$EntryIterator.next(HashMap.java:832)
              at java.util.HashMap.writeObject(HashMap.java:999)
              ... 54 more

       

       

      I'm using the following versions of the JBoss libraries:

      jboss-common-core-2.2.14.GA.jar
      jboss-jmx-4.0.4.jar
      jboss-logging-spi-2.0.3.GA.jar
      jboss-logging-spi-2.0.5.GA.jar
      jboss-remoting-2.5.2.SP2.jar
      jboss-serialization-1.0.3.GA.jar

       

      Any help would be much appreciated since the random probability of failure is obviously a big problem for our application.

       

      Regards,

       

      Iñaki