IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Seam Java Discussion :

ConcurrentModificationException lors d'un merge


Sujet :

Seam Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2002
    Messages : 44
    Par défaut ConcurrentModificationException lors d'un merge
    Bonjour tout le monde.

    Je me retouve devant un drôle de bidule qui me laisse perplexe.
    J'ai, dans une action, un appel à une méthode placée dans une classe de service.

    Or, si cette méthode fonctionne parfaitement bien lors du premier appel, la console m'explique que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    Caused by: java.util.ConcurrentModificationException
    	at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:449)
    	at java.util.AbstractList$Itr.next(AbstractList.java:420)
    	at org.hibernate.collection.AbstractPersistentCollection$IteratorProxy.next(AbstractPersistentCollection.java:555)
    	at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:296)
    	at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:242)
    	at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:219)
    	at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
    	at org.hibernate.engine.Cascade.cascade(Cascade.java:130)
    	at org.hibernate.event.def.DefaultMergeEventListener.cascadeOnMerge(DefaultMergeEventListener.java:407)
    	at org.hibernate.event.def.DefaultMergeEventListener.entityIsPersistent(DefaultMergeEventListener.java:152)
    	at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:126)
    	at org.hibernate.impl.SessionImpl.fireMerge(SessionImpl.java:687)
    	at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:669)
    	at org.hibernate.engine.CascadingAction$6.cascade(CascadingAction.java:245)
    	at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268)
    	at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216)
    	at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
    	at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:296)
    	at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:242)
    	at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:219)
    	at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
    	at org.hibernate.engine.Cascade.cascade(Cascade.java:130)
    	at org.hibernate.event.def.DefaultMergeEventListener.cascadeOnMerge(DefaultMergeEventListener.java:407)
    	at org.hibernate.event.def.DefaultMergeEventListener.entityIsPersistent(DefaultMergeEventListener.java:152)
    	at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:126)
    	at org.hibernate.impl.SessionImpl.fireMerge(SessionImpl.java:687)
    	at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:669)
    	at org.hibernate.engine.CascadingAction$6.cascade(CascadingAction.java:245)
    	at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268)
    	at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216)
    	at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
    	at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:296)
    	at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:242)
    	at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:219)
    	at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
    	at org.hibernate.engine.Cascade.cascade(Cascade.java:130)
    	at org.hibernate.event.def.DefaultMergeEventListener.cascadeOnMerge(DefaultMergeEventListener.java:407)
    	at org.hibernate.event.def.DefaultMergeEventListener.entityIsPersistent(DefaultMergeEventListener.java:152)
    	at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:126)
    	at org.hibernate.impl.SessionImpl.fireMerge(SessionImpl.java:687)
    	at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:669)
    	at org.hibernate.engine.CascadingAction$6.cascade(CascadingAction.java:245)
    	at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268)
    	at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216)
    	at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
    	at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:296)
    	at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:242)
    	at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:219)
    	at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
    	at org.hibernate.engine.Cascade.cascade(Cascade.java:130)
    	at org.hibernate.event.def.DefaultMergeEventListener.cascadeOnMerge(DefaultMergeEventListener.java:407)
    	at org.hibernate.event.def.DefaultMergeEventListener.entityIsPersistent(DefaultMergeEventListener.java:152)
    	at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:126)
    	at org.hibernate.impl.SessionImpl.fireMerge(SessionImpl.java:687)
    	at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:669)
    	at org.hibernate.engine.CascadingAction$6.cascade(CascadingAction.java:245)
    	at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268)
    	at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216)
    	at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
    	at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:296)
    	at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:242)
    	at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:219)
    	at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
    	at org.hibernate.engine.Cascade.cascade(Cascade.java:130)
    	at org.hibernate.event.def.DefaultMergeEventListener.cascadeOnMerge(DefaultMergeEventListener.java:407)
    	at org.hibernate.event.def.DefaultMergeEventListener.entityIsPersistent(DefaultMergeEventListener.java:152)
    	at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:126)
    	at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:53)
    	at org.hibernate.impl.SessionImpl.fireMerge(SessionImpl.java:677)
    	at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:661)
    	at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:665)
    	at org.hibernate.ejb.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:227)
    	at org.jboss.seam.persistence.EntityManagerProxy.merge(EntityManagerProxy.java:130)
    	at com.monceauassurances.monceaunet.front.client.service.ClientServiceImpl.enregistrer(ClientServiceImpl.java:394)
    	at com.monceauassurances.monceaunet.front.client.service.ClientServiceImpl.getNumOperationByClient(ClientServiceImpl.java:496)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	at java.lang.reflect.Method.invoke(Method.java:585)
    	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:112)
    	at org.jboss.ejb3.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:166)
    	at org.jboss.seam.intercept.EJBInvocationContext.proceed(EJBInvocationContext.java:44)
    	at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:56)
    	at org.jboss.seam.core.BijectionInterceptor.aroundInvoke(BijectionInterceptor.java:46)
    	at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
    	at org.jboss.seam.persistence.ManagedEntityIdentityInterceptor.aroundInvoke(ManagedEntityIdentityInterceptor.java:48)
    	at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
    	at org.jboss.seam.transaction.RollbackInterceptor.aroundInvoke(RollbackInterceptor.java:31)
    	at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
    	at org.jboss.seam.core.MethodContextInterceptor.aroundInvoke(MethodContextInterceptor.java:42)
    	at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
    	at org.jboss.seam.persistence.EntityManagerProxyInterceptor.aroundInvoke(EntityManagerProxyInterceptor.java:26)
    	at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
    	at org.jboss.seam.persistence.HibernateSessionProxyInterceptor.aroundInvoke(HibernateSessionProxyInterceptor.java:27)
    	at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
    	at org.jboss.seam.intercept.RootInterceptor.invoke(RootInterceptor.java:107)
    	at org.jboss.seam.intercept.SessionBeanInterceptor.aroundInvoke(SessionBeanInterceptor.java:50)
    	at sun.reflect.GeneratedMethodAccessor150.invoke(Unknown Source)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	at java.lang.reflect.Method.invoke(Method.java:585)
    	at org.jboss.ejb3.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:118)
    	at org.jboss.ejb3.interceptor.EJB3InterceptorsInterceptor.invoke(EJB3InterceptorsInterceptor.java:63)
    	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
    	at org.jboss.ejb3.entity.ExtendedPersistenceContextPropagationInterceptor.invoke(ExtendedPersistenceContextPropagationInterceptor.java:57)
    	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
    	at org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:54)
    	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
    	at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47)
    	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
    	at org.jboss.aspects.tx.TxPolicy.invokeInCallerTx(TxPolicy.java:126)
    Le code concerné par l'erreur (ClientServiceImpl.java:394) est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
          client.setMaxNumOperation(max + 1);
          client = entityManager.merge(client);
          entityManager.flush();
    Comment peut on faire une modification concurrente dessus, alors que
    1) le premier passage passe (on n'est donc à priori pas concurent avec un autre appel à entitymanager)
    2)l'entityManager a été flushé.

    Quelqu'un aurait-il une idée?

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2002
    Messages : 44
    Par défaut
    Bon, ben j'ai finit par trouver une solution qui en vaut probablement une autre, je vous la donne en espérant qu'elle puisse être utile.

    J'avais, ailleurs dans mon code, une méthode faisant appel à entityManager.refresh(client).
    En remplaçant le refresh par un getById(client.getId()), l'exception dirparaît. Si quelqu'un a une explication, voire même une solution plus satisfaisante que ce bricolage, je suis preneur. Mais dans l'immédiat, on va estimé que c'est résolu.

    Ca, c'est fait.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. LazyIntializationException lors d'un merge()
    Par mick8569 dans le forum JPA
    Réponses: 0
    Dernier message: 10/01/2011, 15h23
  2. [TortoiseSVN] erreur lors d'un merge
    Par fayred dans le forum Subversion
    Réponses: 1
    Dernier message: 23/11/2009, 11h59
  3. Réponses: 10
    Dernier message: 17/06/2009, 17h05
  4. [Eclipse] résolution de conflit lors d'un Merge
    Par !!Steff!! dans le forum Subversion
    Réponses: 3
    Dernier message: 26/06/2008, 14h49
  5. dupliquer des lignes lors d'un merge
    Par mitmit dans le forum SAS Base
    Réponses: 1
    Dernier message: 12/05/2008, 14h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo