Oliver Gierke is engineer at SpringSource, a division of VMware, project lead of the Spring Data JPA, MongoDB and core module and member of the JPA 2.1 expert group. He has been into developing enterprise applications and open source projects for over 6 years now. His working focus is centered around software architecture, Spring and persistence technologies. He is regularly speaking at German and international conferences as well as author of technology articles and the first book on Spring Data.
Spring MVC forms a solid foundation to implement REST based web-services in Java. However, in real-world projects developers still face challenges when it comes to advanced questions of REST. How to really leverage hypermedia? How to model more complex business functionality with REST. The talk introduces the Spring RESTBucks sample project to implement a business process in a hypermedia-driven way and discusses approaches to challenges in implementation and how the Spring HATEOAS library helps overcoming them.
Spring always provided sophisticated support for various Java data access technologies. The lately coined Spring Data project now takes the next step and introduces a consistent programming model for non-relational data stores and helps implementing data access layers in a consistent and easy-to grasp fashion - for both the NoSQL stores as well as more traditional APIs like JPA. The talk introduces the umbrella project, foundational concepts and abstractions and dives down into specialties of particular modules using MongoDB and Neo4j as examples.
If applications grow bigger, modularity becomes a key aspect regarding maintainability. Design decisions made in the early days are hardly discoverable in the codebase, inter-module dependencies grow a lot. The talk introduces means and approaches to connect logical architecture to the codebase. Beyond that we discuss patterns and best practices around general code organization, package structures to build a solid foundation for Java applications and in how far Spring can help creating loosely coupled components and dedicated points to extend applications.