SlideShare a Scribd company logo
1 of 67
Download to read offline
ARCHITECTING WELL-STRUCTURED JAVA
APPLICATIONS
Eduards Sizovs
@eduardsi
MOST APPS BEGIN LIFE SMALL AND NEAT.
TIME GOES BY...
HELLO. I AM YOUR ROTTING ENTERPRISE APP.
- RIGIDITY
- FRAGILITY
- IMMOBILITY
- VISCOSITY
- OPACITY
- NEEDLESS COMPLEXITY
- NEEDLESS REPITITION
SMELLING SYMPTOMS ->
HIBERNATE CORE V4.3.8.FINAL
JDK V1.7.0_51
A JDK CODE BASE IS DEEPLY INTERCONNECTED AT BOTH THE API AND THE
IMPLEMENTATION LEVELS, HAVING BEEN BUILT OVER MANY YEARS
PRIMARILY IN THE STYLE OF A MONOLITHIC SOFTWARE SYSTEM. WE’VE
SPENT CONSIDERABLE EFFORT ELIMINATING OR AT LEAST SIMPLIFYING AS
MANY API AND IMPLEMENTATION DEPENDENCES AS POSSIBLE, SO THAT
BOTH THE PLATFORM AND ITS IMPLEMENTATIONS CAN BE PRESENTED AS A
COHERENT SET OF INTERDEPENDENT MODULES, BUT SOME PARTICULARLY
THORNY CASES REMAIN.
(C) MARK REINHOLDS, CHIEF ARCHITECT OF THE JAVA PLATFORM
SPRING V4.1.6
PRINCIPLES.
PACKAGE IS THE FIRST-CLASS CITIZEN AND
KEY ELEMENT OF LOGICAL DESIGN.
TREAT PACKAGES AS A HIERARCHY EVEN IF
THEY’RE REPRESENTED FLAT.
io.shwitter.user
io.shwitter.user.registration
io.shwitter.user.profile
io.shwitter.timeline
 
io.shwitter.user (part of)
io.shwitter.user.registration
io.shwitter.user.profile
io.shwitter.timeline
 
io.shwitter.user
io.shwitter.user.registration (part of)
io.shwitter.user.profile
io.shwitter.timeline
 
io.shwitter.user
io.shwitter.user.registration
io.shwitter.user.profile (part of)
io.shwitter.timeline
 
io.shwitter.user
io.shwitter.user.registration
io.shwitter.user.profile
io.shwitter.timeline (part of)
 
USE PACKAGES TO GROUP FUNCTIONALLY-
RELATED ARTIFACTS. DO NOT GROUP
ARTIFACTS THAT DO THE SAME THING, BUT
ARE DIFFERENT BY NATURE.
io.shwitter.controller
io.shwitter.dao
io.shwitter.domain
io.shwitter.services
io.shwitter.exceptions
io.shwitter.controller
io.shwitter.dao
io.shwitter.domain
io.shwitter.services
io.shwitter.exceptions
UserController, TimelineController...
 
io.shwitter.controller
io.shwitter.dao
io.shwitter.domain
io.shwitter.services
io.shwitter.exceptions
UserDAO, TimelineDAO...
 
io.shwitter.controller
io.shwitter.dao
io.shwitter.domain
io.shwitter.services
io.shwitter.exceptions
User, Timeline...
 
io.shwitter.controller
io.shwitter.dao
io.shwitter.domain
io.shwitter.services
io.shwitter.exceptions
RegistrationService, TimelineService...
 
io.shwitter.controller
io.shwitter.dao
io.shwitter.domain
io.shwitter.services
io.shwitter.exceptions
 
io.shwitter.controller
io.shwitter.dao
io.shwitter.domain
io.shwitter.services
io.shwitter.exceptions
io.shwitter.user
io.shwitter.user.registration
io.shwitter.user.profile
io.shwitter.timeline
io.shwitter.controller
io.shwitter.dao
io.shwitter.domain
io.shwitter.services
io.shwitter.exceptions
io.shwitter.user
io.shwitter.user.registration
io.shwitter.user.profile
io.shwitter.timeline
User, UserDAO, UserController...
 
GROUP TIGHTLY COUPLED CLASSES
TOGETHER. IF CLASSES THAT CHANGE
TOGETHER ARE IN THE SAME PACKAGE, THEN
THE IMPACT OF CHANGE IS LOCALIZED.
- THE COMMON CLOSURE PRINCIPLE
MAKE SURE ARTIFACTS DO NOT ESCAPE.
MAKE PACKAGES HIGHLY COHESIVE BY
FOLLOWING SINGLE RESPONSIBILITY
PRINCIPLE.
KEEP PACKAGES LOOSELY COUPLED, IDEALLY
– COMPLETELY INDEPENDENT. REFLECTION
DOESN’T COUNT.
package io.shwitter.user
@Entity
class User {
// name, password etc.
}
package io.shwitter.timeline
@Entity
class Timeline {
@OneToOne User user;
}
package io.shwitter.user
@Embeddable
class UserId {
Long value;
}
package io.shwitter.timeline
@Entity
class Timeline {
@Embedded UserId userId;
}
PROVIDE SLIM PACKAGE INTERFACE AND HIDE
IMPLEMENTATION DETAILS.
AVOID DEPENDENCY MAGNETS. SOMETIMES
DUPLICATION IS NOT THAT EVIL.
MANAGE RELATIONSHIPS. EVERY
DEPENDENCY ARROW HAS A REASON.
FINDBUGS V1.0 - A GREAT START
FINDBUGS V1.1 – IMPERFECTION CREEPS IN
FINDBUGS V1.2 – IMPERFECTION TAKES HOLD
FINDBUGS V1.3 – CHAOS BEGINS
FINDBUGS V1.4 – EXPLOSION
THE DEPENDENCIES BETWEEN PACKAGES
MUST NOT FORM CYCLES. BURN BI-
DIRECTIONAL DEPENDENCES IN FIRE.
HOW?
MERGING
package io.shwitter.user
class User {
void register(RegistrationNotifier notifier) {}
}
package io.shwitter.user.notify
class RegistrationNotifier {
void notify(User user) {}
}
MERGING - REPACKAGING
package io.shwitter.user
class User {
void register(RegistrationNotifier notifier) {}
}
class RegistrationNotifier {
void notify(User user) {}
}
DEPENDENCY INVERSION
package io.shwitter.user
class User {
void register(RegistrationNotifier notifier) {}
}
package io.shwitter.user.notify
class RegistrationNotifier {
void notify(User user) {}
}
DEPENDENCY INVERSION - REFACTORING STEP 1
package io.shwitter.user
class User {
void register(RegistrationNotifier notifier) {}
}
package io.shwitter.user.notify
class RegistrationNotifier implements UserNotifier {
void notify(User user) {}
}
interface UserNotifier {
void notify(User user) {}
}
DEPENDENCY INVERSION - REFACTORING STEP 2
package io.shwitter.user
class User {
void register(UserNotifier notifier) {}
}
package io.shwitter.user.notify
class RegistrationNotifier implements UserNotifier {
void notify(User user) {}
}
interface UserNotifier {
void notify(User user) {}
}
DEPENDENCY INVERSION - REFACTORING STEP 3
package io.shwitter.user
class User {
void register(UserNotifier notifier) {}
}
interface UserNotifier {
void notify(User user) {}
}
package io.shwitter.user.notify
class RegistrationNotifier implements UserNotifier {
void notify(User user) {}
}
ESCALATION
package io.shwitter.user
class User {
void register(Notifier n) { n.notify(this); }
}
package io.shwitter.user.notify
class Notifier {
void notify(User user) { sendEmailTo(user.email()); }
}
ESCALATION - REFACTORING STEP 1
package io.shwitter.user
class User {
void register(Notifier n) { n.notify(this); }
}
package io.shwitter.user.notify
class Notifier {
void notify(User user) { sendEmailTo(user.email()); }
}
package io.shwitter.user.registration
class Registrator {
void register(User user, Notifier n) {}
}
ESCALATION - REFACTORING STEP 2
package io.shwitter.user
class User {
void register() { }
}
package io.shwitter.user.notify
class Notifier {
void notify(User user) { sendEmailTo(user.email()); }
}
package io.shwitter.user.registration
class Registrator {
void register(User user, Notifier n) { n.notify(user); }
}
ESCALATION - REFACTORING STEP 3
package io.shwitter.user
class User {
void register() { }
}
package io.shwitter.user.notify
class Notifier {
void notify(String emailAddress) { sendEmailTo(emailAddress); }
}
package io.shwitter.user.registration
class Registrator {
void register(User user, Notifier n) { n.notify(user.email()); }
}
DEMOTION
package io.shwitter.user
class User {
void register(Notifier n) { n.notify(this); }
}
package io.shwitter.user.notify
class Notifier {
void notify(User user) { sendEmailTo(user.email()); }
}
DEMOTION - REFACTORING STEP 1
package io.shwitter.user
class User implements EmailHolder {
void register(Notifier n) { n.notify(this); }
}
package io.shwitter.user.notify
class Notifier {
void notify(User user) { sendEmailTo(user.email()); }
}
package io.shwitter.emailer
interface EmailHolder {
String email();
}
DEMOTION - REFACTORING STEP 2
package io.shwitter.user
class User implements EmailHolder {
void register(Notifier n) { n.notify(this); }
}
package io.shwitter.user.notify
class Notifier {
void notify(EmailHolder emailHolder) { sendEmailTo(emailHolder.email()); }
}
package io.shwitter.emailer
interface EmailHolder {
String email();
}
TOOLS
MACKER EXAMPLE
<?xml version="1.0"?>
<macker>
<ruleset name="Simple example">
<access-rule>
<deny>
<from class="**Print*" />
<to class="java.**" />
</deny>
</access-rule>
</ruleset>
</macker>
CLASSYCLE EXAMPLE
#
# This is an example of a dependency definition file
#
show allResults
{package} = classycle
[util] = ${package}.util.*
[non-util] = ${package}.* excluding [util]
[class-file] = ${package}.classfile.*
check sets [util] [non-util] [class-file]
check [util] independentOf [non-util]
check [class-file] independentOf [util]
OO Design Principles & Metrics, Jason Gorman http://goo.gl/RTW9GT
The Economics of Software Design, J.B. Rainsberger http://goo.gl/ra7Q8Q
SOLID Principles, Eduards Sizovs http://goo.gl/Rpxavd
Designing Object-Oriented Software, Jouni Smed http://goo.gl/iyE1R2
Grand Unified Theory Of Software Design, Jim Weirich http://goo.gl/ASqyAs
Fun With Modules, Kirk Knoernschild http://goo.gl/i8jx8Y
Patterns of Modular Architecture http://goo.gl/yFqmZO
Let’s turn packages into a module system! http://goo.gl/Mzco8F
MORE
EITHER YOU WORK TO CREATE A
COMPANY CULTURE OR YOU DON'T.
EITHER WAY A CULTURE WILL EMERGE.
(C) MARTIN LINKHORST
EITHER YOU WORK TO CREATE A
SOFTWARE STRUCTURE OR YOU DON'T.
EITHER WAY A STRUCTURE WILL EMERGE.
(C) EDUARDS SIZOVS
THANK YOU

