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

Spring Java Discussion :

problème de commit : source inconnue


Sujet :

Spring Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2005
    Messages
    275
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 275
    Par défaut problème de commit : source inconnue
    Bonjour,

    J'ai un moteur de calcul qui crée plusieurs transactions. Le but étant de gérer un certain lotissement des centaines de milliers de données à traiter, pour qu'une transaction permette la gestion d'un nombre défini d'entrées. Par exemple, 100.000 entrées seront gérées par 100 transaction gérant chacune 1000 entrées.

    A la fin de mon exécution, plus d'un millier de transactions ont été gérées. Parmi elles, deux aboutissent à une erreur dont je ne parviens pas à déterminer la cause :

    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
    [27/11/08 15:23:16:938 CET] 0000004a SystemErr     R org.springframework.orm.jdo.JdoSystemException: [3.8] La validation de la transaction a échoué.; nested exception is [3.8] La validation de la transaction a échoué.
    [LiDO 3.1.1 build 678 utilisant le driver oracle.jdbc.driver.OracleDriver avec le JDK 1.4.2 de IBM Corporation]
    javax.jdo.JDOException: [3.8] La validation de la transaction a échoué.
          caused by: 
          java.lang.NullPointerException
          at xcalia.lido.internal.cache.shared.d.a(d.java(Compiled Code))
          at xcalia.lido.internal.cache.shared.d.b(d.java(Compiled Code))
          at xcalia.lido.internal.cache.shared.d.a(d.java(Compiled Code))
          at xcalia.lido.internal.cache.e.a(e.java(Compiled Code))
          at xcalia.lido.internal.cache.e.a(e.java:115)
          at xcalia.lido.internal.cache.c.a(c.java:126)
          at xcalia.lido.f.p(f.java:607)
          at xcalia.lido.f.commit(f.java:1656)
          at org.springframework.orm.jdo.JdoTransactionManager.doCommit(JdoTransactionManager.java:376)
          at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:500)
          at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:473)
          at org.springframework.transaction.interceptor.TransactionAspectSupport.doCommitTransactionAfterReturning(TransactionAspectSupport.java:267)
          at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
          at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:170)
          at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:176)
          at $Proxy2.eclatementMoteurListClePrimeFonctionelle(Unknown Source)
          at com.bnppa.sdf.oasis.services.all.engineEp.impl.ThreadEclate.startProcess(ThreadEclate.java:85)
          at com.bnppa.sdf.oasis.services.all.engineEp.impl.ThreadEclate.run(ThreadEclate.java:54)
     
    [27/11/08 15:23:16:969 CET] 0000004a SystemErr     R [LiDO 3.1.1 build 678 utilisant le driver oracle.jdbc.driver.OracleDriver avec le JDK 1.4.2 de IBM Corporation]
    javax.jdo.JDOException: [3.8] La validation de la transaction a échoué.
          caused by: 
          java.lang.NullPointerException
          at xcalia.lido.internal.cache.shared.d.a(d.java(Compiled Code))
          at xcalia.lido.internal.cache.shared.d.b(d.java(Compiled Code))
          at xcalia.lido.internal.cache.shared.d.a(d.java(Compiled Code))
          at xcalia.lido.internal.cache.e.a(e.java(Compiled Code))
          at xcalia.lido.internal.cache.e.a(e.java:115)
          at xcalia.lido.internal.cache.c.a(c.java:126)
          at xcalia.lido.f.p(f.java:607)
          at xcalia.lido.f.commit(f.java:1656)
          at org.springframework.orm.jdo.JdoTransactionManager.doCommit(JdoTransactionManager.java:376)
          at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:500)
          at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:473)
          at org.springframework.transaction.interceptor.TransactionAspectSupport.doCommitTransactionAfterReturning(TransactionAspectSupport.java:267)
          at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
          at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:170)
          at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:176)
          at $Proxy2.eclatementMoteurListClePrimeFonctionelle(Unknown Source)
          at com.bnppa.sdf.oasis.services.all.engineEp.impl.ThreadEclate.startProcess(ThreadEclate.java:85)
          at com.bnppa.sdf.oasis.services.all.engineEp.impl.ThreadEclate.run(ThreadEclate.java:54)
    Le point d'entrée Java créant la transaction est une méthode appellée eclatementMoteurListClePrimeFonctionelle, faisant elle-même appel à des méthodes nommées createXXX, updateXXXX, deleteXXXX, ou encore miseAJourXXXX. La transaction est définie comme suit :

    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
    	<bean 	id="eclatementMassifCumule" 
    			class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    		<property name="transactionManager" ref="oasisEngineEpTransactionManager"/>
    		<!-- The target is the clientServicesImpl defined above -->
    		<property name="target" ref="moteurEclatementCumuleImpl"/>
    		<!-- All method calls are encapsulated in a JDO transaction -->
    		<property name="transactionAttributes">
    			<props>
    				<prop key="create*">PROPAGATION_REQUIRED</prop>
    				<prop key="update*">PROPAGATION_REQUIRED</prop>
    				<prop key="delete*">PROPAGATION_REQUIRED</prop>
    				<prop key="miseAjour*">PROPAGATION_REQUIRED</prop>
    				<prop key="eclatementMoteurListClePrimeFonctionelle">PROPAGATION_REQUIRED,readOnly</prop>
    				<prop key="getListClePrimeFonctionelleRange">PROPAGATION_REQUIRED,readOnly</prop>
    				<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
     
    			</props>
    		</property>
    	</bean>
    Y aurait-il un problème dans mon paramétrage ?

  2. #2
    Membre expérimenté Avatar de aperrin
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    221
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 221
    Par défaut
    Identifie les 2 lignes concernées, les données doivent sûrment contenir la solution.
    Sinon il n'y a pas un code d'erreur oracle ?

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2005
    Messages
    275
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 275
    Par défaut
    Il n'y a pas d'erreur Oracle non. La trace de l'erreur donnée dans l'explication du problème est exactement celle qui est interceptée. Cela se produit après l'accolade fermande du service associé à la transaction. Donc bien à sa cloture.

    J'ai rajouté quelques informations dans les logs pour savoir à quel moment de l'itération se produit le "commit failed" par rapport ma table en entrées. Le traitement est lancé, réponse lundi si le calcul se termine.

  4. #4
    Membre confirmé
    Inscrit en
    Juin 2005
    Messages
    275
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 275
    Par défaut
    Comme je le creignais, les données ne contiennent pas la solution.

    Sur plusieurs exécution successives, le plantage n'intervient pas toujours au même moment. De plus, il arrive qu'il se produise 2 fois lors d'une exécution, et qu'il se répette 3 fois dans une autre.

  5. #5
    Membre expérimenté Avatar de aperrin
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    221
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 221
    Par défaut
    N'est t-il pas possible que tu tente de commiter la même ligne (qui peut donc varier) dans plusieurs thread ?

  6. #6
    Membre confirmé
    Inscrit en
    Juin 2005
    Messages
    275
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 275
    Par défaut
    Effectivement, j'ai étudié cette piste mais même en ne laissant qu'un seul des 4 Threads, l'erreur continue à se produire.

    En fait sur les 4 Threads, les 2 premiers gèrent une partie des entrées tandis que les 2 suivants gèrent le reste. Mais j'ai l'impression qu'il y a des vérouillages permettant d'empêcher les conflits, car il arrive que les Thread "s'attendent".

    En effet, sur les 2 Thread qui traitent la même partie des entrées, celui qui démarre les accès en base en second ne dépasse jamais le premier dans l'aboutissement de son exécution. S'il se trouve au même niveau, il attend que les données soient libérées.

Discussions similaires

  1. [MySQL] Problème encodage ├® entre utf8 et source inconnue ( client )
    Par Ben_74 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 18/02/2015, 19h53
  2. Problème contrôle onglet : source
    Par valerie26 dans le forum Access
    Réponses: 2
    Dernier message: 31/08/2006, 12h55
  3. problème sur substring (fonction inconnue)
    Par nerick dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 13/12/2005, 15h46
  4. [Installation] Problème de commit
    Par pamic dans le forum CVS
    Réponses: 3
    Dernier message: 08/07/2005, 17h35
  5. [CVS] Problème de commit (Could not open lock file)
    Par 1tox dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 19/10/2004, 11h22

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