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 ?