I see nothing wrong with the way you handle session but i use an Assembler(J2EEpattern) to gather all calls(database/hibernate) into one Session.
A more common technique to do this is to begin the transation in a servlet filter and commit/rollback transaction and close session it at the end of the filter.
I dont think you should open/close commit/begin at every call, but maybe i misundestood your question.
see
http://www.hibernate.org/43.html
this explains a lot of what im trying to say.
My difference to this example is that i do a session.close() in a finally clause that this example does not (dont know why though).
/robert