* use hibernate for ORM (instead of the whole EJB stuff)
You could also consider JPA over Hibernate, they add another abstraction layer to the persistence. Of course, if you don't need it theres no point in adding it
What are other common/recommend practice?
* Do I need Spring?
* Do I need Shale?
* Do I need Seam?
You don't "need" any of them but I have noticed that Spring does a nice job in handling "plumbing code" and simplifes changes that you might want to add later that influences the whole application.
You might want to take a look at
for hints on application architechture, package structures etc.

