![Page 1: PROJECT AVATAR - Entwicklertag · ON THE JAVA VIRTUAL MACHINE Niko Köbler (@dasniko) Heiko Spindler (@brainbrix) ... platform for server-side code but also a platform to host other](https://reader034.vdocument.in/reader034/viewer/2022051922/60105c643835bb31b3247c68/html5/thumbnails/1.jpg)
PROJECTAVATARMORETHANJUSTNODE.JS
ONTHEJAVAVIRTUALMACHINE
NikoKöbler(@dasniko)HeikoSpindler(@brainbrix)
QualitectsGroup
![Page 2: PROJECT AVATAR - Entwicklertag · ON THE JAVA VIRTUAL MACHINE Niko Köbler (@dasniko) Heiko Spindler (@brainbrix) ... platform for server-side code but also a platform to host other](https://reader034.vdocument.in/reader034/viewer/2022051922/60105c643835bb31b3247c68/html5/thumbnails/2.jpg)
http://de.james-camerons-avatar.wikia.com/wiki/Datei:Avatar-neytiri-wallpapers_16285_1920x1200.jpg
![Page 3: PROJECT AVATAR - Entwicklertag · ON THE JAVA VIRTUAL MACHINE Niko Köbler (@dasniko) Heiko Spindler (@brainbrix) ... platform for server-side code but also a platform to host other](https://reader034.vdocument.in/reader034/viewer/2022051922/60105c643835bb31b3247c68/html5/thumbnails/3.jpg)
https://plus.google.com/112720178642679523134
![Page 4: PROJECT AVATAR - Entwicklertag · ON THE JAVA VIRTUAL MACHINE Niko Köbler (@dasniko) Heiko Spindler (@brainbrix) ... platform for server-side code but also a platform to host other](https://reader034.vdocument.in/reader034/viewer/2022051922/60105c643835bb31b3247c68/html5/thumbnails/4.jpg)
WRITTENIN
http://commons.wikimedia.org/wiki/File:JavaScript-logo.png
![Page 5: PROJECT AVATAR - Entwicklertag · ON THE JAVA VIRTUAL MACHINE Niko Köbler (@dasniko) Heiko Spindler (@brainbrix) ... platform for server-side code but also a platform to host other](https://reader034.vdocument.in/reader034/viewer/2022051922/60105c643835bb31b3247c68/html5/thumbnails/5.jpg)
SPEAKINGJAVASCRIPT
Likeitornot,JavaScriptiseverywherethesedays-frombrowsertoserverto
mobile-andnowyou,too,needtolearnthelanguageordivedeeperthan
youhave.Dr.AxelRauschmayer
http://speakingjs.com
![Page 6: PROJECT AVATAR - Entwicklertag · ON THE JAVA VIRTUAL MACHINE Niko Köbler (@dasniko) Heiko Spindler (@brainbrix) ... platform for server-side code but also a platform to host other](https://reader034.vdocument.in/reader034/viewer/2022051922/60105c643835bb31b3247c68/html5/thumbnails/6.jpg)
GARTNER
Gartnerpredictsthatthrough2014,improvedJavaScriptperformancewillbegintopushHTML5andthebrowserasamainstreamenterpriseapplication
developmentenvironment.(October8,2013)
http://www.gartner.com/newsroom/id/2603623
![Page 7: PROJECT AVATAR - Entwicklertag · ON THE JAVA VIRTUAL MACHINE Niko Köbler (@dasniko) Heiko Spindler (@brainbrix) ... platform for server-side code but also a platform to host other](https://reader034.vdocument.in/reader034/viewer/2022051922/60105c643835bb31b3247c68/html5/thumbnails/7.jpg)
THOUGHTWORKS
IthinkJavaScripthasbeenseenasaseriouslanguageforthelasttwoorthreeyears;Ithinknowincreasingly
we’reseeingJavaScriptasaplatform.(SamNewman,ThoughtWorks’GlobalInnovationLead)
JavaScripthasemergedbothasaplatformforserver-sidecodebutalsoa
platformtohostotherlanguages.(January,2014)
http://www.techworld.com.au/article/536950/rise_rise_javascript
![Page 8: PROJECT AVATAR - Entwicklertag · ON THE JAVA VIRTUAL MACHINE Niko Köbler (@dasniko) Heiko Spindler (@brainbrix) ... platform for server-side code but also a platform to host other](https://reader034.vdocument.in/reader034/viewer/2022051922/60105c643835bb31b3247c68/html5/thumbnails/8.jpg)
GITHUB
http://redmonk.com/dberkholz/2014/05/02/github-language-trends-and-the-fragmenting-landscape/
![Page 9: PROJECT AVATAR - Entwicklertag · ON THE JAVA VIRTUAL MACHINE Niko Köbler (@dasniko) Heiko Spindler (@brainbrix) ... platform for server-side code but also a platform to host other](https://reader034.vdocument.in/reader034/viewer/2022051922/60105c643835bb31b3247c68/html5/thumbnails/9.jpg)
PROJECTAVATAR
JavaScriptservicelayerforJavaEEREST,WebSockets&Server-SentEventsbasedonNashorn,Avatar.js,Jersey,Grizzly,etc.RichHTML5clientsideframeworkAssumesveryminorJavaScriptknowledgeThinServerArchitecture(TSA)https://avatar.java.net
![Page 10: PROJECT AVATAR - Entwicklertag · ON THE JAVA VIRTUAL MACHINE Niko Köbler (@dasniko) Heiko Spindler (@brainbrix) ... platform for server-side code but also a platform to host other](https://reader034.vdocument.in/reader034/viewer/2022051922/60105c643835bb31b3247c68/html5/thumbnails/10.jpg)
AVATARARCHITECTURE
https://avatar.java.net
![Page 11: PROJECT AVATAR - Entwicklertag · ON THE JAVA VIRTUAL MACHINE Niko Köbler (@dasniko) Heiko Spindler (@brainbrix) ... platform for server-side code but also a platform to host other](https://reader034.vdocument.in/reader034/viewer/2022051922/60105c643835bb31b3247c68/html5/thumbnails/11.jpg)
EXCURSION:NASHORN
![Page 12: PROJECT AVATAR - Entwicklertag · ON THE JAVA VIRTUAL MACHINE Niko Köbler (@dasniko) Heiko Spindler (@brainbrix) ... platform for server-side code but also a platform to host other](https://reader034.vdocument.in/reader034/viewer/2022051922/60105c643835bb31b3247c68/html5/thumbnails/12.jpg)
EXCURSION:NASHORN
JavaScriptEngingeontheJVM(native)competeswithGoogleV8ECMAScript5.1compatible(ECMAScript6infuture)SeamlessintegrationofJavaandJavaScriptLanguageandAPIExtensionsclosures,collections&foreach,multi-linestringliterals,stringinterpolation,__noSuchProperty__,
__noSuchMethod__,typedarrays,bindingproperties,errorextensions,conditionalcatchclause,String
functions,andmany,manymore...
https://blogs.oracle.com/nashorn/
![Page 13: PROJECT AVATAR - Entwicklertag · ON THE JAVA VIRTUAL MACHINE Niko Köbler (@dasniko) Heiko Spindler (@brainbrix) ... platform for server-side code but also a platform to host other](https://reader034.vdocument.in/reader034/viewer/2022051922/60105c643835bb31b3247c68/html5/thumbnails/13.jpg)
NASHORNCOMMANDLINECLIENT
$$JAVA_HOME/bin/jjsjjs>print('HelloNashorn!');
INVOKINGJAVASCRIPTFROMJAVAScriptEngineengine=newScriptEngineManager().getEngineByName("nashorn");engine.eval("print('HelloNashorn!');");
engine.eval(newFileReader("scriptfile.js"));
Invocableinvocable=(Invocable)engine;Objectresult=invocable.invokeFunction("jsSayHello","Nashorn");
![Page 14: PROJECT AVATAR - Entwicklertag · ON THE JAVA VIRTUAL MACHINE Niko Köbler (@dasniko) Heiko Spindler (@brainbrix) ... platform for server-side code but also a platform to host other](https://reader034.vdocument.in/reader034/viewer/2022051922/60105c643835bb31b3247c68/html5/thumbnails/14.jpg)
NASHORNINVOKINGJAVAFROMJAVASCRIPT
staticStringsayHello(Stringname){returnString.format("Hello%sfromJava!",name);}
varMyJavaClass=Java.type('my.package.MyJavaClass');varresult=MyJavaClass.sayHello('Nashorn');print(result);//HelloNashornfromJava!
![Page 15: PROJECT AVATAR - Entwicklertag · ON THE JAVA VIRTUAL MACHINE Niko Köbler (@dasniko) Heiko Spindler (@brainbrix) ... platform for server-side code but also a platform to host other](https://reader034.vdocument.in/reader034/viewer/2022051922/60105c643835bb31b3247c68/html5/thumbnails/15.jpg)
EXCURSION:AVATAR-JS
Node.jsontheJVM
~95%Node.jsAPIcompatibilitynoChromeV8nativeAPIs
manyofthenode-moduleswork(e.g.:abbrev,ansi,async,block-stream,chmodr,chownr,coffee-script,colors,commander,connect,debug,
engine.io,express,ftsream,glob,graceful-fs,inherits,ini,init-package-json,grunt,grunt-bower-task,jade,lodash,
mime,mkdirp,mocha,moment,mongodb,mongoose,mustache,node-unit,node-uuid,once,opener,optimist,
osenv,passport,q,read,redis,request,retry,rimraf,ronn,semver,slide,socket.io,tar,uglify-js,uid-number,
underscore,which,winston)
![Page 16: PROJECT AVATAR - Entwicklertag · ON THE JAVA VIRTUAL MACHINE Niko Köbler (@dasniko) Heiko Spindler (@brainbrix) ... platform for server-side code but also a platform to host other](https://reader034.vdocument.in/reader034/viewer/2022051922/60105c643835bb31b3247c68/html5/thumbnails/16.jpg)
https://avatar-js.java.net
![Page 17: PROJECT AVATAR - Entwicklertag · ON THE JAVA VIRTUAL MACHINE Niko Köbler (@dasniko) Heiko Spindler (@brainbrix) ... platform for server-side code but also a platform to host other](https://reader034.vdocument.in/reader034/viewer/2022051922/60105c643835bb31b3247c68/html5/thumbnails/17.jpg)
UI
![Page 18: PROJECT AVATAR - Entwicklertag · ON THE JAVA VIRTUAL MACHINE Niko Köbler (@dasniko) Heiko Spindler (@brainbrix) ... platform for server-side code but also a platform to host other](https://reader034.vdocument.in/reader034/viewer/2022051922/60105c643835bb31b3247c68/html5/thumbnails/18.jpg)
MODEL<scriptdata-model="local"data-instance="add">
2-WAY-BINDING<inputid="lfa"type="text"data-value="#{add.left}"/><inputid="rta"type="text"data-value="#{add.right}"/><spanid="output1">Theresultis#{add.left}+#{add.right}=#{add.left+add.right}</span><buttononclick="#{add.reset()}"id="reset">Reset</button>
![Page 19: PROJECT AVATAR - Entwicklertag · ON THE JAVA VIRTUAL MACHINE Niko Köbler (@dasniko) Heiko Spindler (@brainbrix) ... platform for server-side code but also a platform to host other](https://reader034.vdocument.in/reader034/viewer/2022051922/60105c643835bb31b3247c68/html5/thumbnails/19.jpg)
WIDGETS&THEMES
defaultbasedonjQueryUIother/customthemes&jQuerypluginspossible
optional:DojodijitwidgetLibextension
![Page 20: PROJECT AVATAR - Entwicklertag · ON THE JAVA VIRTUAL MACHINE Niko Köbler (@dasniko) Heiko Spindler (@brainbrix) ... platform for server-side code but also a platform to host other](https://reader034.vdocument.in/reader034/viewer/2022051922/60105c643835bb31b3247c68/html5/thumbnails/20.jpg)
WHATABOUTANGULAR.JS?
YES!FORSURE!WHYNOT?
ThankstoTSA!:-)
![Page 21: PROJECT AVATAR - Entwicklertag · ON THE JAVA VIRTUAL MACHINE Niko Köbler (@dasniko) Heiko Spindler (@brainbrix) ... platform for server-side code but also a platform to host other](https://reader034.vdocument.in/reader034/viewer/2022051922/60105c643835bb31b3247c68/html5/thumbnails/21.jpg)
BACKENDvaravatar=require('org/glassfish/avatar');
![Page 22: PROJECT AVATAR - Entwicklertag · ON THE JAVA VIRTUAL MACHINE Niko Köbler (@dasniko) Heiko Spindler (@brainbrix) ... platform for server-side code but also a platform to host other](https://reader034.vdocument.in/reader034/viewer/2022051922/60105c643835bb31b3247c68/html5/thumbnails/22.jpg)
DATAPROVIDERvaritemsFileProvider=newavatar.FileDataProvider({filename:'rest-sample.txt'key:'key'});
varitemsJpaProvider=newavatar.JPADataProvider({persistenceUnit:'rest',createTables:true,entityType:'Item'});
myDataProvider.create(item,callback);myDataProvider.del(item,callback);myDataProvider.get(key,callback);myDataProvider.getCollection(parameters,count,offset,callback);myDataProvider.put(key,item,callback);
myDataProvider.create(item).then(...);
![Page 23: PROJECT AVATAR - Entwicklertag · ON THE JAVA VIRTUAL MACHINE Niko Köbler (@dasniko) Heiko Spindler (@brainbrix) ... platform for server-side code but also a platform to host other](https://reader034.vdocument.in/reader034/viewer/2022051922/60105c643835bb31b3247c68/html5/thumbnails/23.jpg)
JMSvarmyJMS=newavatar.JMS({connectionFactoryName:'jms/myConnFactory',destinationName:'jms/myQueue'});
myJMS.addListener(function(message){avatar.log('Gotmessage:'+message);}).then(function(){avatar.log('Sendingmessage...');returnmyJMS.send('Testmessage');}).then(function(){avatar.log('Messagesent.');});
![Page 24: PROJECT AVATAR - Entwicklertag · ON THE JAVA VIRTUAL MACHINE Niko Köbler (@dasniko) Heiko Spindler (@brainbrix) ... platform for server-side code but also a platform to host other](https://reader034.vdocument.in/reader034/viewer/2022051922/60105c643835bb31b3247c68/html5/thumbnails/24.jpg)
RESTSERVICEavatar.registerRestService({url:'data/items/{item}',methods:['GET']},function(){this.onGet=function(request,response){myDataProvider.get(this.item).then(response.send(itemValue));};});
avatar.registerRestService({url:'data/items/{itemid}',dataProvider:myDataProvider,authorization:{...}},function(){});
![Page 25: PROJECT AVATAR - Entwicklertag · ON THE JAVA VIRTUAL MACHINE Niko Köbler (@dasniko) Heiko Spindler (@brainbrix) ... platform for server-side code but also a platform to host other](https://reader034.vdocument.in/reader034/viewer/2022051922/60105c643835bb31b3247c68/html5/thumbnails/25.jpg)
PUSHSERVICEavatar.registerPushService({url:'push/stocks'},function(){this.onOpen=function(context){context.setTimeout(5000);};
this.onTimeout=function(context){context.sendMessage('HelloWorld!');};});
avatar.registerPushService({url:'/push/chat',jms:{connectionFactoryName:'jms/MyConnectionFactory',destinationName:'jms/ChatQueue'}},function(){});
![Page 26: PROJECT AVATAR - Entwicklertag · ON THE JAVA VIRTUAL MACHINE Niko Köbler (@dasniko) Heiko Spindler (@brainbrix) ... platform for server-side code but also a platform to host other](https://reader034.vdocument.in/reader034/viewer/2022051922/60105c643835bb31b3247c68/html5/thumbnails/26.jpg)
SOCKETSERVICEavatar.registerSocketService({url:'/websocket/chat'},function(){this.onMessage=function(peer,message){peer.getContext().sendAll(message);};});
avatar.registerSocketService({url:'/websocket/jmschat/{chatroom}',jms:{connectionFactoryName:'jms/MyConnectionFactory',destinationName:'jms/ChatTopic',messageSelector:"chatroom='#{this.chatroom}'",messageProperties:{chatroom:'#{this.chatroom}'}}},function(){});
![Page 27: PROJECT AVATAR - Entwicklertag · ON THE JAVA VIRTUAL MACHINE Niko Köbler (@dasniko) Heiko Spindler (@brainbrix) ... platform for server-side code but also a platform to host other](https://reader034.vdocument.in/reader034/viewer/2022051922/60105c643835bb31b3247c68/html5/thumbnails/27.jpg)
MESSAGEBUSvarbus=avatar.application.bus;
bus.publish('echo',{x:'x',y:'y'});
bus.on('echo',function(body,msg){avatar.log('Gotmessage:'+JSON.stringify(body));});
varapp=avatar.application;varbus=app.bus;varechoOnce=function(body,msg){body.name=app.name;body.threadIndex=app.threadIndex;body.threadCount=app.threadCount;body.startTime=app.startTime;body.uptime=app.uptime;body.topic=msg.topic;body.src=msg.sourceAddress;bus.reply(msg,body);bus.unsubscribe(msg.topic,echoOnce);}bus.on('echo',echoOnce);
![Page 28: PROJECT AVATAR - Entwicklertag · ON THE JAVA VIRTUAL MACHINE Niko Köbler (@dasniko) Heiko Spindler (@brainbrix) ... platform for server-side code but also a platform to host other](https://reader034.vdocument.in/reader034/viewer/2022051922/60105c643835bb31b3247c68/html5/thumbnails/28.jpg)
DEMOTIMEhttps://github.com/dasniko/avatar-twitterwall
![Page 29: PROJECT AVATAR - Entwicklertag · ON THE JAVA VIRTUAL MACHINE Niko Köbler (@dasniko) Heiko Spindler (@brainbrix) ... platform for server-side code but also a platform to host other](https://reader034.vdocument.in/reader034/viewer/2022051922/60105c643835bb31b3247c68/html5/thumbnails/29.jpg)
TIMELINE
Period Milestone
JavaOne2013 ProjectAvatarLaunch
GlassFishRuntime
June2014 WebLogicRuntime(WLS12.1.3)
Mid2015 WebLogic12.1.4
AvatarCommercialSupport
??? PartofJavaEESpec?
(WITHOUTOBLIGATION)
![Page 30: PROJECT AVATAR - Entwicklertag · ON THE JAVA VIRTUAL MACHINE Niko Köbler (@dasniko) Heiko Spindler (@brainbrix) ... platform for server-side code but also a platform to host other](https://reader034.vdocument.in/reader034/viewer/2022051922/60105c643835bb31b3247c68/html5/thumbnails/30.jpg)
PROJECTAVATARCONCLUSION
LightweightintegrationinJavaEEandEnterprisecontext
JMS,JPA,REST,Java-APIs,…WebLogicRuntime
PerfectinteractionbetweenclientandserverUseofclient-componentisnotaMUST
Butneitheroftheserver-componentCommercialsupportfromOracle(infuture)
![Page 31: PROJECT AVATAR - Entwicklertag · ON THE JAVA VIRTUAL MACHINE Niko Köbler (@dasniko) Heiko Spindler (@brainbrix) ... platform for server-side code but also a platform to host other](https://reader034.vdocument.in/reader034/viewer/2022051922/60105c643835bb31b3247c68/html5/thumbnails/31.jpg)
THANKYOU!
QUESTIONS?