[
http://opensource.atlassian.com/projects/hibernate/browse/METAGEN-49?page...
]
Robin Sander commented on METAGEN-49:
-------------------------------------
Note that the entities in the attached test project are a sub-set of a considerably larger
model. I've simply removed entity after entity while checking that the error still
occurs.
It seems that either the inheritance hierarchy (User -> LocalizedDataContainer ->
EntityBase) or the use of generics (or both) is the cause of the problem.
If the hierarchy is simplified or if the whole "groups" package gets removed the
bug does not occur anymore.
JPAMetaModelEntityProcessor.createMetaModelClasses calls remove
within foreach loop (causing a ConcurrentModificationException)
-------------------------------------------------------------------------------------------------------------------------------
Key: METAGEN-49
URL:
http://opensource.atlassian.com/projects/hibernate/browse/METAGEN-49
Project: Hibernate Metamodel Generator
Issue Type: Bug
Components: processor
Affects Versions: 1.1.0.Final
Environment: Hibernate 3.6.0, Java 6 (1.6.0_22), Mac OS X 10.6.5
Reporter: Robin Sander
Assignee: Hardy Ferentschik
Attachments: metagen49.zip
Running the annotation processor causes a ConcurrentModificationException.
I'm using Maven and the maven-processor-plugin 1.3.7 but from looking into the
sources I guess this bug occurs in any environment.
JPAMetaModelEntityProcessor.createMetaModelClasses iterates of a
Collection<MetaEntity> using a foreach loop and calls remove
on the same collection which causes a ConcurrentModificationException.
Obviously an iterator should be used instead.
Here are the lines concerned:
{code:java}
Collection<MetaEntity> toProcessEntities = context.getMetaEmbeddables();
while ( !toProcessEntities.isEmpty() ) {
Set<MetaEntity> processedEntities = new HashSet<MetaEntity>();
int toProcessCountBeforeLoop = toProcessEntities.size();
for ( MetaEntity entity : toProcessEntities ) {
// see METAGEN-36
if ( generatedModelClasses.contains( entity.getQualifiedName() ) ) {
toProcessEntities.remove( entity ); // XXX this causes a
ConcurrentModificationException
continue;
}
...
{code}
Here is the stacktrace:
{code}
...
[INFO] diagnostic Note: Hibernate JPA 2 Static-Metamodel Generator 1.1.0.Final
An annotation processor threw an uncaught exception.
Consult the following stack trace for details.
java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:793)
at java.util.HashMap$ValueIterator.next(HashMap.java:822)
at
org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor.createMetaModelClasses(JPAMetaModelEntityProcessor.java:153)
at
org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor.process(JPAMetaModelEntityProcessor.java:133)
at
com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:625)
at
com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:554)
at
com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:699)
at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:981)
at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:727)
at com.sun.tools.javac.main.Main.compile(Main.java:353)
at com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:115)
at
org.bsc.maven.plugin.processor.AbstractAnnotationProcessorMojo.executeWithExceptionsHandled(AbstractAnnotationProcessorMojo.java:261)
at
org.bsc.maven.plugin.processor.AbstractAnnotationProcessorMojo.execute(AbstractAnnotationProcessorMojo.java:129)
at
org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:490)
{code}
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://opensource.atlassian.com/projects/hibernate/secure/Administrators....
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira