Optmistic Lock: Hibernate e Spring  XML
Índice dos Fóruns » Desenvolvimento Web
Autor Mensagem
l1nk
Entusiasta Java

Membro desde: 15/06/2007 15:15:56
Mensagens: 16
Offline

Pessoal,

estou a desenvolver uma aplicação web com 3 camadas onde existe concorrência de acesso aos dados.

O que quero é aplicar a estratégia Optimistic lock fornecida pelo Hibernate para conservar a coorencia da base de dados. Como tb uso o Spring estou um pouco confuso como devo implementar a solução porque todos os exemplos que vi ate agora partem do principio que so existe o Hibernate...

A minha classe DAO extende a classe HibernateDAOSupport, o SessionFactory está configurado no aplicationContext.xml do Spring como bean.

Quando quero, por exemplo guardar um registo faço apenas this.getHibernateTemplate.save(Obejcto obj). Nos exemplos que vi abrem uma session e transaction.... Como faço neste caso?

Obrigado pela ajuda.
Se conhecerem um bom exemplo que possa consultar agradecia.

Abraço
l1nk
Entusiasta Java

Membro desde: 15/06/2007 15:15:56
Mensagens: 16
Offline

Vá lá pessoal.
Tenho a certeza que me podem dar umas dicas....
cecaldas
Java Ninja

Membro desde: 01/03/2004 13:17:19
Mensagens: 264
Offline

O lock otimista é feito usando a anotação version do hibernate, fica transparente para ti. Basta declarar um atributo int com a anotação @version e o resto fica por conta do hibernate.
l1nk
Entusiasta Java

Membro desde: 15/06/2007 15:15:56
Mensagens: 16
Offline

cecaldas obrigado pela atenção.
Eu nao estou a usar o annotations mas sim ficheiros de mapeamento XXX.hbm.xml.

Vai dar ao mesmo. Eu mapeei a propriedade version nesse ficheiro.

O esquisito é que inicialmente o version toma o valor 0 e quando eu faço o primeiro update passa a ser igual a 1. Até aqui tudo bem.

Mas se eu fizer mais um update nesse registo (2 updates no mesmo registo) o programa falha.... o version deveria tomar o valor 2 mas isso não acontece.

Não consigo perceber porque acontece isto.
O erro é este



cecaldas
Java Ninja

Membro desde: 01/03/2004 13:17:19
Mensagens: 264
Offline

Como tu recuperas esse objeto? Quando tu recuperas esse objeto o versão vem setado? A idéia é recuperar o objeto com o versão, quando devolveres para o banco o hibernate checa o valor do versão, isso fica transparente.
romulodsp
What is classpath?

Membro desde: 08/05/2007 18:27:50
Mensagens: 5
Offline


Talvez tenha que configurar o transaction manager desta maneira

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager" abstract="false" singleton="true" lazy-init="default" autowire="default" dependency-check="default">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>

<bean class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor" abstract="false" singleton="true" lazy-init="default" autowire="default" dependency-check="default">
<property name="transactionInterceptor">
<ref local="txInterceptor" />
</property>
</bean>

<bean id="txInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor" abstract="false" singleton="true" lazy-init="default" autowire="default" dependency-check="default">
<property name="transactionManager">
<ref local="transactionManager" />
</property>

<property name="transactionAttributeSource">
<bean class="org.springframework.transaction.annotation.AnnotationTransactionAttributeSource" abstract="false" singleton="true" lazy-init="default" autowire="default" dependency-check="default" />
</property>
</bean>
 
Índice dos Fóruns » Desenvolvimento Web
Ir para:   
Powered by JForum 2.1.8 © JForum Team