today's spring framework
TRANSCRIPT
Today’s Spring frameworkBackbase Inspiration Lab
21 Nov 2013 Zoltan Altfatter
Agenda
Overview of Spring IO platform
Spring Boot
Spring Data
Hypermedia with Spring HATEOAS
CloudFoundry
Demo Application
Q&A
Pivotal Initiative
Spring (including Grails, RabbitMQ, Tomcat, Redis, GemFire)
Cloudfoundry (the open PaaS (Platform as a Service))
Greenplum (analytic data warehouse using Hadoop)
The Spring IO platform
Spring Bootinspired by Dropwizard
takes an opinionated view
convention-over-configuration
make you focus on the application
spring command line tool - run Groovy scripts
Embed Tomcat or Jetty directly
unlike Spring Roo, no code generation
no requirement for XML configuration
Spring Boot Grooy Demo
Spring DataUmbrella project for data access
subprojects: JPA, MongoDB, Redis, Neo4J, GemFire
Community managed subprojects: Elasticsearch, Solr, CouchDB, Riak
Common concept: Repository, following the repository design pattern
Repository, CrudRepository, PagingAndSortingRepository
Spring Data JPApublic interface RestaurantRepository extends CrudRepository<Restaurant, Long>, RestaurantRepositoryCustom { ! Restaurant findByName(String name); ! Page<Restaurant> findByAddressPostcode(String postcode, Pageable pageable); }
interface RestaurantRepositoryCustom { void removeRestaurantWithWebsite(Website website); }
class RestaurantRepositoryImpl implements RestaurantRepositoryCustom { @PersistenceContext private EntityManager em; ! @Override public void removeRestaurantWithWebsite(Website website) { TypedQuery<Restaurant> query = em.createQuery("from Restaurant where website like :website", Restaurant.class); query.setParameter("website", website); em.remove(query.getSingleResult()); } }
Hypermedia with Spring HateoasHATEOAS: Hypermedia As The Engine Of Application State
hyper-text driven REST web services
we are encoding metadata, or hypermedia, along with the repsonse
Resources discoverable through publication of links that point to the available resources
Spring Hateoas: provide an API to simplify the creation of hypermedia links and assembling the REST resource representation
Example hyper-text REST responsecurl -v -H "Accept: application/json" http://localhost:8080/resturants/1
< HTTP/1.1 200 OK < X-Application-Context: application < Content-Type: application/json < Transfer-Encoding: chunked < Server: Jetty(8.1.9.v20130131) < { "name" : "Cafe Olivier", "website" : { "value" : "http://www.cafeolivier.nl" }, "links" : [ { "rel" : "self", "href" : "http://localhost:8080/restaurants/1" }, { "rel" : "address", "href" : "http://localhost:8080/restaurants/1/address" }, { "rel" : "reviews", "href" : "http://localhost:8080/restaurants/1/reviews" } ] }
Spring in the cloud
The deployment targets for modern applications vary considerably
Java EE, Apache Tomcat/Jetty,
Cloud (AWS, Google App Engine, Heroku, OpenShift, CloudFoundry)
CloudFoundry - the open PaaS https://github.com/cloudfoundry
You can install it in your datacenter (cf-vagrant-installer using Chef, recommended way is BOSH)
https://run.pivotal.io
Demo application
Further tasks
Use SQL service (cleardb) provided by CloudFoundry
Store the model in MongoDB using Spring Data
Using profiles switch between datastores on CloudFoundry
Setup local CloudFoundry environment
Add security to REST endpoints
Social coordinates
https://github.com/altfatterz/reviews
https://github.com/altfatterz/spring-boot-groovy
twitter: @altfatterz
blog: altfatterz.blogspot.com
Thanks!