iBatis e Struts

5 respostas
volnei

Alguem já usou, usa, recomenda?

Estou começando um projeto e pretendo usar o iBatis pra acelerar o desenvolvimento, vejo todo mundo falando que o iBatis e Spring juntos funcionam muito bem, mas ainda não consigo entender como são tratadas as transações do tipo: um request possui uma transação para quantos DAOs ele for usar. Será que alguem me dá uma luz???

Grato.

5 Respostas

jgbt

volnei:
Alguem já usou, usa, recomenda?

Estou começando um projeto e pretendo usar o iBatis pra acelerar o desenvolvimento, vejo todo mundo falando que o iBatis e Spring juntos funcionam muito bem, mas ainda não consigo entender como são tratadas as transações do tipo: um request possui uma transação para quantos DAOs ele for usar. Será que alguem me dá uma luz???
Grato.

cara,
isso é configuravel no Spring. por exemplo, eu posso marcar um metodo, digamos um metodo save de um DAO, como transacional e o Spring vai abrir uma transação na invocação desse metodo e qualquer outro metodo chamado nessa pilha vai estar na mesma transação, tudo controlado por ele e transparente ao desenvolvedor. tambem posso configura um metodo com transactio_new e SEMPRE o Spring vai abrir uma transação para ele.
mais ou menos assim:

<bean id="userDAO"
      class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
		<property name="transactionManager"><ref local="transactionManager"/></property>
		<property name="target"><ref local="userDAOTarget"/></property>
		<property name="transactionAttributes">
			<props>
				<prop key="save*">PROPAGATION_REQUIRED</prop>
			</props>
		</property>
	</bean>

nesse exemplo qualquer metodo que inicie com o prefixo save chamado por esse DAO vai estar na mesma transação.
da uma olhada nas docs do Spring, vc vai achar bastante exemplos.
qq coisa manda ae.

[]'s

volnei

Eu li na documentação do spring… mas é muito obscuro.

Eu não entendo por um exemplo como ele vai comitar minha transação quando meu request terminar de processar. E se dois usuários entrarem ao mesmo tempo, são transações diferentes?

É que quero algo assim.

Usuário fez request: Inicia uma transação que é usada durante toda vida do request

Fim do request: Commit ou Rollback em caso de erro.

Fui claro?? To errado??

jgbt

blz, vamo por partes como diria Jack.

  • a transação não se baseia no request, e sim na chamada do metodo marcado como transacional. Ok, vai acabar sendo a mesma coisa em uma app web, sua pilha de chamada vai durar pelo ttempo do request… :slight_smile:

  • depende, vc vai definir no Spring que tipo de objeto vc vai querer. os beans declarados podem ser singleton ou não. se forem singleton, cuidado com a concorrencia, se não forem, sim, vai ser aberta quantas transações forem necessarias. seria tipo vc fazer na mão beginTransaction no seu DAO. cada chamada vai iniciar uma nova.

  • se não houver erro na pilha de chamado do metodo transacional, commit. senão, depende da configuração da transação p/ saber a partir de que ponto o rollback vai ser executado.

blz?
qq coisa manda ae.

[]'s

volnei

Ok, como defino que um método vai ser transacional?

Qual seria uma configuração convencional para uma aplicação web padrão por exemplo um fórum?

jgbt

volnei:
Ok, como defino que um método vai ser transacional?

Qual seria uma configuração convencional para uma aplicação web padrão por exemplo um fórum?


vc define como no exemplo que eu postei antes.
cara, eu normalmente coloco TRANSACTION_REQUIRED p/ metodo em questão, sendo assim qq outro metodo chmando na pilha vai estar na mesma transação e so vai ser dado commit se tudo acabar OK. ainda não precisei de nada diferente.

[]'s

Criado 24 de abril de 2007
Ultima resposta 24 de abr. de 2007
Respostas 5
Participantes 2