1

Akka, Play & Scala u praksi STJEPAN BULJAT ETNA .O.O. [email protected]

@sbuljat JavaCro ‘13 – 2nd International Conference in Croatia 2 O predavaču…

 Radim kao voditelj tima za razvoj i istraživanje u tvrtki Etna d.o.o.  Završio FER (mag.ing.comp.) i EFZG (univ.spec.oec )  Povijest programiranja: Pascal  C   Java  Scala

 je privatna tvrtka iz Zagreba osnovana 1990. godine  Zapošljava 30ak djelatnika  22 godine iskustva u bankarstvu i informatici  Usluge razvoja i uvođenja informatičkih rješenja uz primjenu suvremenih informacijskih tehnologija  Usluge prilagodbe i integracije postojećih informatičkih rješenja  Usluge poslovne analize i poslovnih konzultacija

All rights reserved. Copyright © 2013 Etna d.o.o. | www.etna.hr 16.6.2013. 21:33 3 - Uvod

 Threads are bad? Ne nužno, ali apstrakcija može biti korisna… tu dolazi Akka  Akka je middleware koji omogućuje izgradnju visoko konkurentnih i distribuiranih event-driven aplikacija koje su otporne na greške (eng. fault tolerant )  Komunikacijski model se bazira na asinkronoj razmjeni poruka između dijelova sustava  Omogućuje konkurentnost bez dijeljenog promjenjivog stanja i zaključavanja resursa  Osnovni gradivni element u Akka-i je ACTOR  Location Transparent & Distributable by Design  Actor Model je definirao Carl Hewitt 1973, ali zasluge za popularizaciju ipak pripadaju Erlangu  Actori omogućuju  Jednostavnu apstrakciju konkurentnosti i paralelizma  Asinkroni, ne blokirajući i jako učinkovit event-driven programski model  Lightweight event-driven procese (cca 2.7M actora po GB Heap-a)

All rights reserved. Copyright © 2013 Etna d.o.o. | www.etna.hr 16.6.2013. 21:33 4 Akka – Actor

 Actor može biti alternativa za: Thread, Component, Listener , Service, Load balancer , EJB SB / MDB, …  Osnovne actor operacije  DEFINE  CREATE  SEND  BECOME  SUPERVISE

All rights reserved. Copyright © 2013 Etna d.o.o. | www.etna.hr 16.6.2013. 21:33 5 Akka – Remoting / Routing

 Remoting  Dvije vrste

 LOOKUP – Pristup actoru na udaljenom čvoru

 CREATE – Kreiranje actora na udaljenom čvoru

 Load balancing (routers)  Više implementacija: RoundRobinRouter, RandomRouter , BroadcastRouter, …

All rights reserved. Copyright © 2013 Etna d.o.o. | www.etna.hr 16.6.2013. 21:33 6 – Uvod 1

 Play je… baziran na asinkronom modelu koji je izgrađen povrh Akka Framework-a  Stateless  Non-Blocking IO  Play je… moderan  RESTful by default  Asset Compiler za CoffeeScript, LESS,…  WebSockets, Comet, …  JSON is a first class citizen  Play je… developer friendly  Promijeni kod i refresh -aj browser  Integrirana konzola i build alati ( powered by sbt )  Type safety  Ugrađeni testni alati  Podrška za Eclipse i IntelliJ IDEA

All rights reserved. Copyright © 2013 Etna d.o.o. | www.etna.hr 16.6.2013. 21:33 7 Play Framework – Uvod 2

 Play je… high-productivity Java Web Framework  Inspiriran s , , …  Play je… full-stack platforma  Integriran compiler, embedded server, template engine , Akka, …  Play nije… Java EE  Nije baziran na Servlet API-ju  Designed by Web Developers for Web Developers  Play doesn’t fight the HTTP or the browser

All rights reserved. Copyright © 2013 Etna d.o.o. | www.etna.hr 16.6.2013. 21:33 8 Play Framework – Hello World!