More Related Content

Viewers also liked

Viewers also liked (9)

JavaCro'15 - Facebook Messenger Platform - Branimir Conjar, Krešimir Mišura
JavaCro'15 - Facebook Messenger Platform - Branimir Conjar, Krešimir MišuraJavaCro'15 - Facebook Messenger Platform - Branimir Conjar, Krešimir Mišura
JavaCro'15 - Facebook Messenger Platform - Branimir Conjar, Krešimir Mišura
 
JavaCro'15 - Conquer the Internet of Things with Java and Docker - Johan Jans...
JavaCro'15 - Conquer the Internet of Things with Java and Docker - Johan Jans...JavaCro'15 - Conquer the Internet of Things with Java and Docker - Johan Jans...
JavaCro'15 - Conquer the Internet of Things with Java and Docker - Johan Jans...
 
JavaCro'15 - WebRTC in PBZ video chat - Zoran Perak
JavaCro'15 - WebRTC in PBZ video chat - Zoran PerakJavaCro'15 - WebRTC in PBZ video chat - Zoran Perak
JavaCro'15 - WebRTC in PBZ video chat - Zoran Perak
 
Javantura v3 - The story of Java & HUJAK
Javantura v3 - The story of Java & HUJAKJavantura v3 - The story of Java & HUJAK
Javantura v3 - The story of Java & HUJAK
 
JavaCro'15 - HUJAKing – Expansion of Java Community - Branko Mihaljević, Alek...
JavaCro'15 - HUJAKing – Expansion of Java Community - Branko Mihaljević, Alek...JavaCro'15 - HUJAKing – Expansion of Java Community - Branko Mihaljević, Alek...
JavaCro'15 - HUJAKing – Expansion of Java Community - Branko Mihaljević, Alek...
 
Javantura v3 - Logs – the missing gold mine – Franjo Žilić
Javantura v3 - Logs – the missing gold mine – Franjo ŽilićJavantura v3 - Logs – the missing gold mine – Franjo Žilić
Javantura v3 - Logs – the missing gold mine – Franjo Žilić
 
Javantura v3 - Going Reactive with RxJava – Hrvoje Crnjak
Javantura v3 - Going Reactive with RxJava – Hrvoje CrnjakJavantura v3 - Going Reactive with RxJava – Hrvoje Crnjak
Javantura v3 - Going Reactive with RxJava – Hrvoje Crnjak
 
Javantura v3 - ES6 – Future Is Now – Nenad Pečanac
Javantura v3 - ES6 – Future Is Now – Nenad PečanacJavantura v3 - ES6 – Future Is Now – Nenad Pečanac
Javantura v3 - ES6 – Future Is Now – Nenad Pečanac
 
Java Certification by HUJAK - 2015-05-12 - at JavaCro'15 conference
Java Certification by HUJAK - 2015-05-12 - at JavaCro'15 conferenceJava Certification by HUJAK - 2015-05-12 - at JavaCro'15 conference
Java Certification by HUJAK - 2015-05-12 - at JavaCro'15 conference
 

