Come già implementato con successo spring transaction
,
In Spring
possiamo realizzare transazioni in tre modi:
- Platform Transaction Management.
- Declarative Gestione transazioni.
- Programmatic Gestione transazioni.
Quello che si chiama implementato Declarative Transaction Management tramite XML.
In breve, l'implementazione di transaction
è stata eseguita dalla funzione Spring AOP.
L'accoppiamento della configurazione tx:advice XML
con una configurazione AOP basata su XML rende la combinazione sinergica. Ad esempio, possiamo usare i nomi dei metodi per capire automaticamente quale tipo di transazione vogliamo applicare su quel metodo.
Dire vogliamo applicare la transazione su tutto ciò che i metodi che iniziano con save
e modify
quali savePizza()
, saveColdDrink()
, modifyOrder()
, modifyBill()
. Per questi dobbiamo definire il advice
nel nostro file xml:
<tx:advice id="txAdvice" >
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED"/>
<tx:method name="modify*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
Il nostro consiglio è pronto, come abbiamo detto sopra, utilizzando la linea che vogliamo transazioni solo sui metodi che iniziano con save
o modify
. Ora stiamo per dire quali bean richiedono il consiglio sopra usando l'elemento pointcut
di aop-config
.Ad esempio, diciamo che vogliamo applicare il consiglio di transazione a tutte le classi disponibili nel pacchetto com.mytransaction.service
.
Per questo, dobbiamo aggiungere la seguente riga all'interno del nostro file xml:
<aop:config>
<aop:pointcut id="allServices"
expression="execution(*com.mytransaction.service.*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="allServices"/>
</aop:config>
In breve, <tx:advice>
dire cosa fare o che il comportamento delle transazioni vogliamo applicare. pointcut
elemento all'interno <aop-config>
dice dove vogliamo applicare la transazione, dicono <aop:advisor advice-ref="txAdvice" pointcut-ref="allServices"/>
Cosa significa il pointcut-ref significa? – luksmir
Come forzare la chiusura della transazione –
@Betlista - Qual è la necessità di "tx: method". Perché non può essere raggiunto tramite pointpr expr? Diciamo che in questo esempio posso definire pointcut per abbinare tutti i metodi che iniziano con "salva" e "modifica". Non è sufficiente? – user001