All rights reserved. Copyright © 2013 Etna d.o.o. | www.etna.hr 16.6.2013. 21:33 9 Scala – Uvod 1

 Nastala 2003. na EPFL u Lausanni (Švicarska) – Martin Odersky Though my tip though for the long term  Originalno zamišljena da se izvršava na JVM-u i CLR-u replacement of javac is Scala. I'm very  Hibrid objektno orijentiranog i funkcijskog jezika impressed with it! I can honestly say if someone If I were Statički to pick jezik a language to use on had shown me the Programming in Scala book the JVM today, other than Java, it  Bolji kôd zbog compile-time provjera by Martin Odersky, Lex Spoon & Bill Venners would be Scala. back in 2003 I'd probably have never created  Bolje performanse od dinamičkih jezika (Groovy, Ruby , …) Groovy. -- JamesKompatibilan Gosling, creator s Javom of Java  Kompajlira se u Java bytecode -- James Strachan, creator of Groovy  Konzican i elegantan kôd  2-3x manje kôda u odnosu na Javu  „Bolja Java” ?

All rights reserved. Copyright © 2013 Etna d.o.o. | www.etna.hr 16.6.2013. 21:33 10 Scala – Uvod 2

 Scala popravlja brojne Java „greške”  Sve je objekt  Type inference  val country = new Country („HR”)  Primjena koncepata iz funkcijskih jezika  Kompaktna  Nema potrebe za getterima, setterima, equals(), hashCode (), …  Scala povećava produktivnost programera  Manje linija kôda (LOC)  Izgleda kao dinamički jezik, a istovremeno je 100% statički  Omogućava upotrebu novih (efikasnijih) idioma i načina programiranja  Bolja čitljivost (podložno polemikama)

All rights reserved. Copyright © 2013 Etna d.o.o. | www.etna.hr 16.6.2013. 21:33 11 Enterprise Scala Adoption Tips 1

 Books to read  Scala for the Impatient, Programming in Scala, Beginning Scala , Atomic Scala  Akka in Action, Akka Concurrency  Play for Scala, Play for Java  Twitter users to follow: @odersky, @viktorklang, @jboner , @_JamesWard, @jsuereth, @rit, @ScalaIDE, @djspiewak, @milessabin, @typesafe, @hseeberger , @ jamie_allen, @psnively, @StefanZeiger, @rolandkuhn, @etorreborre, @jroper, @honzam399, …

 Blogs to read http://letitcrash.com/ http://www.cakesolutions.net/teamblogs http://www.jamesward.com/ http://blog.evilmonkeylabs.com/ http://jsuereth.com/archive.html http://debasishg.blogspot.com/ http://typesafe.com/blog

Dio materijala preuzet s http://typesafe.com/blog/enterprise -scala-adoption-roadmap-55683 All rights reserved. Copyright © 2013 Etna d.o.o. | www.etna.hr 16.6.2013. 21:33 12 Scala Frameworks

 REST  Spray.io – http://spray.io  Play2 Mini - https://github.com/typesafehub/play2-mini  Socko – http://sockoweb.org /  Unfiltered – http://unfiltered.databinder.net/Unfiltered.html  Data Access  Slick – http://slick.typesafe.com  Anorm – http://www.playframework.com/documentation/2.1.1/ScalaAnorm  Web Framework  Scalatra – http://www.scalatra.org  – http://liftweb.net/  Remote Procedure Call  Finagle – http://twitter.github.io/finagle /  Build Tool  sbt – http://www.scala-sbt.org/

All rights reserved. Copyright © 2013 Etna d.o.o. | www.etna.hr 16.6.2013. 21:33 13

 Sustavtav zza nadzor poslovnih procesa u informacijskom sustavu  Omogućuje bolji pregled poslovnog procesa

Što je BALP?  Na koji način se to ostvaruje?  Prikupljanjem poslovnih događaja (eng. event ) u stvarnom vremenu  Prikazom podataka u stvarnom vremenu (eng. real -time )  Kontrolna ploča (eng. dashboard )

 KPI – Ključni pokazatelji uspješnosti (eng. key performance indicator )  Izradom dinamičkih statističkih izvještaja  PDF  XLS  Reakcijom na predefinirane poslovne događaje  Slanje dodatnih obavijesti  Pokretanje dodatnih akcija

