Bom dia senhores, estou fazendo um projeto com o VRaptor aqui e atualmente tenho feito o controle de transações no Dao, por exemplo:
[code] public void save(T t) {
Transaction tx = this.session.beginTransaction();
this.session.save(t);
tx.commit();
}
public void update(T t) {
Transaction tx = this.session.beginTransaction();
this.session.update(t);
tx.commit();
}
public void delete(T t) {
Transaction tx = this.session.beginTransaction();
this.session.delete(t);
tx.commit();
}[/code]
Até o momento tem funcionado tudo muito bem, mas agora que estou precisando salvar um relacionamento 1-N (1 pedido tem muitos items), acho que essa abordagem não vai mais servir.
Preciso que a criação do pedido e a adição dos items para este pedido sejam feitas na mesma transação, algo que tenha esse efeito:
@Override
public void save(Order order) {
Transaction tx = this.getSession().beginTransaction();
this.getSession().save(order);
this.refresh(order);
for (ItemOrder cartItem : cart.getCartItems()) {
cartItem.setOrder(order);
this.itemOrderDao.getSession().save(cartItem);
}
tx.commit();
this.cart.clearCart();
}
Porém não me parece ser uma boa abordagem pra resolver o problema, então fica minha pergunta pros mais experientes, como seria uma implementação bem feita para o controle de transações usando o VRaptor? Alguem tem alguma sugestão? Parece que da pra usar o controle do Spring, mas no projeto mydvds do vraptor parece que não estão usando.
Grato!
Ah, to usando Hibernate pra persistir os dados.
Eu não sou muito fã de bean transaction. Se você está em um ambiente JTA porque não usar transação pelo container? Mesmo fora de um contexto JTA o vraptor pode cuidar disso para você.
Não lembro direito como é, pois uso o vraptor apenas como controller, mas você configura isso no web.xml dizendo para usar a session-factory do vraptor e ele cuida disso tudo para você.
[quote=garcia-jj]Eu não sou muito fã de bean transaction. Se você está em um ambiente JTA porque não usar transação pelo container? Mesmo fora de um contexto JTA o vraptor pode cuidar disso para você.
Não lembro direito como é, pois uso o vraptor apenas como controller, mas você configura isso no web.xml dizendo para usar a session-factory do vraptor e ele cuida disso tudo para você.[/quote]
O que voce pra controlar as transações?
É meu primeiro projeto web com Java, então fiquei meio perdido com sua dica 
[quote=Fabio “Kym” Nascimento][quote=garcia-jj]Eu não sou muito fã de bean transaction. Se você está em um ambiente JTA porque não usar transação pelo container? Mesmo fora de um contexto JTA o vraptor pode cuidar disso para você.
Não lembro direito como é, pois uso o vraptor apenas como controller, mas você configura isso no web.xml dizendo para usar a session-factory do vraptor e ele cuida disso tudo para você.[/quote]
O que voce pra controlar as transações?
É meu primeiro projeto web com Java, então fiquei meio perdido com sua dica :/[/quote]
Fábio, o post do seufagner já explicou sobre isso. Em ambientes com transação pelo container sempre haverá um commit se não houver uma exceção do tipo runtime. O que o vraptor faz é simular o mesmo comportamento. Na verdade quem faz isso é o spring, no caso o vraptor apenas mascara isso para você.
Abraços
[quote=seufagner]O VRaptor 3.1 já vme com um utilitário que faz isso por você.
http://vraptor.caelum.com.br/documentacao/componentes-utilitarios-opcionais/[/quote]
Opa, vou dar uma olhada, vlw mano!