SlideShare a Scribd company logo
1 of 114
How and why we evolved a
legacy java application to scala
And we are still alive !
24/06/2015
I am
@karesti
The Software Dream
Software is more like Madonna
FACTS
Web applications get old (very) fast
Continuous small refactoring does
not avoid long-term technical debt
From strach Refactoring
Continuous Dilemma
2014
French Job Search Website
Launched in 2000
2008
Problems in 2014
High Cost Adding New Functionalities
High Technical Debt
Coupled Architecture
S O A
Spaghettis Oriented Architecture
Lack of real KPI
In a 100% Linux Environment
Monolithic Architecture
DAO
ServiceBatch
MVC
RDMS
DAO
ServiceBatch
MVC
RDMS
Anonymous User
Job Search, Detail, Newsletter
DAO
ServiceBatch
MVC
RDMS
Anonymous User
Job Search, Detail, Newsletter
Jobs
DAO
ServiceBatch
MVC
RDMS
Anonymous User
Job Search, Detail, Newsletter
Jobs
Jobs
External
App
DAO
ServiceBatch
MVC
RDMS
Anonymous User
Job Search, Detail, Newsletter
Jobs
Jobs
External
App
Connected User Board
CV, Mail Alert, Newsletter
DAO
ServiceBatch
MVC
RDMS
Anonymous User
Job Search, Detail, Newsletter
Jobs
Jobs
External
App
Data
Mailing
App
Connected User Board
CV, Mail Alert, Newsletter
DAO
ServiceBatch
MVC
RDMS
Anonymous User
Job Search, Detail, Newsletter
Jobs
Jobs
External
App
Data
Mailing
App
External
App
Connected User Board
CV, Mail Alert, Newsletter
DAO
ServiceBatch
MVC
RDMS
Anonymous User
Job Search, Detail, Newsletter
Jobs
Jobs
External
App
Data
Mailing
App
External
App
Mobile
Version
Connected User Board
CV, Mail Alert, Newsletter
DAO
ServiceBatch
MVC
RDMS
Anonymous User
Job Search, Detail, Newsletter
Jobs
Jobs
External
App
Data
Mailing
App
External
App
Mobile
Version
Connected User Board
CV, Mail Alert, Newsletter
DAO
ServiceBatch
MVC
RDMS
External
App
Connected User Board
CV, Mail Alert, Newsletter
Anonymous User
Job Search, Detail, Newsletter
Non connected
Alerts, Newsletter
Jobs
Jobs
External
App
Data
Mailing
App
Mobile
Version
Partners
How do we fix this
Target
Where do we start
DAO
ServiceBatch
MVC
RDMS
External
App
Jobs
Jobs
External
App
Data
Mailing
App
Mobile
Version
Partners
Connected User Board
CV, Mail Alert, Newsletter
Anonymous User
Job Search, Detail, Newsletter
Non connected
Alerts, Newsletter
Mars – September 2014
User Board
DAO
ServiceBatch
MVC
RDMS
Data
Mailing
App
User Board
User Board
Front-End
REST API
Mongo
DAO
ServiceBatch
MVC
RDMS
Data
Mailing
App
Where do we start ?
User Board
Front-End
REST API
Mongo
Partners
DAO
ServiceBatch
MVC
RDMS
Data
Mailing
App
Where do we start ?
User Board
Front-End
REST API
Mongo
Partners
DAO
ServiceBatch
MVC
RDMS
Data
Mailing
App
Where do we start ?
User Board
Front-End
REST API
Mongo
Partners
DAO
ServiceBatch
MVC
RDMS
Data
Mailing
App
Where do we start ?
User Board
Front-End
REST API
Mongo
Partners
External
App
DAO
ServiceBatch
MVC
RDMS
Data
Mailing
App
Where do we start ?
User Board
Front-End
REST API
Mongo
Partners
External
App
DAO
ServiceBatch
MVC
RDMS
Data
Mailing
App
Where do we start ?
User Board
Front-End
REST API
Mongo
Partners
External
App
Data
Batch
API First
Macro
Operation
Focus on technical choices
Main Language
• Growing and Solid Community
• Powerful Frameworks and Utilities
• JVM
Backend
• REST oriented
• Template Type Safe
• Hot Reloading
• “Simplifies” Scala
• Reactive programming
Batch System
• Actors
• Scale Up – concurrency
• Scale Out – remoting
• Fault Tolerance
Front End
• Sass built in with play
• AngularJS, popular, community, experience
• Foundation, solid and easy CSS framework
Database
• Flexible schema
• Document oriented makes sense with CVs
• Low transactions
• Application code rules the database schema
– Already the case with SQL Server
• No DBA*
– We rule the database as dev
Migrating Data Challenge
Status
• +10 years of candidate data
• Crucial for business
• Cannot fail  really, C A N O T F A I L !!
Strategy
• Start migration as soon as possible
– Started in April – Mai
• Migrate data incrementally
• Verify as much as possible
• Legacy ID
Akka Actors
• One actor per data
• Concurrence execution when possible
• Handle updates for the crucial moment =>
between SQL Server Stop and MongoDB Up
Madrid MUG
This section is specially dedicated to
the Madrid MUG Members
SQL Model
• 8 tables for the user profile
• Complex joins
• SQLServer => Lost in a Linux World
• Devs => Backup, dump …
(Very) Simplified Schema
MongoDB Model
• 1 document / profile
• Object <> Document
• Simplified model
– Option Scala
• Using Reactive Mongo Driver
• Using Jongo in Java
Mongo Collections
Model choices
• ++ reads / -- writes
• Stable Reference data *
– Sometimes sectors can change…
• Low and non risky transactions
– Ex : user deletes account
Testing
Unit Testing
• Using Specs framework
• Using Mockito
– Not as useful as in Java 
• Some tests are not necessary
– Constructors, Builders … Scala Type Safe and
Immutability
Testing the Front END
• Unit testing JS with Karma 
• Selenium 
– Very fragile tests
– Proxy Nightmare
– Endless navigator problems
– Just vital tests after production
API Tests are CRUCIAL
Testing the REST API
• No Mocking MongoDB
• Using Embedded Mongo
• Start and Stop Mongo once for every test
– DRY data is a hard part
https://github.com/flapdoodle-oss/de.flapdoodle.embed.mongo
Always thinking on KPI
Build Measure Learn
SCALA USER GROUP
This section is specially dedicated to the Madrid Scala User Group.
Thank you to Nouhoum Traoré who spoke about it at scala.io in Paris
Front-end
● Client API
● No DB Access
● Mostly Javascript Code
Front-end
● 9 % Scala
● 26.2 % CSS
● 64.8 % JS
Le frontend : asset pipeline
pipelineStages := Seq(rjs, digest, gzip)
Le frontend : asset pipeline
curl http://keljob.com/assets/js/e454f1013e30b783818c8efaf3a8e3a5-startup.js
HTTP/1.1 200 OK
Cache-Control: public, max-age=31536000
Content-Length: 171997
Content-Type: application/javascript; charset=utf-8
Date: Tue, 14 Oct 2014 22:39:23 GMT
ETag: e454f1013e30b783818c8efaf3a8e3a5
Last-Modified: Wed, 08 Oct 2014 12:35:10 GMT
Compressing content
import play.api.mvc._
import play.filters.gzip.GzipFilter
object Global extends WithFilters(new GzipFilter()) {
...
}
API : links on JSON
implicit val AccountWrites = new Writes[Account] {
override def writes(account: Account): JsValue =
Json.obj(
"id" -> account.id,
"email" -> account.email,
"creationDate" -> account.creationDate.toString(),
"links" -> Json.obj(
"self" -> routes.AccountDetailCtrl.get(account.id).url,
"alerts" -> routes.JobAlertDetailCtrl.getAlertsOf(account.id).url,
"cv" -> routes.CvDetailController.getCvOf(account.id).url
)
)
}
Single responsibility Object :
Controllers
@Singleton
class AccountValidationController @Inject() (
accountValidator: AccountValidator) extends Controller {
def validateAccount(token: String) = Action.async { request =>
accountValidator.validate(token).map {
case Some(account) => Ok(Json.toJson(account))
case _ => UnprocessableEntity(Json.toJson(InvalidToken))
}
}
Single responsibility Object :
Services
class AccountAuthenticator @Inject() (...)
class AccountValidator @Inject() (...)
class AccountCreator @Inject() (...)
class AccountSettingsUpdater @Inject() (...)
Single Responsibility Object : Actors
import akka.actor._
...
class CvExporter(...) extends Actor {
def commonBehavior(): Receive = ???
def deleteBehavior(): Receive = ???
def updateBehavior(): Receive = ???
def receive = commonBehavior orElse updateBehavior orElse deleteBehavior
}
Error Handling in Services
sealed trait NewsletterError
case object InvalidNewsletterActivationToken extends NewsletterError
case object NewsletterUpdateError extends NewsletterError
class NewsletterActivator @Inject() (...) {
def activate(code: String): Future[Either[NewsletterError, Boolean]] = ???
}
Error handling in controllers
class NewsletterActivationController (
newsletterActivor: NewsletterActivator) extends Controller {
def activate(token: String) = Action.async { request =>
newsletterActivor.activate(token).map {
…
case InvalidNewsletterActivationToken => ???
case NewsletterUpdateError => ???
…
}.recoverApiError("Oops !!!")
}
}
Error handling in controllers
implicit class ApiErrorRecover(result: Future[Result]) {
def recoverApiError(message: String) =
result recover {
case NonFatal(e) => InternalServerError(
Json.toJson(SimpleError(message))
)
}
}
The Team
The (original) Team
• 3 Developers and a Product Owner
– Legacy + Backend + Scala
– Full-Stack
– Java + Backend + MongoDB
• From 5-10 years of experience
• People who are able to leave their confortable
coding zone
• Want to communicate
Project Management
Method
SCRUM
KANBAN
Programing MF
(SOME) DIFFICULTIES
DEFINING THE INITIAL
SCOPE
MVP
MVP
Maximal Viable Product
DEALING WITH NO
TECHNICAL PEOPLE
Demo
We have a situation …
Y
FIF Pattern
Fancy Interface First
SCALA
Warning ! This section might contain some trolls
Personal journey to Scala
SIMPLE ??? Build Tool
"de.flapdoodle.embed" %
"de.flapdoodle.embed.mongo" % "1.46.0”
"org.mongodb" %% "casbah" % "2.5.0"
Reactive Futures …
Implicits
accountFuture.filter(_.isDefined).map(_.get)
Cake Pattern
DI Framework vs Cake Pattern
@Singleton
class LoginController @Inject()
(accountAuthenticator: AccountAuthenticator)
extends Controller
trait LoginController { this: Controller with
UserServiceComponent =>
object LoginController extends LoginController with
Controller with MongoDbUserServiceComponent
Loving Case Class And Constructors
case class Account(
id: Option[BSONObjectID] = None,
email: String,
creationDate: DateTime,
optin: Boolean = false,
optoutScenario: Option[DateTime] = None,
source: String = Account.DEFAULT_SOURCE,
deletionDate: Option[DateTime] = None)
Account(“chucknorris@gmail.com”,
creationDate = creationDate,
optin = true)
After 2-3 months as happy as being at
Machu Picchu
Loving both … 
September – December 2014
Once in production
– Creating accounts more easily
– Parsing CV on upload
– Can apply with the CV
– Follow applications
• And other awesome stuff built fast and
furiously !
January – March 2015
Search and Relooking
Relooking and positioning
BatchData
Mailing
App
2015
Web Front-
End
User REST
API
Mongo
Partners
in WIP
External
App Data
Search REST
API
Elastic
Search
Batch
SEO
Most Important Challenge
Challenge 2 : Performance
• Gatling
– Play! 
• Comparing performance
How and why we evolved a legacy Java web application to Scala... and we are still alive!
How and why we evolved a legacy Java web application to Scala... and we are still alive!

More Related Content

What's hot

Alfresco DevCon 2019 Performance Tools of the Trade
Alfresco DevCon 2019   Performance Tools of the TradeAlfresco DevCon 2019   Performance Tools of the Trade
Alfresco DevCon 2019 Performance Tools of the TradeLuis Colorado
 
Projects In Laravel : Learn Laravel Building 10 Projects
Projects In Laravel : Learn Laravel Building 10 ProjectsProjects In Laravel : Learn Laravel Building 10 Projects
Projects In Laravel : Learn Laravel Building 10 ProjectsSam Dias
 
Migrating a modern spring web application to serverless
Migrating a modern spring web application to serverlessMigrating a modern spring web application to serverless
Migrating a modern spring web application to serverlessJeroen Sterken
 
Laravel tutorial
Laravel tutorialLaravel tutorial
Laravel tutorialBroker IG
 
Write Once, Run Everywhere - Ember.js Munich
Write Once, Run Everywhere - Ember.js MunichWrite Once, Run Everywhere - Ember.js Munich
Write Once, Run Everywhere - Ember.js MunichMike North
 
Grails At Linked
Grails At LinkedGrails At Linked
Grails At LinkedLinkedIn
 
FITC - Exploring Art-Directed Responsive Images
FITC - Exploring Art-Directed Responsive ImagesFITC - Exploring Art-Directed Responsive Images
FITC - Exploring Art-Directed Responsive ImagesRami Sayar
 
Introduction to JavaScript for APEX Developers - Module 2: Adding JavaScript ...
Introduction to JavaScript for APEX Developers - Module 2: Adding JavaScript ...Introduction to JavaScript for APEX Developers - Module 2: Adding JavaScript ...
Introduction to JavaScript for APEX Developers - Module 2: Adding JavaScript ...Daniel McGhan
 
Laravel development (Laravel History, Environment Setup & Laravel Installatio...
Laravel development (Laravel History, Environment Setup & Laravel Installatio...Laravel development (Laravel History, Environment Setup & Laravel Installatio...
Laravel development (Laravel History, Environment Setup & Laravel Installatio...Dilouar Hossain
 
Grails patterns and practices
Grails patterns and practicesGrails patterns and practices
Grails patterns and practicespaulbowler
 
webcomponents (Jfokus 2015)
webcomponents (Jfokus 2015)webcomponents (Jfokus 2015)
webcomponents (Jfokus 2015)Hendrik Ebbers
 
IT Talk «Microservices & Serverless Architectures», Alexander Chichenin (Solu...
IT Talk «Microservices & Serverless Architectures», Alexander Chichenin (Solu...IT Talk «Microservices & Serverless Architectures», Alexander Chichenin (Solu...
IT Talk «Microservices & Serverless Architectures», Alexander Chichenin (Solu...DataArt
 
ASP .Net Core SPA Templates
ASP .Net Core SPA TemplatesASP .Net Core SPA Templates
ASP .Net Core SPA TemplatesEamonn Boyle
 
Laravel - The PHP Framework for Web Artisans
Laravel - The PHP Framework for Web ArtisansLaravel - The PHP Framework for Web Artisans
Laravel - The PHP Framework for Web ArtisansWindzoon Technologies
 
A introduction to Laravel framework
A introduction to Laravel frameworkA introduction to Laravel framework
A introduction to Laravel frameworkPhu Luong Trong
 
Quick and Easy Development with Node.js and Couchbase Server
Quick and Easy Development with Node.js and Couchbase ServerQuick and Easy Development with Node.js and Couchbase Server
Quick and Easy Development with Node.js and Couchbase ServerNic Raboy
 

What's hot (20)

Laravel Eloquent ORM
Laravel Eloquent ORMLaravel Eloquent ORM
Laravel Eloquent ORM
 
Alfresco DevCon 2019 Performance Tools of the Trade
Alfresco DevCon 2019   Performance Tools of the TradeAlfresco DevCon 2019   Performance Tools of the Trade
Alfresco DevCon 2019 Performance Tools of the Trade
 
Projects In Laravel : Learn Laravel Building 10 Projects
Projects In Laravel : Learn Laravel Building 10 ProjectsProjects In Laravel : Learn Laravel Building 10 Projects
Projects In Laravel : Learn Laravel Building 10 Projects
 
Migrating a modern spring web application to serverless
Migrating a modern spring web application to serverlessMigrating a modern spring web application to serverless
Migrating a modern spring web application to serverless
 
Laravel tutorial
Laravel tutorialLaravel tutorial
Laravel tutorial
 
React js
React jsReact js
React js
 
Serverless Apps with AWS Step Functions
Serverless Apps with AWS Step FunctionsServerless Apps with AWS Step Functions
Serverless Apps with AWS Step Functions
 
Write Once, Run Everywhere - Ember.js Munich
Write Once, Run Everywhere - Ember.js MunichWrite Once, Run Everywhere - Ember.js Munich
Write Once, Run Everywhere - Ember.js Munich
 
Grails At Linked
Grails At LinkedGrails At Linked
Grails At Linked
 
FITC - Exploring Art-Directed Responsive Images
FITC - Exploring Art-Directed Responsive ImagesFITC - Exploring Art-Directed Responsive Images
FITC - Exploring Art-Directed Responsive Images
 
Introduction to JavaScript for APEX Developers - Module 2: Adding JavaScript ...
Introduction to JavaScript for APEX Developers - Module 2: Adding JavaScript ...Introduction to JavaScript for APEX Developers - Module 2: Adding JavaScript ...
Introduction to JavaScript for APEX Developers - Module 2: Adding JavaScript ...
 
Laravel development (Laravel History, Environment Setup & Laravel Installatio...
Laravel development (Laravel History, Environment Setup & Laravel Installatio...Laravel development (Laravel History, Environment Setup & Laravel Installatio...
Laravel development (Laravel History, Environment Setup & Laravel Installatio...
 
Grails patterns and practices
Grails patterns and practicesGrails patterns and practices
Grails patterns and practices
 
webcomponents (Jfokus 2015)
webcomponents (Jfokus 2015)webcomponents (Jfokus 2015)
webcomponents (Jfokus 2015)
 
IT Talk «Microservices & Serverless Architectures», Alexander Chichenin (Solu...
IT Talk «Microservices & Serverless Architectures», Alexander Chichenin (Solu...IT Talk «Microservices & Serverless Architectures», Alexander Chichenin (Solu...
IT Talk «Microservices & Serverless Architectures», Alexander Chichenin (Solu...
 
ASP .Net Core SPA Templates
ASP .Net Core SPA TemplatesASP .Net Core SPA Templates
ASP .Net Core SPA Templates
 
Laravel - The PHP Framework for Web Artisans
Laravel - The PHP Framework for Web ArtisansLaravel - The PHP Framework for Web Artisans
Laravel - The PHP Framework for Web Artisans
 
A introduction to Laravel framework
A introduction to Laravel frameworkA introduction to Laravel framework
A introduction to Laravel framework
 
Quick and Easy Development with Node.js and Couchbase Server
Quick and Easy Development with Node.js and Couchbase ServerQuick and Easy Development with Node.js and Couchbase Server
Quick and Easy Development with Node.js and Couchbase Server
 
Why Laravel?
Why Laravel?Why Laravel?
Why Laravel?
 

Similar to How and why we evolved a legacy Java web application to Scala... and we are still alive!

20211028 ADDO Adapting to Covid with Serverless Craeg Strong Ariel Partners
20211028 ADDO Adapting to Covid with Serverless Craeg Strong Ariel Partners20211028 ADDO Adapting to Covid with Serverless Craeg Strong Ariel Partners
20211028 ADDO Adapting to Covid with Serverless Craeg Strong Ariel PartnersCraeg Strong
 
20211202 NADOG Adapting to Covid with Serverless Craeg Strong Ariel Partners
20211202 NADOG Adapting to Covid with Serverless Craeg Strong Ariel Partners20211202 NADOG Adapting to Covid with Serverless Craeg Strong Ariel Partners
20211202 NADOG Adapting to Covid with Serverless Craeg Strong Ariel PartnersCraeg Strong
 
20211202 North America DevOps Group NADOG Adapting to Covid With Serverless C...
20211202 North America DevOps Group NADOG Adapting to Covid With Serverless C...20211202 North America DevOps Group NADOG Adapting to Covid With Serverless C...
20211202 North America DevOps Group NADOG Adapting to Covid With Serverless C...Craeg Strong
 
CV_LamHoangQuocViet
CV_LamHoangQuocVietCV_LamHoangQuocViet
CV_LamHoangQuocVietVi?t L
 
Scala, ECS, Docker: Delayed Execution @Coursera
Scala, ECS, Docker: Delayed Execution @CourseraScala, ECS, Docker: Delayed Execution @Coursera
Scala, ECS, Docker: Delayed Execution @CourseraC4Media
 
RAHUL_Updated( (2)
RAHUL_Updated( (2)RAHUL_Updated( (2)
RAHUL_Updated( (2)Rahul Singh
 
Serverless in-action
Serverless in-actionServerless in-action
Serverless in-actionAssaf Gannon
 
Full Stack Development With Node.Js And NoSQL (Nic Raboy & Arun Gupta)
Full Stack Development With Node.Js And NoSQL (Nic Raboy & Arun Gupta)Full Stack Development With Node.Js And NoSQL (Nic Raboy & Arun Gupta)
Full Stack Development With Node.Js And NoSQL (Nic Raboy & Arun Gupta)Red Hat Developers
 
Single Page Applications: Your Browser is the OS!
Single Page Applications: Your Browser is the OS!Single Page Applications: Your Browser is the OS!
Single Page Applications: Your Browser is the OS!Jeremy Likness
 
StrongLoop Overview
StrongLoop OverviewStrongLoop Overview
StrongLoop OverviewShubhra Kar
 
Agile integration workshop Seattle
Agile integration workshop SeattleAgile integration workshop Seattle
Agile integration workshop SeattleJudy Breedlove
 
How to Build Single Page HTML5 Apps that Scale
How to Build Single Page HTML5 Apps that ScaleHow to Build Single Page HTML5 Apps that Scale
How to Build Single Page HTML5 Apps that ScalePhil Leggetter
 
Azure Functions Real World Examples
Azure Functions Real World Examples Azure Functions Real World Examples
Azure Functions Real World Examples Yochay Kiriaty
 
The future of web development write once, run everywhere with angular js an...
The future of web development   write once, run everywhere with angular js an...The future of web development   write once, run everywhere with angular js an...
The future of web development write once, run everywhere with angular js an...Mark Leusink
 
The future of web development write once, run everywhere with angular.js and ...
The future of web development write once, run everywhere with angular.js and ...The future of web development write once, run everywhere with angular.js and ...
The future of web development write once, run everywhere with angular.js and ...Mark Roden
 
Reactive application using meteor
Reactive application using meteorReactive application using meteor
Reactive application using meteorSapna Upreti
 
Sherlock Homepage - A detective story about running large web services - NDC ...
Sherlock Homepage - A detective story about running large web services - NDC ...Sherlock Homepage - A detective story about running large web services - NDC ...
Sherlock Homepage - A detective story about running large web services - NDC ...Maarten Balliauw
 
Sherlock Homepage (Maarten Balliauw)
Sherlock Homepage (Maarten Balliauw)Sherlock Homepage (Maarten Balliauw)
Sherlock Homepage (Maarten Balliauw)Visug
 
Sherlock Homepage - A detective story about running large web services (VISUG...
Sherlock Homepage - A detective story about running large web services (VISUG...Sherlock Homepage - A detective story about running large web services (VISUG...
Sherlock Homepage - A detective story about running large web services (VISUG...Maarten Balliauw
 
Angular (v2 and up) - Morning to understand - Linagora
Angular (v2 and up) - Morning to understand - LinagoraAngular (v2 and up) - Morning to understand - Linagora
Angular (v2 and up) - Morning to understand - LinagoraLINAGORA
 

Similar to How and why we evolved a legacy Java web application to Scala... and we are still alive! (20)

20211028 ADDO Adapting to Covid with Serverless Craeg Strong Ariel Partners
20211028 ADDO Adapting to Covid with Serverless Craeg Strong Ariel Partners20211028 ADDO Adapting to Covid with Serverless Craeg Strong Ariel Partners
20211028 ADDO Adapting to Covid with Serverless Craeg Strong Ariel Partners
 
20211202 NADOG Adapting to Covid with Serverless Craeg Strong Ariel Partners
20211202 NADOG Adapting to Covid with Serverless Craeg Strong Ariel Partners20211202 NADOG Adapting to Covid with Serverless Craeg Strong Ariel Partners
20211202 NADOG Adapting to Covid with Serverless Craeg Strong Ariel Partners
 
20211202 North America DevOps Group NADOG Adapting to Covid With Serverless C...
20211202 North America DevOps Group NADOG Adapting to Covid With Serverless C...20211202 North America DevOps Group NADOG Adapting to Covid With Serverless C...
20211202 North America DevOps Group NADOG Adapting to Covid With Serverless C...
 
CV_LamHoangQuocViet
CV_LamHoangQuocVietCV_LamHoangQuocViet
CV_LamHoangQuocViet
 
Scala, ECS, Docker: Delayed Execution @Coursera
Scala, ECS, Docker: Delayed Execution @CourseraScala, ECS, Docker: Delayed Execution @Coursera
Scala, ECS, Docker: Delayed Execution @Coursera
 
RAHUL_Updated( (2)
RAHUL_Updated( (2)RAHUL_Updated( (2)
RAHUL_Updated( (2)
 
Serverless in-action
Serverless in-actionServerless in-action
Serverless in-action
 
Full Stack Development With Node.Js And NoSQL (Nic Raboy & Arun Gupta)
Full Stack Development With Node.Js And NoSQL (Nic Raboy & Arun Gupta)Full Stack Development With Node.Js And NoSQL (Nic Raboy & Arun Gupta)
Full Stack Development With Node.Js And NoSQL (Nic Raboy & Arun Gupta)
 
Single Page Applications: Your Browser is the OS!
Single Page Applications: Your Browser is the OS!Single Page Applications: Your Browser is the OS!
Single Page Applications: Your Browser is the OS!
 
StrongLoop Overview
StrongLoop OverviewStrongLoop Overview
StrongLoop Overview
 
Agile integration workshop Seattle
Agile integration workshop SeattleAgile integration workshop Seattle
Agile integration workshop Seattle
 
How to Build Single Page HTML5 Apps that Scale
How to Build Single Page HTML5 Apps that ScaleHow to Build Single Page HTML5 Apps that Scale
How to Build Single Page HTML5 Apps that Scale
 
Azure Functions Real World Examples
Azure Functions Real World Examples Azure Functions Real World Examples
Azure Functions Real World Examples
 
The future of web development write once, run everywhere with angular js an...
The future of web development   write once, run everywhere with angular js an...The future of web development   write once, run everywhere with angular js an...
The future of web development write once, run everywhere with angular js an...
 
The future of web development write once, run everywhere with angular.js and ...
The future of web development write once, run everywhere with angular.js and ...The future of web development write once, run everywhere with angular.js and ...
The future of web development write once, run everywhere with angular.js and ...
 
Reactive application using meteor
Reactive application using meteorReactive application using meteor
Reactive application using meteor
 
Sherlock Homepage - A detective story about running large web services - NDC ...
Sherlock Homepage - A detective story about running large web services - NDC ...Sherlock Homepage - A detective story about running large web services - NDC ...
Sherlock Homepage - A detective story about running large web services - NDC ...
 
Sherlock Homepage (Maarten Balliauw)
Sherlock Homepage (Maarten Balliauw)Sherlock Homepage (Maarten Balliauw)
Sherlock Homepage (Maarten Balliauw)
 
Sherlock Homepage - A detective story about running large web services (VISUG...
Sherlock Homepage - A detective story about running large web services (VISUG...Sherlock Homepage - A detective story about running large web services (VISUG...
Sherlock Homepage - A detective story about running large web services (VISUG...
 
Angular (v2 and up) - Morning to understand - Linagora
Angular (v2 and up) - Morning to understand - LinagoraAngular (v2 and up) - Morning to understand - Linagora
Angular (v2 and up) - Morning to understand - Linagora
 

More from Katia Aresti

Protocol Buffer Fantásticos y donde encontrarlos
Protocol Buffer Fantásticos y donde encontrarlosProtocol Buffer Fantásticos y donde encontrarlos
Protocol Buffer Fantásticos y donde encontrarlosKatia Aresti
 
Quand un lock a besoin d'être distribué
Quand un lock a besoin d'être distribuéQuand un lock a besoin d'être distribué
Quand un lock a besoin d'être distribuéKatia Aresti
 
Trivial Java Second
Trivial Java SecondTrivial Java Second
Trivial Java SecondKatia Aresti
 
Trivial Java Second
Trivial Java SecondTrivial Java Second
Trivial Java SecondKatia Aresti
 
Trivial java First
Trivial java FirstTrivial java First
Trivial java FirstKatia Aresti
 
Mongo db et java en pratique
Mongo db et java en pratiqueMongo db et java en pratique
Mongo db et java en pratiqueKatia Aresti
 

More from Katia Aresti (8)

Protocol Buffer Fantásticos y donde encontrarlos
Protocol Buffer Fantásticos y donde encontrarlosProtocol Buffer Fantásticos y donde encontrarlos
Protocol Buffer Fantásticos y donde encontrarlos
 
Quand un lock a besoin d'être distribué
Quand un lock a besoin d'être distribuéQuand un lock a besoin d'être distribué
Quand un lock a besoin d'être distribué
 
Mongo db devfestw
Mongo db devfestwMongo db devfestw
Mongo db devfestw
 
Jongo mongo sv
Jongo mongo svJongo mongo sv
Jongo mongo sv
 
Trivial Java Second
Trivial Java SecondTrivial Java Second
Trivial Java Second
 
Trivial Java Second
Trivial Java SecondTrivial Java Second
Trivial Java Second
 
Trivial java First
Trivial java FirstTrivial java First
Trivial java First
 
Mongo db et java en pratique
Mongo db et java en pratiqueMongo db et java en pratique
Mongo db et java en pratique
 

Recently uploaded

ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
A Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusA Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusZilliz
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingEdi Saputra
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdflior mazor
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024The Digital Insurer
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...apidays
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Zilliz
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...apidays
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsNanddeep Nachan
 

Recently uploaded (20)

ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
A Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusA Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source Milvus
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 

How and why we evolved a legacy Java web application to Scala... and we are still alive!

Editor's Notes

  1. Already rebuilt in 2008
  2. Every developer I’ve spoken about it has already passed by it
  3. Modulable Scalable REST oriented API First KPI
  4. Stratégie de migration des données. Comment minimiser le delta ! Offline ! Beaucoup tester car les erreurs sont difficiles à corriger des semaines après. Commencer le plus tôt possible. Minimiser l’adhérence à la base quand on communique avec des systèmes externes !
  5. Zéro accès à la DB : Flexibilité => séparation du contrat (JSON) et de l’implémentation + non duplication de la logique.
  6. Stats Github. Plus dynamique, feedback utilisateur….
  7. Easy
  8. Easy
  9. Trop facile !
  10. JSON généré, play reverse routing et hypermedia. Souligné que c’est une version simplifiée du JSON réel !
  11. Un mot sur la gestion des erreurs plus tard.
  12. Un mot sur la gestion des erreurs plus tard.
  13. Un mot sur la gestion des erreurs plus tard.
  14. Gérer les erreurs
  15. URI simple : pas grand chose à dire sur les routes. Facile de se conformer aux URI style REST. Pas mis les noms de package pour avoir de la place.
  16. We started using Kanban and Agile Zen as a Board
  17. Lack of testing, running to fast
  18. Every week demo ; after 3 weeks