Controle de Transação no VRaptor

6 respostas
Fabio_Kym_Nascimento

Bom dia senhores, estou fazendo um projeto com o VRaptor aqui e atualmente tenho feito o controle de transações no Dao, por exemplo:

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

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!

6 Respostas

Fabio_Kym_Nascimento

Ah, to usando Hibernate pra persistir os dados.

G

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

Fabio_Kym_Nascimento

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

O que voce pra controlar as transações?

É meu primeiro projeto web com Java, então fiquei meio perdido com sua dica :confused:

G

Fabio “Kym” Nascimento:
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ê.

O que voce pra controlar as transações?

É meu primeiro projeto web com Java, então fiquei meio perdido com sua dica :/

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

Fabio_Kym_Nascimento

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/

Opa, vou dar uma olhada, vlw mano!

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/

Criado 3 de fevereiro de 2010
Ultima resposta 3 de fev. de 2010
Respostas 6
Participantes 3