Código fuente de la capa de servicio
Interfaz pública ITransactionManager {
/**
*Este método requiere control de transacciones.
* @return
* @throw excepción
*/
El objeto doInTransaction() lanza una excepción;
}
Clase pública DataSourceTransactionUtil {
Ejecución de objeto público (administrador de transacciones ITransactionManager final){
DataSourceTransactionManager DataSourceTransactionManager = getDataSourceTransactionManager();
plantilla de transacción plantilla de transacción = nueva plantilla de transacción (fuente de datostransactionmanager);
devolver plantilla de transacción ejecutar(nueva devolución de llamada de transacción(){
Objeto público doInTransaction(estado de transacción estado de transacción) {
Punto de guardado del objeto = estado de la transacción. Createsavepoint();
Resultado del objeto = nulo
Pruebe {
resultado = administrador de transacciones. . dointransaction();
} catch(excepción e){
estado de transacción . rollbacktosavepoint(savepoint);
e . >
p>
}Finalmente {
estado de la transacción. Liberar punto de guardado (punto de guardado)
}
Devolver resultado; p>
}
});
}
Fuente de datos privadostransactionmanager getDataSourceTransactionManager(){
return(DataSourceTransactionManager)get bean(" administrador de transacciones ");
}
}
Explicación:
Recuerdo haber escrito este párrafo después de leer la fuente de primavera. código.
1. get bean ("administrador de transacciones"); es decir, obtenga el bean del administrador de transacciones de Spring y cambie el nombre usted mismo.
2. Coloque este código en su BaseAction:
Objeto protegido comenzar transacción(ITransactionManager transactionManagerImpl){
fuente de datostransactionutil dt = nueva fuente de datostransactionutil( );
Return dt.execut(transactionManagerImpl);
}
3. En la operación que necesita abrir una transacción, llame al método beginTransaction transactionManagerImpl. Escribe una clase interna anónima y luego implementa el método doInTransaction(). En doInTransaction(), escriba su código para llamar a múltiples servicios.