Screencast – Hibernate e Concorrência Otimista na Web com VRaptor

Postado em 04. mar, 2008 por em Java

É com prazer, depois de tanto tempo, que anuncio o segundo screencast da Caelum.

O vídeo trata de um dos recursos pouco explorados no Hibernate: Controle de Concorrência Otimista, para lidar com problemas de edição simultânea (concorrência) nos registros. O fato curioso é que tenho observado em diversos projetos a preferência por Locks Pessimistas, que em grande parte dos casos não são a melhor escolha. Da própria documentação do Hibernate:

The only approach that is consistent with high concurrency and high scalability is optimistic concurrency control with versioning.

(…)

It is not intended that users spend much time worring about locking strategies. Its usually enough to specify an isolation level for the JDBC connections and then simply let the database do all the work.

Como podemos nos beneficiar do controle de concorrência otimista (também conhecido como lock otimista)? Para explorar o assunto, durante o screencast vamos enriquecendo uma aplicação Web existente, adicionando funcionalidades de edição simples de registros e resolvendo o problema de edição simultânea.

A aplicação Web utilizada usa e abusa do VRaptor como controlador MVC e várias dicas sobre o framework são abordadas durante o vídeo. Porém, a mensagem vale para qualquer aplicação Web. Mesmo as que não usam VRaptor.

Como sempre, o screencast mostra apenas uma das alternativas para solução do problema. Fica como lição de casa, testar outras possibildades:

1) Para não fazer o controle transacional dentro do Dao e forçar a checagem de versão (version check), no lugar do transaction.commit() poderia ter sido usado o session.lock(objeto, LockMode.READ). O método lock serve principalmente para a abordagem pessimista, porém LockMode.READ serve justamente para forçar a checagem de versão no caso otimista.

2) No lugar de tirar a entidade do cache de primeiro nível com session.evict(entidade) e consultá-la novamente para ter a versão mais nova do banco, bastaria usar o método session.refresh(entidade) que atualiza a instancia, passando direto pelos caches.


Acesse diretamente o screencast no Vimeo.


Não deixe de colocar o seu comentário com outras alternativas!

Fabio Kung

Tags: , , , ,

16 Respostas para “Screencast – Hibernate e Concorrência Otimista na Web com VRaptor”

  1. Cairo Noleto

    04. mar, 2008

    Olá, fui reproduzir o screecast aqui e não está saindo o video, só o som.

    Tem como disponibilizar o codec?

    Abraços

  2. Fabio Kung

    04. mar, 2008

    Você tentou a versão DivX ou Flash?
    Acredito que qualquer codec DivX sirva. A versão Flash funciona para você?

  3. Matheus

    05. mar, 2008

    Exelente tutorial mas tenho fiquei com uma dúvida um pouco fora do assunto principal, já foi discutido muito no GUJ a questão de usar lógica separada das propriedades como você fez. Você fez assim por não concordar ou foi só pra ilustrar?
    Até mais.

  4. Fabio Kung

    05. mar, 2008

    Olá Matheus,

    Não entendi a sua dúvida. Se estiver falando de separar lógica de negócios de dados, eu não faço isso.

    Neste screencast não teve nenhuma lógica de negócios, por isso a entidade ficou parecida com um DTO/modelo anêmico.

  5. Matheus

    05. mar, 2008

    Não quero fugir muito do tema mas minha dúvida era exatamente o modelo anêmico, nesse caso a classe CachorroLogic não ficaria junto com a classe Cachorro?
    Até mais.

  6. Fabio Kung

    05. mar, 2008

    Na verdade, a CachorroLogic fica mais como uma fachada para o seu domínio. Seria o que se chama de “Service Layer” no DDD.

    Se tivesse alguma lógica de negócios, ela estaria no domínio, não na CachorroLogic. Ela só serve para “disparar/estimular” o domínio.

  7. Paulo Silveira

    05. mar, 2008

    Matheus, mas nã há lógica de negócios, apenas de infraestrutura (no caso persistência). Se o cachorro tivesse de mostrar suas vacinas desde determinado ano, ai sim o cachorro teria um getVacinasDesde(int ano). Esse nome Logic da classe do VRaptor esta para um Service do DDD:

    “Service: When an operation does not conceptually belong to any object. Following the natural contours of the problem, you can implement these operations in services.”

    Gravar um Cachorro é um serviço. Não faz parte de um Cachorro saber se “cadastrar”. Faz parte de um cachorro saber responder a pergunta “ei, quais vacinas voce tomou desde 2005?”.

  8. Alberto Souza

    08. mar, 2008

    Usando o Active Record o cachorro não saberia se cadastrar? Acho legal essa possibilidade delegando para um Repositorio ou coisa parecida. Está errado o que pensei?

  9. Fabio Kung

    12. mar, 2008

    Sim Alberto. Se o próprio Cachorro soubesse se persistir ele seria um ActiveRecord.

  10. Fernando Boaglio

    13. mar, 2008

    Muito bom o screencast, mostrou de forma bem simples uma das maneiras de se evitar os famosos “lost updates” que existem até hoje por aí.

  11. Wagner

    27. mar, 2008

    Muito bom mesmo!!!!!

    Foi de grande valia pra mim,
    Com sugestão de outro screencast: spring

  12. Gabriel Ribeiro

    17. abr, 2008

    Parabéns pelo screencast. Excelente!! Assim como os cusros que fiz aí.

  13. David Buarque

    22. abr, 2008

    Legal, muito didático e passo a passo. parabéns!

  14. Felipe Zanardo Affonso

    25. jul, 2008

    Cara, muito bom esse screencast.
    Eu vi que na empresa que eu trabalho o pessoal criou esses atributos version nas classes, mas eu não entendia a “macumba” que ele fazia por dentro pra evitar a edição.
    Muito didático, parabéns.
    E com o perdão do trocadilho, sua IDE é muito inteliJente!

  15. Wolmir

    01. mar, 2010

    Opa!
    Tudo bele!
    Cara eu to trabalhando em um projeto demo em vraptor para estudo.
    Atualmente uso jsf mas estou muito interessado em vRaptor pela simplicidade e eficiencia do mesmo, usando juntamente com jquery pode ser feito maravilhas de aplicações que conquistão em usabilidade, eficiencia, beleza e segurança.
    Em breve postarei no meu blog um tutorial passo a passo sobre o vraptor 3 o endereço é:
    http://wolmirgarbin.wordpress.com/
    Espero que gostem.
    A medida que eu for desenvolvendo irei postando será um sisteminha bem simples e bem explicativo.
    Abraços!

Trackbacks/Pingbacks

  1. Rafael Carneiro » Blog Archive » Recomendação de leitura - março 9, 2008

    [...] a leitura do último post, que na verdade é um screencast sobre Hibernate e Concorrência Otimista na Web com [...]

Deixar uma Resposta