These are some of the patterns noticed in old codebase, which can be candidates for refactoring.
- Usage of StaticHibernateUtil.
Throughout the codebase, there are calls to this static class for starting and committing transaction. All this class does is to provide static accessors for starting/committing transaction, getting a session associated with current thread local etc. Suggestion: get rid of StaticHibernateUtil] class altogether. And replace with HibernateUtil.getInstance(..) HibernateUtil should adopt a singleton pattern. :
public static HibernateUtil.getInstance(boolean fromContext) { if (fromContext) lookup sessionFactory from springContext. create a proxy for the session object, so that now all callees now participate in same transaction else the usual legacy code }
Benefits: once we start using HibernateUtil.getInstance(boolean fromContext), we can now take informed decision to move over code to participate in spring managed transaction. Cost: why were those start/commit transactions were in code in the first place? would removing them cause any inconsistency?