Forum Programmation.java Modifier un advice dans spring

Posté par .
Tags : aucun
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 à ceux qui les ont postés. Nous n'en sommes pas responsables.