[ https://issues.apache.org/jira/browse/CONFIGURATION-278?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12500685 ]
Oliver Heger commented on CONFIGURATION-278: -------------------------------------------- Most of our configuration classes are not thread-safe when they are updated (concurrent read-only access should be unproblematic though). For instance BaseConfiguration uses a plain Map for storing its data. I disagree that unpredictable results in case of concurrent modifications are better than an exception. This would make bugs of this kind nearly undetectable. The tread-safety (or unsafety) of the configuration classes should be clearly documented (I am not sure whether there is already some information about this on our site), then it is up to the user to handle this properly. A decorator for synchronizing configurations is something I also had in mind. This is analogous to the way the Java collections framework handles this topic: plain collections are unsynchronized, but if needed, synchronization can easily be added. I am not sure how such a decorator could be implemented in an elegant way; maybe AOP or dynamic proxies could be a good choice. So I would suggest closing this ticket as WON'T FIX and opening a new one for the decorator. > ConcurrentModificationException in PropertiesConfigurationLayout > ---------------------------------------------------------------- > > Key: CONFIGURATION-278 > URL: https://issues.apache.org/jira/browse/CONFIGURATION-278 > Project: Commons Configuration > Issue Type: Bug > Affects Versions: 1.4 > Reporter: Emmanuel Bourg > Fix For: 1.5 > > > PropertiesConfigurationLayout is not thread safe, if a configuration event is > received when the configuration is being saved, a > ConcurrentModificationException is thrown : > java.util.ConcurrentModificationException > at > org.apache.commons.collections.map.AbstractLinkedMap$LinkIterator.nextEntry(AbstractLinkedMap.java:555) > at > org.apache.commons.collections.map.AbstractLinkedMap$KeySetIterator.next(AbstractLinkedMap.java:455) > at > org.apache.commons.configuration.PropertiesConfigurationLayout.save(PropertiesConfigurationLayout.java:455) > at > org.apache.commons.configuration.PropertiesConfiguration.save(PropertiesConfiguration.java:410) > at > org.apache.commons.configuration.AbstractFileConfiguration.save(AbstractFileConfiguration.java:517) > at > org.apache.commons.configuration.AbstractFileConfiguration.save(AbstractFileConfiguration.java:484) > at > org.apache.commons.configuration.AbstractFileConfiguration.save(AbstractFileConfiguration.java:451) > at > org.apache.commons.configuration.AbstractFileConfiguration.save(AbstractFileConfiguration.java:425) > at > org.apache.commons.configuration.AbstractFileConfiguration.save(AbstractFileConfiguration.java:373) > at > org.apache.commons.configuration.AbstractFileConfiguration.possiblySave(AbstractFileConfiguration.java:725) > at > org.apache.commons.configuration.AbstractFileConfiguration.clearProperty(AbstractFileConfiguration.java:764) > at > org.apache.commons.configuration.DataConfiguration.clearProperty(DataConfiguration.java:109) > at > org.apache.commons.configuration.AbstractConfiguration.setProperty(AbstractConfiguration.java:483) > This happens easily in a multi threaded application using a central > configuration with auto saved enabled. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]