Metodo assincrono no spring

5 respostas
M

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
    ....

5 Respostas

A

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

M

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.

A

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();

M

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

A

Bem da uma olhada

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

Criado 30 de julho de 2015
Ultima resposta 31 de jul. de 2015
Respostas 5
Participantes 2