Similar to JavaCro'15 - Architecting well-structured Java applications - Eduards Sizovs

Architecting well-structured Java applications
Architecting well-structured Java applicationsArchitecting well-structured Java applications
Architecting well-structured Java applicationsEduards Sizovs
 
SPRING BOOT DANS UN CONTAINER OUTILS ET PRATIQUES
 SPRING BOOT DANS UN CONTAINER OUTILS ET PRATIQUES SPRING BOOT DANS UN CONTAINER OUTILS ET PRATIQUES
SPRING BOOT DANS UN CONTAINER OUTILS ET PRATIQUESVMware Tanzu
 
Os gi introduction made by Ly MInh Phuong-SOC team
Os gi introduction made by Ly MInh Phuong-SOC teamOs gi introduction made by Ly MInh Phuong-SOC team
Os gi introduction made by Ly MInh Phuong-SOC teamThuy_Dang
 
Java Tech & Tools | OSGi Best Practices | Emily Jiang
Java Tech & Tools | OSGi Best Practices | Emily JiangJava Tech & Tools | OSGi Best Practices | Emily Jiang
Java Tech & Tools | OSGi Best Practices | Emily JiangJAX London
 
Erp 2.50 openbravo environment installation openbravo-wiki
Erp 2.50 openbravo environment installation   openbravo-wikiErp 2.50 openbravo environment installation   openbravo-wiki
Erp 2.50 openbravo environment installation openbravo-wikiyaranusa
 
Introduction to computer science
Introduction to computer scienceIntroduction to computer science
Introduction to computer scienceumardanjumamaiwada
 
BroadcastReceivers in Android
BroadcastReceivers in AndroidBroadcastReceivers in Android
BroadcastReceivers in AndroidPerfect APK
 
Whoops! Where did my architecture go?
Whoops! Where did my architecture go?Whoops! Where did my architecture go?
Whoops! Where did my architecture go?Oliver Gierke
 
CASE STUDY InternetExcel Exercises, page 434, textRecord your.docx
CASE STUDY InternetExcel Exercises, page 434, textRecord your.docxCASE STUDY InternetExcel Exercises, page 434, textRecord your.docx
CASE STUDY InternetExcel Exercises, page 434, textRecord your.docxketurahhazelhurst
 
Building android apps with MVP, Dagger, Retrofit, Gson, JSON, Kotlin Data Cl...
Building  android apps with MVP, Dagger, Retrofit, Gson, JSON, Kotlin Data Cl...Building  android apps with MVP, Dagger, Retrofit, Gson, JSON, Kotlin Data Cl...
Building android apps with MVP, Dagger, Retrofit, Gson, JSON, Kotlin Data Cl...Hammad Tariq
 
Class notes(week 10) on applet programming
Class notes(week 10) on applet programmingClass notes(week 10) on applet programming
Class notes(week 10) on applet programmingKuntal Bhowmick
 
Loadnrun: UKIUA 2010 Presentation
Loadnrun: UKIUA 2010 PresentationLoadnrun: UKIUA 2010 Presentation
Loadnrun: UKIUA 2010 Presentationroydealsimon
 
Configure &amp; send push notification on i os device
Configure &amp; send push notification on i os deviceConfigure &amp; send push notification on i os device
Configure &amp; send push notification on i os deviceShepHertz
 

Similar to JavaCro'15 - Architecting well-structured Java applications - Eduards Sizovs (20)

Architecting well-structured Java applications
Architecting well-structured Java applicationsArchitecting well-structured Java applications
Architecting well-structured Java applications
 
Apple notification push
Apple notification pushApple notification push
Apple notification push
 
SPRING BOOT DANS UN CONTAINER OUTILS ET PRATIQUES
 SPRING BOOT DANS UN CONTAINER OUTILS ET PRATIQUES SPRING BOOT DANS UN CONTAINER OUTILS ET PRATIQUES
SPRING BOOT DANS UN CONTAINER OUTILS ET PRATIQUES
 
Os gi introduction made by Ly MInh Phuong-SOC team
Os gi introduction made by Ly MInh Phuong-SOC teamOs gi introduction made by Ly MInh Phuong-SOC team
Os gi introduction made by Ly MInh Phuong-SOC team
 
Java Tech & Tools | OSGi Best Practices | Emily Jiang
Java Tech & Tools | OSGi Best Practices | Emily JiangJava Tech & Tools | OSGi Best Practices | Emily Jiang
Java Tech & Tools | OSGi Best Practices | Emily Jiang
 
Erp 2.50 openbravo environment installation openbravo-wiki
Erp 2.50 openbravo environment installation   openbravo-wikiErp 2.50 openbravo environment installation   openbravo-wiki
Erp 2.50 openbravo environment installation openbravo-wiki
 
