Modern Architectures Spring with and JavaScript Martin Lippert,VMware mlippert@vmware.com, @martinlippert
Were do we come from? http://www.nasa.gov
Servlet Specification mostly static HTML created on server Template Engines JSP Specification mostly static HTML created on server no template engines necessary anymore Web Frameworks mostly static HTML created on server various framework, supporting: authentication, session-handling, page flows, etc. JavaScript only used to do some kid‘s stuff
Or from her e? Desktop? SWT? Swing?
Typical Runtime Structures Browser render HTML business logic & Tomcat / tc Server page rendering Relational Database contains data
And today...
What happens? render HTML & improved Browser experience using JavaScript AJAX calls business logic & Tomcat / tc Server page rendering & APIs contains data & new Relational Database challenges (structure, size)
A few observations duplicated logic, no modularization render HTML & improved Browser experience using JavaScript AJAX calls APIs are challenging, Java not the only language anymore business logic & Tomcat / tc Server page rendering & APIs relational & transactional contains anymore don‘t fit data & new Relational Database challenges (structure, size)
Different pictures AWS node.js HTML/CSS NoSQL Java JavaScript JavaScript Hadoop CoffeeScript modern apps old style apps Scala Ruby/Rails Application Clojure PaaS Server RDBMS HTML5/CSS3
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“
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 ...
The Server Side
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 landscape Browser App (JavaScript) Service Service Service Service Service NoSQL NoSQL RDBMS NoSQL RDBMS NoSQL NoSQL
Browser App (JavaScript) rich client application Service written in JavaScript Service Service Service Service (a lot bigger than what we do today in JavaScript within the browser) NoSQL NoSQL RDBMS NoSQL RDBMS NoSQL NoSQL
Browser App (JavaScript) maybe also CoffeeScript, TypeScript, Dart maybe GWT, but likely not forget about JSF
The landscape services are provided by a PaaS or are hand-written (in a language of your choice) Browser App this is where Spring is really powerful (JavaScript) ready to run „in the cloud“ (scalability) (no client-side rendering or logic) Service Service Service Service Service NoSQL NoSQL RDBMS NoSQL RDBMS NoSQL NoSQL
Service Spring MVC is the easiest way to implement RESTful APIs and services APIs are JSON and HATEOAS based Spring MVC + Spring HATEOAS is a powerful combination more on Spring HATEOAS: https://github.com/SpringSource/spring-hateoas
Service Spring Integration & Messaging Spring Batch
Browser App (JavaScript) RESTful API Push using AJAX (over WebSockets) (over http) Service
Browser App (JavaScript) RDBMS and NoSQL datastores are provided by the PaaS + the PaaS takes care of scalability Service access managed by Spring (e.g. Spring Data) + Service Service Service Service NoSQL NoSQL RDBMS NoSQL RDBMS NoSQL NoSQL
Running in the cloud (on a PaaS) Service Service Service Service Service NoSQL NoSQL RDBMS NoSQL RDBMS NoSQL NoSQL
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
more information 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
Q&A and thank you for your attention Martin Lippert,VMware mlippert@vmware.com, @martinlippert

Modern Architectures with Spring and JavaScript

  • 1.
    Modern Architectures Spring with and JavaScript Martin Lippert,VMware mlippert@vmware.com, @martinlippert
  • 2.
    Were do wecome from? http://www.nasa.gov
  • 3.
    Servlet Specification mostly static HTML created on server Template Engines JSP Specification mostly static HTML created on server no template engines necessary anymore Web Frameworks mostly static HTML created on server various framework, supporting: authentication, session-handling, page flows, etc. JavaScript only used to do some kid‘s stuff
  • 4.
    Or from her e? Desktop? SWT? Swing?
  • 5.
    Typical Runtime Structures Browser render HTML business logic & Tomcat / tc Server page rendering Relational Database contains data
  • 6.
  • 7.
    What happens? render HTML & improved Browser experience using JavaScript AJAX calls business logic & Tomcat / tc Server page rendering & APIs contains data & new Relational Database challenges (structure, size)
  • 8.
    A few observations duplicated logic, no modularization render HTML & improved Browser experience using JavaScript AJAX calls APIs are challenging, Java not the only language anymore business logic & Tomcat / tc Server page rendering & APIs relational & transactional contains anymore don‘t fit data & new Relational Database challenges (structure, size)
  • 9.
    Different pictures AWS node.js HTML/CSS NoSQL Java JavaScript JavaScript Hadoop CoffeeScript modern apps old style apps Scala Ruby/Rails Application Clojure PaaS Server RDBMS HTML5/CSS3
  • 10.
    Where do wego from here?
  • 11.
  • 12.
  • 13.
    The JavaScript Story http://www.maztek.com/blog/wp-content/uploads/javascript.jpg
  • 14.
    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“
  • 15.
    Existing JavaScript libsare UI centric (focus on making life with the DOM easier) most prominent: jquery
  • 16.
    JavaScript versions of „goodold rich client patterns“ begin to appear (and are highly necessary) Examples backbone.js angular.js ember.js ...
  • 17.
  • 18.
    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
  • 19.
    My assumptions - data storage - more and more data (big data) different storage techniques combined (rdbms, nosql, graph databases) scalability is important
  • 20.
    The landscape Browser App (JavaScript) Service Service Service Service Service NoSQL NoSQL RDBMS NoSQL RDBMS NoSQL NoSQL
  • 21.
    Browser App (JavaScript) rich client application Service written in JavaScript Service Service Service Service (a lot bigger than what we do today in JavaScript within the browser) NoSQL NoSQL RDBMS NoSQL RDBMS NoSQL NoSQL
  • 22.
    Browser App (JavaScript) maybe also CoffeeScript, TypeScript, Dart maybe GWT, but likely not forget about JSF
  • 23.
    The landscape services are provided by a PaaS or are hand-written (in a language of your choice) Browser App this is where Spring is really powerful (JavaScript) ready to run „in the cloud“ (scalability) (no client-side rendering or logic) Service Service Service Service Service NoSQL NoSQL RDBMS NoSQL RDBMS NoSQL NoSQL
  • 24.
    Service SpringMVC is the easiest way to implement RESTful APIs and services APIs are JSON and HATEOAS based Spring MVC + Spring HATEOAS is a powerful combination more on Spring HATEOAS: https://github.com/SpringSource/spring-hateoas
  • 25.
    Service Spring Integration & Messaging Spring Batch
  • 26.
    Browser App (JavaScript) RESTful API Push using AJAX (over WebSockets) (over http) Service
  • 27.
    Browser App (JavaScript) RDBMS and NoSQL datastores are provided by the PaaS + the PaaS takes care of scalability Service access managed by Spring (e.g. Spring Data) + Service Service Service Service NoSQL NoSQL RDBMS NoSQL RDBMS NoSQL NoSQL
  • 28.
    Running in thecloud (on a PaaS) Service Service Service Service Service NoSQL NoSQL RDBMS NoSQL RDBMS NoSQL NoSQL
  • 29.
  • 30.
    Modularity in JavaScript
  • 31.
    AMD (asynchronous moduledefinition) wire.js (Dependency Injection for JavaScript) Micro Services for JavaScript (OSGi services written in JavaScript)
  • 32.
    More Challenges offline cloud-ready services definegood APIs versioned APIs TDD for JavaScript
  • 33.
    more information 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
  • 34.
    Q&A and thank youfor your attention Martin Lippert,VMware mlippert@vmware.com, @martinlippert