Spring, Hibernate, Data Modeling, REST and TDD:Agile Java Design and Development