Practical OSGi
Practical OSGiPractical OSGi
Practical OSGi
 
lecture 6
 lecture 6 lecture 6
lecture 6
 
Introduction to computer science
Introduction to computer scienceIntroduction to computer science
Introduction to computer science
 
BroadcastReceivers in Android
BroadcastReceivers in AndroidBroadcastReceivers in Android
BroadcastReceivers in Android
 
Whoops! Where did my architecture go?
Whoops! Where did my architecture go?Whoops! Where did my architecture go?
Whoops! Where did my architecture go?
 
AntiRE en Masse
AntiRE en MasseAntiRE en Masse
AntiRE en Masse
 
CASE STUDY InternetExcel Exercises, page 434, textRecord your.docx
CASE STUDY InternetExcel Exercises, page 434, textRecord your.docxCASE STUDY InternetExcel Exercises, page 434, textRecord your.docx
CASE STUDY InternetExcel Exercises, page 434, textRecord your.docx
 
Building android apps with MVP, Dagger, Retrofit, Gson, JSON, Kotlin Data Cl...
Building  android apps with MVP, Dagger, Retrofit, Gson, JSON, Kotlin Data Cl...Building  android apps with MVP, Dagger, Retrofit, Gson, JSON, Kotlin Data Cl...
Building android apps with MVP, Dagger, Retrofit, Gson, JSON, Kotlin Data Cl...
 
Class notes(week 10) on applet programming
Class notes(week 10) on applet programmingClass notes(week 10) on applet programming
Class notes(week 10) on applet programming
 
Programming by imitation
Programming by imitationProgramming by imitation
Programming by imitation
 
Loadnrun: UKIUA 2010 Presentation
Loadnrun: UKIUA 2010 PresentationLoadnrun: UKIUA 2010 Presentation
Loadnrun: UKIUA 2010 Presentation
 
Configure &amp; send push notification on i os device
Configure &amp; send push notification on i os deviceConfigure &amp; send push notification on i os device
Configure &amp; send push notification on i os device
 
ragi_tutorial_v1
ragi_tutorial_v1ragi_tutorial_v1
ragi_tutorial_v1
 
ragi_tutorial_v1
ragi_tutorial_v1ragi_tutorial_v1
ragi_tutorial_v1
 

More from HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association

More from HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association (20)

Java cro'21 the best tools for java developers in 2021 - hujak
Java cro'21   the best tools for java developers in 2021 - hujakJava cro'21   the best tools for java developers in 2021 - hujak
Java cro'21 the best tools for java developers in 2021 - hujak
 
JavaCro'21 - Java is Here To Stay - HUJAK Keynote
JavaCro'21 - Java is Here To Stay - HUJAK KeynoteJavaCro'21 - Java is Here To Stay - HUJAK Keynote
JavaCro'21 - Java is Here To Stay - HUJAK Keynote
 
Javantura v7 - Behaviour Driven Development with Cucumber - Ivan Lozić
Javantura v7 - Behaviour Driven Development with Cucumber - Ivan LozićJavantura v7 - Behaviour Driven Development with Cucumber - Ivan Lozić
Javantura v7 - Behaviour Driven Development with Cucumber - Ivan Lozić
 
Javantura v7 - The State of Java - Today and Tomowwow - HUJAK's Community Key...
Javantura v7 - The State of Java - Today and Tomowwow - HUJAK's Community Key...Javantura v7 - The State of Java - Today and Tomowwow - HUJAK's Community Key...
Javantura v7 - The State of Java - Today and Tomowwow - HUJAK's Community Key...
 
Javantura v7 - Learning to Scale Yourself: The Journey from Coder to Leader -...
Javantura v7 - Learning to Scale Yourself: The Journey from Coder to Leader -...Javantura v7 - Learning to Scale Yourself: The Journey from Coder to Leader -...
Javantura v7 - Learning to Scale Yourself: The Journey from Coder to Leader -...
 
JavaCro'19 - The State of Java and Software Development in Croatia - Communit...
JavaCro'19 - The State of Java and Software Development in Croatia - Communit...JavaCro'19 - The State of Java and Software Development in Croatia - Communit...
JavaCro'19 - The State of Java and Software Development in Croatia - Communit...
 
Javantura v6 - Java in Croatia and HUJAK - Branko Mihaljević, Aleksander Radovan
Javantura v6 - Java in Croatia and HUJAK - Branko Mihaljević, Aleksander RadovanJavantura v6 - Java in Croatia and HUJAK - Branko Mihaljević, Aleksander Radovan
Javantura v6 - Java in Croatia and HUJAK - Branko Mihaljević, Aleksander Radovan
 
