+ All Categories
Home > Documents > PROJECT AVATAR - Entwicklertag · ON THE JAVA VIRTUAL MACHINE Niko Köbler (@dasniko) Heiko...

PROJECT AVATAR - Entwicklertag · ON THE JAVA VIRTUAL MACHINE Niko Köbler (@dasniko) Heiko...

Date post: 26-Sep-2020
Category:
Upload: others
View: 1 times
Download: 0 times
Share this document with a friend
31
PROJECT AVATAR MORE THAN JUST NODE.JS ON THE JAVA VIRTUAL MACHINE Niko Köbler (@dasniko) Heiko Spindler (@brainbrix) Qualitects Group
Transcript
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

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

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://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

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

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

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

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

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

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

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

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

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

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

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

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://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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

THANKYOU!

QUESTIONS?


Recommended