Cómo configurar varios administradores de transacciones con Spring + DBUnit + JUnit

En una palabra

La aplicación Java de mi línea de comandos copia los datos de una fuente de datos a otra sin utilizar XA. He configurado dos fuentes de datos separadas y me gustaría una prueba de JUnit que pueda revertir los datos en ambas fuentes de datos. Utilizo DBUnit para cargar datos en la base de datos "fuente", pero no puedo hacer esto para revertir. Puedo obtener el origen de datos "objetivo" para revertir.

Mi código

Dada esta configuración ...

<tx:annotation-driven />

<!-- note the default transactionManager name on this one -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource"     ref="dataSourceA" />
</bean>

<bean id="transactionManagerTarget" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource"     ref="dataSourceB" />
</bean>

y este código ...

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:resources/spring-context.xml",
                                "classpath:resources/spring-db.xml"})  
@Transactional
@TransactionConfiguration(transactionManager = "transactionManagerTarget", defaultRollback = true) 
public class MyIntegrationTest {

    @Autowired
    private MyService service;

    @Autowired
    @Qualifier("dataSourceA")
    private DataSource dataSourceA;

    private IDataSet loadedDataSet;

    /**
     * Required by DbUnit
     */
    @Before
    public void setUp() throws Exception {
        SybaseInsertIdentityOperation.TRUNCATE_TABLE.execute(getConnection(), getDataSet());
        SybaseInsertIdentityOperation.INSERT.execute(getConnection(), getDataSet());
    }

    /**
     * Required by DbUnit
     */
    protected IDataSet getDataSet() throws Exception {
        loadedDataSet = DbUnitHelper.getDataSetFromFile(getConnection(), "TestData.xml");
        return loadedDataSet;
    }

    /**
     * Required by DbUnit
     */
    protected IDatabaseConnection getConnection() throws Exception{
        return new DatabaseConnection(dataSourceA.getConnection());
    }   

    @Test
    public void testSomething() {

        // service.doCopyStuff();

    }

}

El problema tal como lo veo, es que@TransactionConfiguration solo indica el origen de datos de destino para habilitar una reversión. DBUnit se está pasandodataSourceA explícitamente y está recogiendo el administrador de transacciones predeterminado llamadotransactionManager (No estoy seguro de cómo) que no se ha dicho a la reversión.

Pregunta

¿Cómo puedo decirle a ambos administradores de transacciones que realicen una reversión?

¿Puedo usar un solo administrador de transacciones cuando mis fuentes de datos no admiten transacciones XA?

Nota: La aplicación no requiere un administrador de transacciones en dataSourceA cuando se ejecuta en producción, ya que solo será de solo lectura. Este problema es solo para mis clases de exámenes.

Respuestas a la pregunta(3)

Su respuesta a la pregunta