Forum Programmation.java Modifier un advice dans spring

Posté par .
Étiquettes : aucune
1
12
juil.
2011

Bonjour,
j'ai un advice dans spring déclarer comme ceci :

<tx:advice id="defaultTxAdvice" transaction-manager="transactionManager">
		<tx:attributes>
			<tx:method name="find*" isolation="READ_COMMITTED" propagation="REQUIRED" read-only="true" timeout="120" rollback-for="Exception" no-rollback-for="UnexpectedRollbackException"/>
			<tx:method name="get*" isolation="READ_COMMITTED" propagation="REQUIRED" read-only="true" timeout="120" rollback-for="Exception" no-rollback-for="UnexpectedRollbackException"/>
			<tx:method name="*" isolation="READ_COMMITTED" propagation="REQUIRED" timeout="120" rollback-for="Exception" no-rollback-for="UnexpectedRollbackException"/> 
		</tx:attributes>
	</tx:advice>

Je voulais pouvoir modifier la valeur du timeout avec quelque chose du style timeout="${uneVar} mais j'ai trouvé dans les bugs de spring que ce n'était pas possible (voir https://jira.springsource.org/browse/SPR-3180 )
J'aimerais savoir s'il est possible d’accéder a un advice par programmation pour pouvoir changer ces attributs.
Merci pour tout pointeurs et réponses (même un "non c'est pas possible parce que ...")
  • # Comme ça

    Posté par . Évalué à 3.

    for(Advisor advisor : ((Advised) bean).getAdvisors()) {
     if(advisor.getAdvice() instanceof TransactionInterceptor && advisor instanceof AbstractBeanFactoryPointcutAdvisor) {
     TransactionInterceptor advice = (TransactionInterceptor)advisor.getAdvice();
     TransactionAttributeSource transactionAttrSrc = advice.getTransactionAttributeSource();
     if(transactionAttrSrc instanceof NameMatchTransactionAttributeSource){
     NameMatchTransactionAttributeSource nameTransAttrSrc = (NameMatchTransactionAttributeSource)transactionAttrSrc;
     
     TransactionAttribute transAttr = nameTransAttrSrc.getTransactionAttribute(method, com.genesyslab.cv.data.service.impl.ArchiveServiceImpl.class);
     if (transAttr instanceof DefaultTransactionDefinition) {
     DefaultTransactionDefinition defaultTransAttr = (DefaultTransactionDefinition) transAttr;
     defaultTransAttr.setTimeout(queryTimeout);
     break;
     }
     }
     }
     }
    

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.