Javantura v6 - On the Aspects of Polyglot Programming and Memory Management i...
Javantura v6 - On the Aspects of Polyglot Programming and Memory Management i...Javantura v6 - On the Aspects of Polyglot Programming and Memory Management i...
Javantura v6 - On the Aspects of Polyglot Programming and Memory Management i...
 
Javantura v6 - Case Study: Marketplace App with Java and Hyperledger Fabric -...
Javantura v6 - Case Study: Marketplace App with Java and Hyperledger Fabric -...Javantura v6 - Case Study: Marketplace App with Java and Hyperledger Fabric -...
Javantura v6 - Case Study: Marketplace App with Java and Hyperledger Fabric -...
 
Javantura v6 - How to help customers report bugs accurately - Miroslav Čerkez...
Javantura v6 - How to help customers report bugs accurately - Miroslav Čerkez...Javantura v6 - How to help customers report bugs accurately - Miroslav Čerkez...
Javantura v6 - How to help customers report bugs accurately - Miroslav Čerkez...
 
Javantura v6 - When remote work really works - the secrets behind successful ...
Javantura v6 - When remote work really works - the secrets behind successful ...Javantura v6 - When remote work really works - the secrets behind successful ...
Javantura v6 - When remote work really works - the secrets behind successful ...
 
Javantura v6 - Kotlin-Java Interop - Matej Vidaković
Javantura v6 - Kotlin-Java Interop - Matej VidakovićJavantura v6 - Kotlin-Java Interop - Matej Vidaković
Javantura v6 - Kotlin-Java Interop - Matej Vidaković
 
Javantura v6 - Spring HATEOAS hypermedia-driven web services, and clients tha...
Javantura v6 - Spring HATEOAS hypermedia-driven web services, and clients tha...Javantura v6 - Spring HATEOAS hypermedia-driven web services, and clients tha...
Javantura v6 - Spring HATEOAS hypermedia-driven web services, and clients tha...
 
Javantura v6 - End to End Continuous Delivery of Microservices for Kubernetes...
Javantura v6 - End to End Continuous Delivery of Microservices for Kubernetes...Javantura v6 - End to End Continuous Delivery of Microservices for Kubernetes...
Javantura v6 - End to End Continuous Delivery of Microservices for Kubernetes...
 
Javantura v6 - Istio Service Mesh - The magic between your microservices - Ma...
Javantura v6 - Istio Service Mesh - The magic between your microservices - Ma...Javantura v6 - Istio Service Mesh - The magic between your microservices - Ma...
Javantura v6 - Istio Service Mesh - The magic between your microservices - Ma...
 
Javantura v6 - How can you improve the quality of your application - Ioannis ...
Javantura v6 - How can you improve the quality of your application - Ioannis ...Javantura v6 - How can you improve the quality of your application - Ioannis ...
Javantura v6 - How can you improve the quality of your application - Ioannis ...
 
Javantura v6 - Just say it v2 - Pavao Varela Petrac
Javantura v6 - Just say it v2 - Pavao Varela PetracJavantura v6 - Just say it v2 - Pavao Varela Petrac
Javantura v6 - Just say it v2 - Pavao Varela Petrac
 
Javantura v6 - Automation of web apps testing - Hrvoje Ruhek
Javantura v6 - Automation of web apps testing - Hrvoje RuhekJavantura v6 - Automation of web apps testing - Hrvoje Ruhek
Javantura v6 - Automation of web apps testing - Hrvoje Ruhek
 
Javantura v6 - Master the Concepts Behind the Java 10 Challenges and Eliminat...
Javantura v6 - Master the Concepts Behind the Java 10 Challenges and Eliminat...Javantura v6 - Master the Concepts Behind the Java 10 Challenges and Eliminat...
Javantura v6 - Master the Concepts Behind the Java 10 Challenges and Eliminat...
 
Javantura v6 - Building IoT Middleware with Microservices - Mario Kusek
Javantura v6 - Building IoT Middleware with Microservices - Mario KusekJavantura v6 - Building IoT Middleware with Microservices - Mario Kusek
Javantura v6 - Building IoT Middleware with Microservices - Mario Kusek
 

Recently uploaded

Design and Development of a Provenance Capture Platform for Data Science
Design and Development of a Provenance Capture Platform for Data ScienceDesign and Development of a Provenance Capture Platform for Data Science
Design and Development of a Provenance Capture Platform for Data SciencePaolo Missier
 
Hyatt driving innovation and exceptional customer experiences with FIDO passw...
Hyatt driving innovation and exceptional customer experiences with FIDO passw...Hyatt driving innovation and exceptional customer experiences with FIDO passw...
Hyatt driving innovation and exceptional customer experiences with FIDO passw...FIDO Alliance
 