All rights reserved. Copyright © 2013 Etna d.o.o. | www.etna.hr 16.6.2013. 21:33 14

 Povećanje profitabilnosti  Real -time uvid u operativne poslove  Poboljšanje operativne efikasnosti Zašto BALP?  Dinamički odgovor na poslovne događaje  Povećanje zadovoljstva korisnika  Proaktivne obavijesti na poslovne događaje  Pristup relevantnim podacima za rješenje problema  Povećanje produktivnosti  Nadzor ukupne produktivnosti  Nadzor produktivnosti pojedinog zaposlenika  Prepoznavanje visoko produktivnih zaposlenika  Kontrolna ploča  Radije pogledajte ŠTO SE DOGAĐA nego pročitajte ŠTO SE DOGODILO

All rights reserved. Copyright © 2013 Etna d.o.o. | www.etna.hr 16.6.2013. 21:33 15 Arhitektura sustava 1

push event

HIBIS push event

dashboard event event (web browser ) Moneta

event event pull event

event HYPOnet external systems save event storage

vent generators (apps) BALP

All rights reserved. Copyright © 2013 Etna d.o.o. | www.etna.hr 16.6.2013. 21:33 16 Arhitektura 2

Dashboard

push event

Interface Storage

event save event

Rule engine load data

Batch server Reporting engine

All rights reserved. Copyright © 2013 Etna d.o.o. | www.etna.hr pull events 16.6.2013. 21:33 17 Integracija s drugim sustavima PROTOKOLI

 Web servis  REST/HTTP  TCP/IP*  File  Email  MQ  Twitter  AMQP – Advanced Message Queueing Protocol  …

All rights reserved. Copyright © 2013 Etna d.o.o. | www.etna.hr 16.6.2013. 21:33 18 Primjeri poruka

Referent Naziv aktivnosti Vrijeme početka aktivnosti

UserActivity( Matija Capan,Provjera pe čata i potpisa ,1364984874695 )

Activity ( EventHead( 192.168.200.10#1#4bff6492-f025-4aad-940e-91dd7ef53dae, Jedinstveni identifikator aktivnosti null, Jedinstveni identifikator krovne aktivnosti [opcionalno Ana Ani ć, Referent Unos HUB1 naloga , Naziv aktivnosti null Naziv krovne aktivnosti [opcionalno] ), 1364984874769 , Vrijeme početka aktivnosti 34928 , Trajanje aktivnosti null, Opis [opcionalno] null, Organizacijska jedinica [opcionalno] null, Šifra valute [opcionalno] null, Iznos [opcionalno] null Šifra transakcije [opcionalno] ) All rights reserved. Copyright © 2013 Etna d.o.o. | www.etna.hr 16.6.2013. 21:33 19 Životni ciklus poslovnog događaja 1 PRIMJER

 Referent „Hrvoje Horvat” u aplikaciji otvara ekran za unos HUB3 naloga  „Aplikacija” automatski šalje poruku UserActivity prema BALP serveru

 UserActivity(Hrvoje Horvat, „Unos HUB3 naloga”, 1364984874695 )  Ovaj podatak je unutar kratkog vremena vidljiv preko BALP web aplikacije

All rights reserved. Copyright © 2013 Etna d.o.o. | www.etna.hr 16.6.2013. 21:33 20 Životni ciklus poslovnog događaja 2 PRIMJER

 Referent „Hrvoje Horvat” nakon određenog vremena završi s unosom HUB3 naloga  „Aplikacija” automatski šalje poruku Activity prema BALP serveru s vremenom koliko je referentu bilo potrebno za unos naloga

 Activity (Hrvoje Horvat, „Unos HUB3 naloga”, 1364984874695 , 34928) ***pojednostavljeni format  Ovaj podatak utječe na podatke koji se prikazuju u statistici platnih naloga (HUB1, HUB3)  Ovaj podatak utječe na grafikon „Raspodjela naloga”

All rights reserved. Copyright © 2013 Etna d.o.o. | www.etna.hr 16.6.2013. 21:33 21

DEMO

16.6.2 16.6.2 23 Powered by

All rights reserved. Copyright © 2013 Etna d.o.o. | www.etna.hr 16.6.2013. 21:33 24

All rights reserved. Copyright © 2013 Etna d.o.o. | www.etna.hr 16.6.2013. 21:33 25

Hvala na pozornosti!