Transacciones distribuidas con Spring y Atomikos

Una transacción distribuida es una transacción que se ejecuta a través de varios recursos transaccionales (que podrán ser base de datos, colas JMS,…) asegurando que se realicen todos los pasos dentro de la transacción de forma correcta o no se realice ninguno.

El soporte de Spring para la Transaccionalidad (anotación @Transactional) permite abstraernos de que estemos trabajando en una transacción simple o distribuida con sólo configurar nuestro TransactionManager:

Lo normal y recomendado es usar el soporte JTA de nuestro Servidor de Aplicaciones para configurar la transaccionalidad distribuida de nuestros DataSources (por ejemplo con MySQL usaremos com.mysql.jdbc.jdbc2.optional.MysqlXADataSource), pero en algunos casos no es posible disponer de esa infraestructura.

En esos casos usaremos un Gestor Transaccionalidad embebido que permite usar JTA fuera de un AppServer (como en Tomcat o Jetty). Existen varios Transaction Managers tanto comerciales como open source, en el mundo opensource tenemos:

· Java Open Transaction Manager (JOTM)

· JBoss TS

· Bitronix Transaction Manager (BTM)

· Atomikos (ahora llamado Atomikos TransactionsEssentials)

A continuación vamos a ver la configuración necesaria para trabajar con Atomikos sobre Spring, veréis que apenas hay diferencias:

1. Declaro el primer DataSource en Spring:

En este caso como BD uso MySQL (debo usar MysqlXADataSource) y como implementación del DataSource AtomikosDataSourceBean

2. Declaro el segundo DataSource:

En este caso sobre un Postgresql

3. Declaro el TransactionManager y el UserTransaction:

4. Al JtaTransactionManager de Spring le paso el TransactionManager y el UserTransaction:

5. Habilito la gestión de transacciones con anotaciones en Spring:

Y voilá! Ya está todo hecho, para el resto de nuestra aplicación Spring es transparente.

Podéis leer más sobre cómo configurar Atomikos con Spring Transaction.

Norton Top Search

Norton ha creado Norton Top Search, un Servicio Web gratuito que nos permite controlar el primer resultado de una búsqueda en Google cuando se busque nuestro nombre.

Para hacerlo utiliza AdWords y pone un anuncio a la URL que queramos con el nombre y la descripción que queramos.

Esto permite controlar nuestra reputación en la web.

Como restricción está que sólo podremos controlar la búsqueda que coincida con nuestro nombre de Facebook (es necesario tener cuenta en Facebook para poder utilizarla, aunque la URL que introduzcamos puede ser cualquiera).

Ah! Y tarda un par de días en completar el proceso! 🙂