Frisco Automating Purchase Orders with MuleSoft IDP- May 10th, 2024.pptx.pdf
Frisco Automating Purchase Orders with MuleSoft IDP- May 10th, 2024.pptx.pdfFrisco Automating Purchase Orders with MuleSoft IDP- May 10th, 2024.pptx.pdf
Frisco Automating Purchase Orders with MuleSoft IDP- May 10th, 2024.pptx.pdfAnubhavMangla3
 
UiPath manufacturing technology benefits and AI overview
UiPath manufacturing technology benefits and AI overviewUiPath manufacturing technology benefits and AI overview
UiPath manufacturing technology benefits and AI overviewDianaGray10
 
Design Guidelines for Passkeys 2024.pptx
Design Guidelines for Passkeys 2024.pptxDesign Guidelines for Passkeys 2024.pptx
Design Guidelines for Passkeys 2024.pptxFIDO Alliance
 
TopCryptoSupers 12thReport OrionX May2024
TopCryptoSupers 12thReport OrionX May2024TopCryptoSupers 12thReport OrionX May2024
TopCryptoSupers 12thReport OrionX May2024Stephen Perrenod
 
Oauth 2.0 Introduction and Flows with MuleSoft
Oauth 2.0 Introduction and Flows with MuleSoftOauth 2.0 Introduction and Flows with MuleSoft
Oauth 2.0 Introduction and Flows with MuleSoftshyamraj55
 
WebRTC and SIP not just audio and video @ OpenSIPS 2024
WebRTC and SIP not just audio and video @ OpenSIPS 2024WebRTC and SIP not just audio and video @ OpenSIPS 2024
WebRTC and SIP not just audio and video @ OpenSIPS 2024Lorenzo Miniero
 
Using IESVE for Room Loads Analysis - UK & Ireland
Using IESVE for Room Loads Analysis - UK & IrelandUsing IESVE for Room Loads Analysis - UK & Ireland
Using IESVE for Room Loads Analysis - UK & IrelandIES VE
 
Top 10 CodeIgniter Development Companies
Top 10 CodeIgniter Development CompaniesTop 10 CodeIgniter Development Companies
Top 10 CodeIgniter Development CompaniesTopCSSGallery
 
Microsoft CSP Briefing Pre-Engagement - Questionnaire
Microsoft CSP Briefing Pre-Engagement - QuestionnaireMicrosoft CSP Briefing Pre-Engagement - Questionnaire
Microsoft CSP Briefing Pre-Engagement - QuestionnaireExakis Nelite
 
TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...
TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...
TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...TrustArc
 
Introduction to FIDO Authentication and Passkeys.pptx
Introduction to FIDO Authentication and Passkeys.pptxIntroduction to FIDO Authentication and Passkeys.pptx
Introduction to FIDO Authentication and Passkeys.pptxFIDO Alliance
 
Google I/O Extended 2024 Warsaw
Google I/O Extended 2024 WarsawGoogle I/O Extended 2024 Warsaw
Google I/O Extended 2024 WarsawGDSC PJATK
 
ChatGPT and Beyond - Elevating DevOps Productivity
ChatGPT and Beyond - Elevating DevOps ProductivityChatGPT and Beyond - Elevating DevOps Productivity
ChatGPT and Beyond - Elevating DevOps ProductivityVictorSzoltysek
 
Event-Driven Architecture Masterclass: Engineering a Robust, High-performance...
Event-Driven Architecture Masterclass: Engineering a Robust, High-performance...Event-Driven Architecture Masterclass: Engineering a Robust, High-performance...
Event-Driven Architecture Masterclass: Engineering a Robust, High-performance...ScyllaDB
 
State of the Smart Building Startup Landscape 2024!
State of the Smart Building Startup Landscape 2024!State of the Smart Building Startup Landscape 2024!
State of the Smart Building Startup Landscape 2024!Memoori
 
JavaScript Usage Statistics 2024 - The Ultimate Guide
JavaScript Usage Statistics 2024 - The Ultimate GuideJavaScript Usage Statistics 2024 - The Ultimate Guide
JavaScript Usage Statistics 2024 - The Ultimate GuidePixlogix Infotech
 
Working together SRE & Platform Engineering
Working together SRE & Platform EngineeringWorking together SRE & Platform Engineering
Working together SRE & Platform EngineeringMarcus Vechiato
 
Observability Concepts EVERY Developer Should Know (DevOpsDays Seattle)
Observability Concepts EVERY Developer Should Know (DevOpsDays Seattle)Observability Concepts EVERY Developer Should Know (DevOpsDays Seattle)
Observability Concepts EVERY Developer Should Know (DevOpsDays Seattle)Paige Cruz
 

Recently uploaded (20)

Design and Development of a Provenance Capture Platform for Data Science
Design and Development of a Provenance Capture Platform for Data ScienceDesign and Development of a Provenance Capture Platform for Data Science
Design and Development of a Provenance Capture Platform for Data Science
 
