Modern Architectures Martin Lippert,VMware mlippert@vmware.com, @martinlippert with Spring JavaScript and
about me Martin Lippert Staff Engineer, R&D, at SpringSource/VMware and lead of Spring Tool Suite development Working areas • Eclipse Tooling for the Spring platform • Open Source Committer • Aspect-Weaving for OSGi • Cloud IDEs and JavaScript • Agile software development
Typical Runtime Structures Tomcat / tc Server Relational Database Browser contains data business logic & page rendering render HTML
More Detail... Controllers RDBMS Browser-based HTML Rendering Repositories Service Layer View Generation Channels Browser Application Server
What happens? Tomcat / tc Server Relational Database Browser contains data & new challenges (structure, size) business logic & page rendering & APIs render HTML & improved experience using JavaScript AJAX calls
A few observations Tomcat / tc Server Relational Database Browser contains data & new challenges (structure, size) business logic & page rendering & APIs render HTML & improved experience using JavaScript AJAX calls duplicated logic, no modularization APIs are challenging, Java not the only language anymore relational & transactional don‘t fit anymore
Different pictures modern apps old style apps NoSQL JavaScript Scala Clojure CoffeeScript node.js Hadoop Ruby/Rails PaaS AWS Java RDBMS Application Server JavaScript HTML5/CSS3 HTML/CSS
Where do we go from here?
The Client Side
Innovation happens here
The JavaScript Story http://www.maztek.com/blog/wp-content/uploads/javascript.jpg
My assumptions - on the client side - Browser only (HTML5/CSS3) JavaScript only „The browser-based application written in JavaScript becomes the new rich client architecture“
Browser-based HTML Rendering More Detail... HTML5 & JS Engine Controllers Client-side Model DOM Web Storage
Existing JavaScript libs are UI centric (focus on making life with the DOM easier) most prominent: jquery
JavaScript versions of „good old rich client patterns“ begin to appear (and are highly necessary) Examples backbone.js angular.js ember.js ...
Browser App (JavaScript) forget about JSF ;-) maybe GWT, but likely not maybe also CoffeeScript, TypeScript, Dart
The Server Side
Controllers RDBMSRepositories Service Layer View Generation Channels RDBMS Service NoSQL Service Service Service other Service Service business/domain services platform services
Service Service Service Service Service this is where Spring is really powerful ready to run „in the cloud“ (scalability) (no client-side rendering or logic)
Service Spring MVC + Spring HATEOAS is a powerful combination APIs are JSON and HATEOAS based Spring MVC is the easiest way to implement RESTful APIs and services more on Spring HATEOAS: https://github.com/SpringSource/spring-hateoas
Service Spring Batch Spring Integration & Messaging
My assumptions - server side languages - many different languages in use choose the right language for the right job don‘t use a new language for fun
My assumptions - data storage - more and more data (big data) different storage techniques combined (rdbms, nosql, graph databases) scalability is important
The picture RDBMS Service Browser PaaS HTML5 & JS Engine Controllers Client-side Model DOM Web Storage NoSQL Service Service Service other Service Service business/domain services platform services
Browser App (JavaScript) Service RESTful API (JSON over http) Push (JSON over WebSockets) Communication
The Challenges
Modularity in JavaScript
AMD (asynchronous module definition) wire.js (Dependency Injection for JavaScript) Micro Services for JavaScript (OSGi services written in JavaScript)
More Challenges offline cloud-ready services define good APIs versioned APIs TDD for JavaScript
Adrian Colyer on Application Development in the Cloud Era http://www.youtube.com/watch?v=axOPJbrIjkY Example app using Spring for providing RESTful APIs and JavaScript for a rich client and mobile app https://github.com/SpringSource/html5expense Asynchronous Module Definition for JavaScript (AMD) https://github.com/amdjs/amdjs-api http://requirejs.org/docs/whyamd.html wire.js https://github.com/cujojs/wire hello world with wire.js https://github.com/briancavalier/hello-wire.js more advanced example for wire.js https://github.com/briancavalier/piratescript Cloud Foundry PaaS http://www.cloudfoundry.com http://www.cloudfoundry.org more information
Martin Lippert,VMware mlippert@vmware.com, @martinlippert Q&A and thank you for your attention

JAX 2013: Modern Architectures with Spring and JavaScript