Transaction com mais de uma servlet

3 respostas
dugbuddy

Olá,

Eu consegui exemplos somente para uma servlet.
Mas eu tenho o seguinte cenário:
cadastro de empresa.

JSP --> Servlet1 --> JSP --> Servlet2 --> JSP --> Servlet3

Essas 3 servlets são 3 etapas para conclusao do cadastro.

Como eu faço para criar uma Session --> Transaction sendo que deve ser comitado somente da ultima servlet?

Muito Obrigado desde já

abaixo o que eu achei para um servlet só.
Session session = null;
		Transaction tx = null;

		try {
			session = factory.openSession();
			tx = session.beginTransaction();
			session.persist(empresa);
			tx.commit();

		} catch (Exception e) {
			if (tx != null)
				tx.rollback();
			System.out.println("Transação falhou : ");
			e.printStackTrace();

		} finally {

			session.close();

		}

3 Respostas

P

Buddy,

Olha só, eu nunca fiz isso com um servlet, mas se voce vai mostrar 3 jsp’s controlados por 3 servlets para completar uma operação de cadastro (eu adoro JSF, ele já tem componente pronto para isto), acho que o mais correto é você enviar os dados colhidos nas etapas anteriores através dos requests ou, se você preferir através do objeto session, e abrir uma transação e persistir somente na última etapa. Porque não tem sentido voce persistir parte de um cadastro por partes, acho que você deveria tratar isso pela interface gráfica até que os dados estejam completos.

Se não houver alternativa e você tiver mesmo que fazer isto, acho que a única alternativa possível é voce obter o contexto de transação no primeiro servlet, passar ele por parâmetro no objeto session na 2ª e 3ª etapas para comitar na terceira etapa. Acho isso uma temeridade, obter um contexto de transação e ter que esperar que o usuário complete mais duas etapas para comitá-lo.

Existem outras alternativas talvez usando AJAX puro.

Abraço

Pedrosa

Use Spring e seja feliz.

http://static.springsource.org/spring/docs/2.5.x/reference/transaction.html

dugbuddy

Paulo e Pedrosa.

Muito obrigado pela ajuda.

valew

Criado 16 de novembro de 2009
Ultima resposta 17 de nov. de 2009
Respostas 3
Participantes 3