Várias melhorias nessa versão, das quais podemos destacar a validacão e autorização dinâmicas, suporte a String ids para as listas (antes só podia inteiro), migração do código do framework para Java 5 com refactoring para incluir generics e o HibernateFilter em modo transacional. Obrigado a todos que colaboraram com feedback e sugestões!
Você não precisa abrir uma transação com o Hibernate a cada sessão utilizada. Embora o exemplo dado pelo C. Bauer mostre uma transação sendo aberta para uma operação read-only, aquele exemplo apenas ilustra o potencial da ferramenta em si (algo como "hey! se você quiser abrir uma transação para uma operação read-only, está tudo bem! O hibernate permite! ") e não é uma recomendação ou boa prática. Acho que seria interessante vocês revisarem este HibernateFilter ou, pelo menos, permitir que o usuário escolha a maneira de lidar com transações (mesmo porque, se eu quiser usar Container Managed Transaction Demarcation, teria que deixar que o meu contexto transacional (JTA) cuidasse do fluxo da minha transação, certo?).
O modo transacional é totalmente opcional, ou seja, vc escolhe se quer usar ele ou não passando uma boolean para o construtor do HibernateFilter. O default é para não usar, ou seja, vc mesmo controla como quer fazer as transações. Nada te impede também de usar o TransactionFilter (com ou sem o modo transacional do HibernateFilter) para deixar a sua action atomica e melhor controlar em que situações um rollback ou commit irão acontecer.
Se não é uma recomendação ou boa prática, então eles não deveriam ter dado isso como exemplo, ainda mais no HelloWorld. Já vi em diversos outros lugares exemplos onde é recomendado transação para tudo no hibernate, até para select, como foi o caso do exemplo em questão. Parece que eles realmente recomendam transaçao para tudo, até para SELECT, quando na teoria uma transação deveria ser exceção e não regra. Mais sobre isso aqui: http://www.guj.com.br/posts/list/50471.java
O ideal é usar o HibernateFilter sem modo transacional, o que é o default de qualquer maneira. Mas se por algum motivo vc quiser ou tiver que fazer uma transaçao para TUDO, o modo transacional vai facililtar isso…
[quote=saoj]Na minha opinião fazer uma coisa desnecessária e meio sem sentido não é demonstração de poder…
Ninguem questiona o poder do Hibernate. A questão é que para coisas simples ele acaba sendo complexo…[/quote]