javaone 2014 - scalable javascript applications with project nashorn [con6423]
DESCRIPTION
Speakers: Leonardo Zanivan Michel GracianoTRANSCRIPT
![Page 1: JavaOne 2014 - Scalable JavaScript Applications with Project Nashorn [CON6423]](https://reader034.vdocuments.net/reader034/viewer/2022051513/547e7d0cb37959492b8b54b8/html5/thumbnails/1.jpg)
Scalable JavaScript applications with Project Nashorn
![Page 2: JavaOne 2014 - Scalable JavaScript Applications with Project Nashorn [CON6423]](https://reader034.vdocuments.net/reader034/viewer/2022051513/547e7d0cb37959492b8b54b8/html5/thumbnails/2.jpg)
SpeakersLeonardo ZanivanSoftware Architect, Trier Sistemasgithub.com/panga@leonardopanga
Michel GracianoSoftware Architect, Betha Sistemasgithub.com/mgraciano@mgraciano
![Page 3: JavaOne 2014 - Scalable JavaScript Applications with Project Nashorn [CON6423]](https://reader034.vdocuments.net/reader034/viewer/2022051513/547e7d0cb37959492b8b54b8/html5/thumbnails/3.jpg)
Agenda● Why JS in the server● Why the JVM● Nashorn ecosystem● Vert.x and Avatar/Avatar.js● Q&A
![Page 4: JavaOne 2014 - Scalable JavaScript Applications with Project Nashorn [CON6423]](https://reader034.vdocuments.net/reader034/viewer/2022051513/547e7d0cb37959492b8b54b8/html5/thumbnails/4.jpg)
Why JS in the server● Asynchronous by nature● Native JSON support● Language reuse● Easier developer transition
![Page 5: JavaOne 2014 - Scalable JavaScript Applications with Project Nashorn [CON6423]](https://reader034.vdocuments.net/reader034/viewer/2022051513/547e7d0cb37959492b8b54b8/html5/thumbnails/5.jpg)
Why the JVM● Multilanguage● APM Tools● Access to the Java ecosystem
o Domain models already implementedo Java EEo Core and third parties Java libraries
![Page 6: JavaOne 2014 - Scalable JavaScript Applications with Project Nashorn [CON6423]](https://reader034.vdocuments.net/reader034/viewer/2022051513/547e7d0cb37959492b8b54b8/html5/thumbnails/6.jpg)
Nashorn● JDK 8 Compact 1 Profile with extension● Restrictions (browsers API, DOM)● No native CommonJS implementation● ECMA 5.1 + Rhino compatibility● jjs interactive command line tool
![Page 7: JavaOne 2014 - Scalable JavaScript Applications with Project Nashorn [CON6423]](https://reader034.vdocuments.net/reader034/viewer/2022051513/547e7d0cb37959492b8b54b8/html5/thumbnails/7.jpg)
![Page 8: JavaOne 2014 - Scalable JavaScript Applications with Project Nashorn [CON6423]](https://reader034.vdocuments.net/reader034/viewer/2022051513/547e7d0cb37959492b8b54b8/html5/thumbnails/8.jpg)
![Page 9: JavaOne 2014 - Scalable JavaScript Applications with Project Nashorn [CON6423]](https://reader034.vdocuments.net/reader034/viewer/2022051513/547e7d0cb37959492b8b54b8/html5/thumbnails/9.jpg)
![Page 10: JavaOne 2014 - Scalable JavaScript Applications with Project Nashorn [CON6423]](https://reader034.vdocuments.net/reader034/viewer/2022051513/547e7d0cb37959492b8b54b8/html5/thumbnails/10.jpg)
![Page 11: JavaOne 2014 - Scalable JavaScript Applications with Project Nashorn [CON6423]](https://reader034.vdocuments.net/reader034/viewer/2022051513/547e7d0cb37959492b8b54b8/html5/thumbnails/11.jpg)
![Page 12: JavaOne 2014 - Scalable JavaScript Applications with Project Nashorn [CON6423]](https://reader034.vdocuments.net/reader034/viewer/2022051513/547e7d0cb37959492b8b54b8/html5/thumbnails/12.jpg)
![Page 13: JavaOne 2014 - Scalable JavaScript Applications with Project Nashorn [CON6423]](https://reader034.vdocuments.net/reader034/viewer/2022051513/547e7d0cb37959492b8b54b8/html5/thumbnails/13.jpg)
![Page 14: JavaOne 2014 - Scalable JavaScript Applications with Project Nashorn [CON6423]](https://reader034.vdocuments.net/reader034/viewer/2022051513/547e7d0cb37959492b8b54b8/html5/thumbnails/14.jpg)
Nashorn● JDK 8u20
o JDK-8032068: sourceURL directiveso JDK-8021350: Share script classes between
threads/globals● JDK 8u40
o JEP 196: Nashorn Optimistic Typingo JEP 202: Nashorn Class Filtero JEP 203: Initial ES6 implementation (const & let)
● JEP 194: Nashorn Code Persistence (lazy compilation)
![Page 15: JavaOne 2014 - Scalable JavaScript Applications with Project Nashorn [CON6423]](https://reader034.vdocuments.net/reader034/viewer/2022051513/547e7d0cb37959492b8b54b8/html5/thumbnails/15.jpg)
But how to scale it?
![Page 16: JavaOne 2014 - Scalable JavaScript Applications with Project Nashorn [CON6423]](https://reader034.vdocuments.net/reader034/viewer/2022051513/547e7d0cb37959492b8b54b8/html5/thumbnails/16.jpg)
But how to scale it?Architectures and Technologies
![Page 17: JavaOne 2014 - Scalable JavaScript Applications with Project Nashorn [CON6423]](https://reader034.vdocuments.net/reader034/viewer/2022051513/547e7d0cb37959492b8b54b8/html5/thumbnails/17.jpg)
Event-driven architecture● Event-loops● Async non-blocking IO● Reactive system● Event bus
![Page 18: JavaOne 2014 - Scalable JavaScript Applications with Project Nashorn [CON6423]](https://reader034.vdocuments.net/reader034/viewer/2022051513/547e7d0cb37959492b8b54b8/html5/thumbnails/18.jpg)
Event-driven architecture
![Page 19: JavaOne 2014 - Scalable JavaScript Applications with Project Nashorn [CON6423]](https://reader034.vdocuments.net/reader034/viewer/2022051513/547e7d0cb37959492b8b54b8/html5/thumbnails/19.jpg)
Microservice architecture● Focused on specific business● Well defined & distributed● Loosely coupled● Testable● Scalable
![Page 20: JavaOne 2014 - Scalable JavaScript Applications with Project Nashorn [CON6423]](https://reader034.vdocuments.net/reader034/viewer/2022051513/547e7d0cb37959492b8b54b8/html5/thumbnails/20.jpg)
Microservices Architecture
![Page 21: JavaOne 2014 - Scalable JavaScript Applications with Project Nashorn [CON6423]](https://reader034.vdocuments.net/reader034/viewer/2022051513/547e7d0cb37959492b8b54b8/html5/thumbnails/21.jpg)
Vert.x● http://vertx.io/● Based on Netty● Sponsored by Red Hat● Winner of JAX Innovation Awards 2014
@timfox: Writing Highly Concurrent Polyglot Applications with Vert.x [CON7902] Thursday, Oct 2, 11:30 AM
![Page 22: JavaOne 2014 - Scalable JavaScript Applications with Project Nashorn [CON6423]](https://reader034.vdocuments.net/reader034/viewer/2022051513/547e7d0cb37959492b8b54b8/html5/thumbnails/22.jpg)
Vert.x● Key benefits
o Polygloto Event bus (async & worker verticles)o Create reactive applicationso Microservices readyo Strong community involvement
![Page 23: JavaOne 2014 - Scalable JavaScript Applications with Project Nashorn [CON6423]](https://reader034.vdocuments.net/reader034/viewer/2022051513/547e7d0cb37959492b8b54b8/html5/thumbnails/23.jpg)
Vert.x Architecture
![Page 24: JavaOne 2014 - Scalable JavaScript Applications with Project Nashorn [CON6423]](https://reader034.vdocuments.net/reader034/viewer/2022051513/547e7d0cb37959492b8b54b8/html5/thumbnails/24.jpg)
Vert.x● Key benefits
o Easy deployment CLI, API, mods, runtime deps resolution
o Good build tools support (fat jar, auto-redeploy)
o Native Cluster & HA with Hazelcasto Tons of extensions available
![Page 25: JavaOne 2014 - Scalable JavaScript Applications with Project Nashorn [CON6423]](https://reader034.vdocuments.net/reader034/viewer/2022051513/547e7d0cb37959492b8b54b8/html5/thumbnails/25.jpg)
Vert.x● Challenges
o Updated documentationo Verticle monitoringo Limited transactions supporto Doesn’t have distributed maps yet (2.x)o Nashorn debugging support (PR to be
merged)
![Page 26: JavaOne 2014 - Scalable JavaScript Applications with Project Nashorn [CON6423]](https://reader034.vdocuments.net/reader034/viewer/2022051513/547e7d0cb37959492b8b54b8/html5/thumbnails/26.jpg)
Vert.x● Vert.x 3 highlights
o JDK 8+ with Nashorn & Lambdao No more module system*o Clustered shared datao Event bus proxies & codecso Ext stack (MongoDB, SockJS, Route, Rx)
![Page 27: JavaOne 2014 - Scalable JavaScript Applications with Project Nashorn [CON6423]](https://reader034.vdocuments.net/reader034/viewer/2022051513/547e7d0cb37959492b8b54b8/html5/thumbnails/27.jpg)
Demo● Real-time notification service using
websockets over nashorn integrating with a legacy Java EE app
![Page 28: JavaOne 2014 - Scalable JavaScript Applications with Project Nashorn [CON6423]](https://reader034.vdocuments.net/reader034/viewer/2022051513/547e7d0cb37959492b8b54b8/html5/thumbnails/28.jpg)
Avatar.js● https://avatar-js.java.net● Oracle sponsored● Focus on bringing the node
programming model, APIs and module ecosystem to the Java platform
![Page 29: JavaOne 2014 - Scalable JavaScript Applications with Project Nashorn [CON6423]](https://reader034.vdocuments.net/reader034/viewer/2022051513/547e7d0cb37959492b8b54b8/html5/thumbnails/29.jpg)
Avatar.js
![Page 30: JavaOne 2014 - Scalable JavaScript Applications with Project Nashorn [CON6423]](https://reader034.vdocuments.net/reader034/viewer/2022051513/547e7d0cb37959492b8b54b8/html5/thumbnails/30.jpg)
Avatar● https://avatar.java.net● Oracle sponsored● Focus on Thin Server Architecture
o Supports REST, WebSocket and Server-Sent Events
● Built on Avatar.js
![Page 31: JavaOne 2014 - Scalable JavaScript Applications with Project Nashorn [CON6423]](https://reader034.vdocuments.net/reader034/viewer/2022051513/547e7d0cb37959492b8b54b8/html5/thumbnails/31.jpg)
Avatar Architecture
![Page 32: JavaOne 2014 - Scalable JavaScript Applications with Project Nashorn [CON6423]](https://reader034.vdocuments.net/reader034/viewer/2022051513/547e7d0cb37959492b8b54b8/html5/thumbnails/32.jpg)
Avatar EE Architecture
![Page 33: JavaOne 2014 - Scalable JavaScript Applications with Project Nashorn [CON6423]](https://reader034.vdocuments.net/reader034/viewer/2022051513/547e7d0cb37959492b8b54b8/html5/thumbnails/33.jpg)
![Page 34: JavaOne 2014 - Scalable JavaScript Applications with Project Nashorn [CON6423]](https://reader034.vdocuments.net/reader034/viewer/2022051513/547e7d0cb37959492b8b54b8/html5/thumbnails/34.jpg)
![Page 35: JavaOne 2014 - Scalable JavaScript Applications with Project Nashorn [CON6423]](https://reader034.vdocuments.net/reader034/viewer/2022051513/547e7d0cb37959492b8b54b8/html5/thumbnails/35.jpg)
● Deploying an application on Glassfish 4o asadmin deploy ~/projects/<app-folder-
name>● Running the application
o http://localhost:8080/<app-folder-name>
Avatar
![Page 36: JavaOne 2014 - Scalable JavaScript Applications with Project Nashorn [CON6423]](https://reader034.vdocuments.net/reader034/viewer/2022051513/547e7d0cb37959492b8b54b8/html5/thumbnails/36.jpg)
Avatar/Avatar.js● Key benefits
o Avatar Services use an Actor-like concurrency model
o NPM modules supporto Strong Java EE integrationo Debugging
![Page 37: JavaOne 2014 - Scalable JavaScript Applications with Project Nashorn [CON6423]](https://reader034.vdocuments.net/reader034/viewer/2022051513/547e7d0cb37959492b8b54b8/html5/thumbnails/37.jpg)
Avatar/Avatar.js● Challenges
o Weak community involvemento Low activity and no stable releaseo Glassfish / Weblogic onlyo Model Store API supports only Oracle NoSQL
for schemaless database
![Page 38: JavaOne 2014 - Scalable JavaScript Applications with Project Nashorn [CON6423]](https://reader034.vdocuments.net/reader034/viewer/2022051513/547e7d0cb37959492b8b54b8/html5/thumbnails/38.jpg)
Benchmark● Some simple and naive scenarios
o Posting and querying from databaseo Returning a simple JSON responseo String concatenationo Fibonacci calculation
![Page 39: JavaOne 2014 - Scalable JavaScript Applications with Project Nashorn [CON6423]](https://reader034.vdocuments.net/reader034/viewer/2022051513/547e7d0cb37959492b8b54b8/html5/thumbnails/39.jpg)
Benchmark● Node.js 0.10.29 (2014-06-16)● Avatar.js 0.10.28-SNAPSHOT (2014-07-
20)● Vert.X 2.1.1 (2014-06-18)● Avatar 1.0-ea-SNAPSHOT (2014-07-26)● JDK 8u5
![Page 40: JavaOne 2014 - Scalable JavaScript Applications with Project Nashorn [CON6423]](https://reader034.vdocuments.net/reader034/viewer/2022051513/547e7d0cb37959492b8b54b8/html5/thumbnails/40.jpg)
Some Fib(30) results
![Page 41: JavaOne 2014 - Scalable JavaScript Applications with Project Nashorn [CON6423]](https://reader034.vdocuments.net/reader034/viewer/2022051513/547e7d0cb37959492b8b54b8/html5/thumbnails/41.jpg)
Some Fib(30) results
![Page 42: JavaOne 2014 - Scalable JavaScript Applications with Project Nashorn [CON6423]](https://reader034.vdocuments.net/reader034/viewer/2022051513/547e7d0cb37959492b8b54b8/html5/thumbnails/42.jpg)
Some Fib(30) results
![Page 43: JavaOne 2014 - Scalable JavaScript Applications with Project Nashorn [CON6423]](https://reader034.vdocuments.net/reader034/viewer/2022051513/547e7d0cb37959492b8b54b8/html5/thumbnails/43.jpg)
Q&A
![Page 44: JavaOne 2014 - Scalable JavaScript Applications with Project Nashorn [CON6423]](https://reader034.vdocuments.net/reader034/viewer/2022051513/547e7d0cb37959492b8b54b8/html5/thumbnails/44.jpg)
Credits● Event-loop & Vert.X architecture
o Slideshare presentation http://bit.ly/1qz6KUb
● Microservice architectureo http://martinfowler.com/articles/microservices.html
● Avatar.js architectureo Project Avatar.js website
● Avatar and Avatar EE architectureso Project Avatar website
![Page 45: JavaOne 2014 - Scalable JavaScript Applications with Project Nashorn [CON6423]](https://reader034.vdocuments.net/reader034/viewer/2022051513/547e7d0cb37959492b8b54b8/html5/thumbnails/45.jpg)
Thank you!@leonardopanga@mgraciano
● Sourceso github.com/mgraciano/javaone-2014o github.com/panga/javaone2014-benchmarks