Metodo assincrono no spring

Caros,

tenho um método java que roda de forma assincrona pelo spring (anotação Async). Este método está no contexto de uma transação e eu preciso que os dados salvos sejam visualizados por outras transações de banco de dados do sistema. Como posso executar um commit e manter a transação ainda ativa?

@Transactional
public void processar(Venda venda) {
    // Faz um bocado de coisa
    this.salvarCliente(venda.getCliente());
    // Faz mais um bocado de coisa
}

@Async
@Transactional
public void salvarCliente(Cliente cliente) {
    entityManager.persist(cliente);
    // Quero comitar os dados do objeto acima e manter a transação ainda ativa
    ....

Serve ?
entityManager.getTransaction().commit();

Infelizmente não. Eu não faço o controle manual da transação, deixo isso pro Spring. O que eu preciso é algo semelhante a savepoints. Ou seja, salvar os dados no banco para que outras transações vejam os dados mas também ter condições de executar um rollback.

Faz assim então
entityManager.flush();
o flush roda a sql no banco e o rolback pode ocorrer normalmente ainda.

entityManager.persist(cliente);
entityManager.flush();

Já fiz isso mas não funcionou. :frowning:

Bem da uma olhada

http://docs.spring.io/spring/docs/current/spring-framework-reference/html/scheduling.html