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

Por Fabio Kung em 04/03/08

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

Assim como o screencast anterior (Primeiros Passos para a JPA), o segundo screencast da Caelum vem em dois sabores. Flash vídeo (.flv), que é a mesma tecnologia usada pelo YouTube e pelo Google Video e pode ser assistido pelo navegador. O outro formato disponível é o famoso AVI (DivX), suportado pela grande maioria dos players.

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.

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

Hibernate e Concorrência Otimista na Web com VRaptor - duração: 48 min

Assista pelo Navegador: Flash Video (.flv): 52 MB, 800×600
Faça o download: AVI, codificação DivX (.avi): 70,1 MB, 800×600
Código Fonte: Código Fonte produzido durante o Screencast. Você vai precisar baixar as dependências (jars) do projeto separadamente. Por favor, leia o arquivo README.txt.

Screencast - Primeiros Passos para a JPA

Por Fabio Kung em 15/05/07

Já tem um bom tempo que lançar uma série de screencasts é um assunto recorrente dentro da Caelum. Já houve algumas pequenas tentativas, mas ao contrário do que parece, não é uma tarefa nada fácil.

O primeiro screencast da Caelum vem em dois sabores. Flash vídeo (.flv) é a mesma tecnologia usada pelo YouTube e pelo Google Video e pode ser assistido pelo navegador, porém a qualidade é reduzida.

Também está disponível o original, no formato Quicktime Movie (.mov) de alta qualidade e consequentemente com quase o dobro do tamanho. Para reproduzi-lo pode ser usado o Quicktime Player da Apple ou os livres VideoLAN (VLC) e MPlayer.

O vídeo é introdutório, sobre a Java Persistence API (JPA), para quem ainda não teve a oportunidade de testar a tecnologia. É um passo a passo que vai desde o início, mostrando como fazer o download das bibliotecas necessárias, montar um projeto no eclipse, preparar o banco de dados (MySQL), mapear uma classe em tabela, salvar entidades, carregar entidades e customizar os padrões adotados pela tecnologia (nomes e tamanho de colunas, por exemplo).

Como implementações da JPA entram em cena tanto o Hibernate quanto o Oracle Toplink.

Para esse primeiro screencast, o feedback fica por sua conta! Só é possível haver a continuidade com outros vídeos mais avançados, mais simples, com diferentes abordagens, ou abordando outros tópicos, se isto for realmente agregar algo à comunidade. Esse é o primeiro vídeo produzido e com certeza ainda há muito o que melhorar.

Precisamos do seu conselho! Que tal: “as fontes estão pequenas”, “seria melhor se tivesse voz” ou “está muito longo”?

Em tempo: já temos ciência destes problemas, mas como já citado, fazer um screencast não é nada fácil. Para o próximo estaremos com tudo isso (mais o que for sugerido) melhorado!

Primeiros passos para a Java Persistence API - duração: 36 min

Flash Video (.flv): 52 MB, 960×600
Original, Quicktime Movie (.mov): 96 MB, 960×600