Menu

Dozer 2.3 ConcurrentModificationException

Help
2006-09-23
2013-05-02
  • Bjørn Ola Smievoll

    Got this from some message driven beans that use a utility class that has dozer as a private static final volatile class member.  The exceptions happend pretty much right after startup. Don't have time to look further into it right now, but thought id report it still.

    2006-09-23 14:44:41,888 ERROR [WorkManager(3)-16] [net.sf.dozer.util.mapping.MappingProcessor] Field mapping error -->
      MapId: null
      Type: null
      Source parent class: mysys.external.FlightLeg
      Source field name: flightInfo
      Source field type: class mysys.external.FlightInfo
      Source field value: mysys.external.FlightInfo@58a52db3
      Dest parent class: mysys.internal.FlightLeg
      Dest field name: flightInfo
      Dest field type: mysys.internal.FlightInfo
    java.util.ConcurrentModificationException
            at java.util.HashMap$HashIterator.nextEntry(HashMap.java:787)
            at java.util.HashMap$EntryIterator.next(HashMap.java:829)
            at java.util.HashMap$EntryIterator.next(HashMap.java:827)
            at java.util.HashMap.putAllForCreate(HashMap.java:427)
            at java.util.HashMap.<init>(HashMap.java:219)
            at net.sf.dozer.util.mapping.util.ClassMapFinder.findInterfaceOrAbstractMapping(ClassMapFinder.java:87)
            at net.sf.dozer.util.mapping.util.ClassMapFinder.findClassMap(ClassMapFinder.java:42)
            at net.sf.dozer.util.mapping.MappingProcessor.getClassMap(MappingProcessor.java:1040)
            at net.sf.dozer.util.mapping.MappingProcessor.mapCustomObject(MappingProcessor.java:500)
            at net.sf.dozer.util.mapping.MappingProcessor.mapOrRecurseObject(MappingProcessor.java:451)
            at net.sf.dozer.util.mapping.MappingProcessor.mapOrRecurseObject(MappingProcessor.java:387)
            at net.sf.dozer.util.mapping.MappingProcessor.mapFromFieldMap(MappingProcessor.java:306)
            at net.sf.dozer.util.mapping.MappingProcessor.mapField(MappingProcessor.java:277)
            at net.sf.dozer.util.mapping.MappingProcessor.map(MappingProcessor.java:230)
            at net.sf.dozer.util.mapping.MappingProcessor.mapCustomObject(MappingProcessor.java:504)
            at net.sf.dozer.util.mapping.MappingProcessor.mapOrRecurseObject(MappingProcessor.java:451)
            at net.sf.dozer.util.mapping.MappingProcessor.mapOrRecurseObject(MappingProcessor.java:387)
            at net.sf.dozer.util.mapping.MappingProcessor.addOrUpdateToList(MappingProcessor.java:810)
            at net.sf.dozer.util.mapping.MappingProcessor.mapArrayToArray(MappingProcessor.java:669)
            at net.sf.dozer.util.mapping.MappingProcessor.mapCollection(MappingProcessor.java:528)
            at net.sf.dozer.util.mapping.MappingProcessor.mapOrRecurseObject(MappingProcessor.java:431)
            at net.sf.dozer.util.mapping.MappingProcessor.mapOrRecurseObject(MappingProcessor.java:387)
            at net.sf.dozer.util.mapping.MappingProcessor.mapFromFieldMap(MappingProcessor.java:306)
            at net.sf.dozer.util.mapping.MappingProcessor.mapField(MappingProcessor.java:277)
            at net.sf.dozer.util.mapping.MappingProcessor.map(MappingProcessor.java:230)
            at net.sf.dozer.util.mapping.MappingProcessor.mapCustomObject(MappingProcessor.java:504)
            at net.sf.dozer.util.mapping.MappingProcessor.mapOrRecurseObject(MappingProcessor.java:451)
            at net.sf.dozer.util.mapping.MappingProcessor.mapOrRecurseObject(MappingProcessor.java:387)
            at net.sf.dozer.util.mapping.MappingProcessor.mapFromFieldMap(MappingProcessor.java:306)
            at net.sf.dozer.util.mapping.MappingProcessor.mapField(MappingProcessor.java:277)
            at net.sf.dozer.util.mapping.MappingProcessor.map(MappingProcessor.java:230)
            at net.sf.dozer.util.mapping.MappingProcessor.map(MappingProcessor.java:136)
            at net.sf.dozer.util.mapping.MappingProcessor.map(MappingProcessor.java:110)
            at net.sf.dozer.util.mapping.DozerBeanMapper.map(DozerBeanMapper.java:108)
    [...]

     
    • Matt Tierney

      Matt Tierney - 2006-09-24

      Bjorn,  Thanks for finding this and posting.  I am reopening bug #1550275.  We thought we had it fixed, but I think there is still a small bug with the current code.  The problem is that the custom mappings Map is sychronized, so you will see the concurrent mod ex if you are iterating over the map and another thread is trying to modify the map.  I think the chances of the exception are relatively small and I think it will be isolated to app initialization as this is when the custom mappings map is being modified

       
    • Matt Tierney

      Matt Tierney - 2006-09-26

      I have fixed the issue in the 2.4 code base.  I attached a 2.3 patch to the bug that you can use until the formal release of 2.4.  Thanks again for posting this defect.  It was a good find

      The patch jar is named dozerpatch_23_001.jar

       
    • Bjørn Ola Smievoll

      Downloaded the fixed classes about three weeks ago and haven't had any problems since then, so a big thanks for quickly fixing the problem and overall for giving us a very good product.

       

Log in to post a comment.