Hyatt driving innovation and exceptional customer experiences with FIDO passw...
Hyatt driving innovation and exceptional customer experiences with FIDO passw...Hyatt driving innovation and exceptional customer experiences with FIDO passw...
Hyatt driving innovation and exceptional customer experiences with FIDO passw...
 
Frisco Automating Purchase Orders with MuleSoft IDP- May 10th, 2024.pptx.pdf
Frisco Automating Purchase Orders with MuleSoft IDP- May 10th, 2024.pptx.pdfFrisco Automating Purchase Orders with MuleSoft IDP- May 10th, 2024.pptx.pdf
Frisco Automating Purchase Orders with MuleSoft IDP- May 10th, 2024.pptx.pdf
 
UiPath manufacturing technology benefits and AI overview
UiPath manufacturing technology benefits and AI overviewUiPath manufacturing technology benefits and AI overview
UiPath manufacturing technology benefits and AI overview
 
Design Guidelines for Passkeys 2024.pptx
Design Guidelines for Passkeys 2024.pptxDesign Guidelines for Passkeys 2024.pptx
Design Guidelines for Passkeys 2024.pptx
 
TopCryptoSupers 12thReport OrionX May2024
TopCryptoSupers 12thReport OrionX May2024TopCryptoSupers 12thReport OrionX May2024
TopCryptoSupers 12thReport OrionX May2024
 
Oauth 2.0 Introduction and Flows with MuleSoft
Oauth 2.0 Introduction and Flows with MuleSoftOauth 2.0 Introduction and Flows with MuleSoft
Oauth 2.0 Introduction and Flows with MuleSoft
 
WebRTC and SIP not just audio and video @ OpenSIPS 2024
WebRTC and SIP not just audio and video @ OpenSIPS 2024WebRTC and SIP not just audio and video @ OpenSIPS 2024
WebRTC and SIP not just audio and video @ OpenSIPS 2024
 
Using IESVE for Room Loads Analysis - UK & Ireland
Using IESVE for Room Loads Analysis - UK & IrelandUsing IESVE for Room Loads Analysis - UK & Ireland
Using IESVE for Room Loads Analysis - UK & Ireland
 
Top 10 CodeIgniter Development Companies
Top 10 CodeIgniter Development CompaniesTop 10 CodeIgniter Development Companies
Top 10 CodeIgniter Development Companies
 
Microsoft CSP Briefing Pre-Engagement - Questionnaire
Microsoft CSP Briefing Pre-Engagement - QuestionnaireMicrosoft CSP Briefing Pre-Engagement - Questionnaire
Microsoft CSP Briefing Pre-Engagement - Questionnaire
 
TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...
TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...
TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...
 
Introduction to FIDO Authentication and Passkeys.pptx
Introduction to FIDO Authentication and Passkeys.pptxIntroduction to FIDO Authentication and Passkeys.pptx
Introduction to FIDO Authentication and Passkeys.pptx
 
Google I/O Extended 2024 Warsaw
Google I/O Extended 2024 WarsawGoogle I/O Extended 2024 Warsaw
Google I/O Extended 2024 Warsaw
 
ChatGPT and Beyond - Elevating DevOps Productivity
ChatGPT and Beyond - Elevating DevOps ProductivityChatGPT and Beyond - Elevating DevOps Productivity
ChatGPT and Beyond - Elevating DevOps Productivity
 
Event-Driven Architecture Masterclass: Engineering a Robust, High-performance...
Event-Driven Architecture Masterclass: Engineering a Robust, High-performance...Event-Driven Architecture Masterclass: Engineering a Robust, High-performance...
Event-Driven Architecture Masterclass: Engineering a Robust, High-performance...
 
State of the Smart Building Startup Landscape 2024!
State of the Smart Building Startup Landscape 2024!State of the Smart Building Startup Landscape 2024!
State of the Smart Building Startup Landscape 2024!
 
JavaScript Usage Statistics 2024 - The Ultimate Guide
JavaScript Usage Statistics 2024 - The Ultimate GuideJavaScript Usage Statistics 2024 - The Ultimate Guide
JavaScript Usage Statistics 2024 - The Ultimate Guide
 
Working together SRE & Platform Engineering
Working together SRE & Platform EngineeringWorking together SRE & Platform Engineering
Working together SRE & Platform Engineering
 
Observability Concepts EVERY Developer Should Know (DevOpsDays Seattle)
Observability Concepts EVERY Developer Should Know (DevOpsDays Seattle)Observability Concepts EVERY Developer Should Know (DevOpsDays Seattle)
Observability Concepts EVERY Developer Should Know (DevOpsDays Seattle)
 

JavaCro'15 - Architecting well-structured Java applications - Eduards Sizovs