@Override public RET call() throws Exception { threadInitializer.initThread(); try { LifeCycleManager.beforeRequest(request); try { Factory.setSessionFactory(sessionFactory, SessionType.CURRENT); return inner.call(); } catch (Exception e) { System.err.println("Error while executing " + inner.getClass().getName()); e.printStackTrace(); throw e; } finally { LifeCycleManager.afterRequest(); } } finally { threadInitializer.termThread(); } }