SlideShare uma empresa Scribd logo
1 de 39
Werner Keil, CATMedia
Ivar Grimstad, Eclipse Foundation
OpenDDR and Jakarta MVC
21-23 December 2020 #Virtual
Agenda
 Introduction
 History and Comparison
 Project Overview
 MVC Frameworks
 Spring Mobile
 Jakarta MVC
 Demo
2#Java2Days #OpenDDR #MVC
Who Am I?
 Consultant – Coach
 Creative Cosmopolitan
 Open Source Evangelist
 Software Architect
 Maintenance Lead – JSR 385
 Maintenance Lead – JSR 354
 Jakarta EE Specification Committee Member
 Author, Speaker
Twitter @wernerkeil
3#Java2Days #OpenDDR #MVC
...and me!!
• Jakarta EE Developer Advocate
• Java Champion
• JUG Leader
What is a DDR?
6#Java2Days #OpenDDR #MVC
What is a DDR?
7#Java2Days #OpenDDR #MVC
What is a DDR?
8#Java2Days #OpenDDR #MVC
What is a DDR?
9#Java2Days #OpenDDR #MVC
What is OpenDDR?
Day after day we all experience an incredible growth and fragmentation of devices
available on a more and more proliferated market.
Accurately tracking their specs has become very hard work.
But this complexity can be reduced if managed by a community daily involved in
improving the Device Description Repository (DDR).
This is the essence of the OpenDDR project, the best open and free repository of
device descriptions currently available.
10#Java2Days #OpenDDR #MVC
Why is OpenDDR different?
If you want a comfortable user experience, you need dynamic, “responsive” content
according to hardware and browser of your device.
Device Description Repositories (DDR) are databases that plenty of information
concerning mobile phones, tablets, Interactive TVs, set top boxes and any device
having a Web browser. DDR allow developers to realize applications providing
appropriate user experience on each client
There are several DDR projects, most demand often hefty fees to access to their
databases and APIs or restricts free use to non-commercial applications.
11#Java2Days #OpenDDR #MVC
History
21-23 December 2020 #Virtual
WURFL Wall
#Java2Days #OpenDDR #MVC 13
WURFL Wall since August 2011
#Java2Days #OpenDDR #MVC 14
WURFL no longer Open Source
#Java2Days #OpenDDR #MVC 15
Apache Trail
 In late 2011 a few months after OpenDDR started, Apache committers and
members got aware of the technology and its relevance. Deciding to create both a
unified Device Repository and APIs for Java and .NET.
 OpenDDR was a Founding Member of the Apache DeviceMap Incubator.
 It graduated in late 2014, but compared to OpenDDR with monthly release cycles,
that was not archived for long despite hopes that an Apache project would attract
more contributors, activity and releases decreased in the years after.
 So DeviceMap was retired in January 2017.
#Java2Days #OpenDDR #MVC 16
Back to the Roots
 About a year after the reboot under OpenDDR.mobi the project saw record-
breaking downloads of nearly 175,000 in July 2018 alone. With total of almost
500k in 2018.
 This continued with 6-digits in 2019 and despite COVID-19 also affecting top sites,
it should be 5-digit by the end of the year, more than DeviceMap ever had in its
lifespan between 2011 and 2016.
#Java2Days #OpenDDR #MVC 17
Project Comparison
Project Strength Weakness License
51Degrees.mobi More Predictable
product catalogue,
.NET Support
Free license contains fewer devices,
usually less accurate
Repository: MPL or Commercial
(„Pro Edition“)
API: Mozilla Public License
DeviceAtlas Data is multi-
sourced from
industry-leading
partners.
Some W3C
compliance
Only commercial licenses. Repository: Commercial license
API: Commercial license
WURFL Former Community
project
(till Aug 2011)
The license does not allow to use
the DDR without accessing through
the WURFL API
the API does not allow use in
projects with a proprietary license
Repository: Use not allowed if
accessed without WURFL APIs
API license: dual licensing AGPL
and commercial
(Changed since August 2011)
NetBiscuits Service based,
seems easy to
integrate at least
via JavaScript
Free and SME offerings dependent
on using their JavaScript , no API
below Enterprise or “OEM” price
range
Repository: N/A
API: Commercial license
Volantis Relatively wide
device coverage
Only commercial licenses.
Multiple takeovers, the last owner
did not show support for it any more.
Repository: Commercial license
API: Commercial license
Project Overview
21-23 December 2020 #Virtual
Why Open Standards?
 OpenDDR stakes on open standards:
• Repository is fully compliant with W3C DDR
• SimpleDDR library implements the W3C DDR Simple APIs
 From a developer point of view:
• You can start developing your application with confidence that your product will work with any
W3C DDR Simple API implementation, no binding to OpenDDR DDR implementation
• Adopting a W3C standard, the Copyright of these interfaces is
owned and protected by W3C against any IP or patent claim
 The Apache License means that you are free to use all of OpenDDR in open
source or proprietary software.
20#Java2Days #OpenDDR #MVC
What's different in OpenDDR?
 Users can update the operating systems of their devices either with custom builds,
or just install a new browser.
 E.g. Google‘s Project Ara aimed for modular devices with an almost endless
combination of capabilities.
 The identification of a device through the original User Agent exposed by
manufactures is not always enough.
 OpenDDR considers the device as a combination of three important aspects:
Physical Device
Operating System
Web Browser
21#Java2Days #OpenDDR #MVC
Level of Confidence
 OpenDDR can identify custom builds of the operating system and third party
browsers.
 If a particular version of a browser or an operating system is not recognized,
OpenDDR returns information about the closest version rather than not returning
any information at all.
 OpenDDR identifies a device, a web browser or an operating system with a
certain level of Confidence.
 You can specify the threshold as a target to achieve in the identification process.
The higher the confidence the slower or more memory consuming the process
may be.
22#Java2Days #OpenDDR #MVC
Patching and Optimization
 Lowering the confidence speeds up
the process, even if you can have less accurate results.
 OpenDDR supports Patching the data source.
 In OpenDDR we can specify a reduced vocabulary in order to limit the memory load.
• It can be specified in the oddr.limited.vocabulary.path property of the OpenDDR properties file.
• It allows developers to choose which properties need to be loaded in memory at startup from
the datasource. In most case developers need only a subset of properties from the datasource.
23#Java2Days #OpenDDR #MVC
Load Test
 We compared OpenDDR with WURFL API (1.3.1) in terms of memory load in two
situations:
Without limited vocabulary
With limited vocabulary
 We used jMeter as workload generator, configuring it in order to generate 100
requests per seconds from 10 workers with a different user agent. The user
agents set contained ten of most common user agent observed in a real
environment.
 Both OpenDDR DDR and WURFL API were tested in a simple web app.
24#Java2Days #OpenDDR #MVC
Test Results
 We chose as limited vocabulary the W3C core vocabulary
 The memory load of OpenDDR with limited vocabulary is only about
50MB and after initialization, OpenDDR won't show a memory spike.
 Both APIs identified correctly all the user agents in the HTTP request
#Java2Days #OpenDDR #MVC 25
DDR Service Retrieval
To create the identification service we use the ServiceFactory
of W3C DDR-Simple-API
initializationProperties.load(context.getResourceAsStream
("/WEB-INF/oddr.properties"));
Service identificationService =
ServiceFactory.newService(“mobi.openddr.ssimple.DDRService",
initializationProperties.getProperty(DDRService.ODDR_VOCABULARY_IRI),
initializationProperties);
The first argument is the class implementing the DDRService;
the second argument is the default vocabulary used in the
identification if the vocabulary is not specified;
the third argument is the SimpleDDR properties file.
#Java2Days #OpenDDR #MVC 26
New Java Client
While departing from W3C compliance a new Java client offers
more flexibility e.g. when it comes to ways of loading
device data.
Data can be loaded via:
• URL
• JAR file
• File system
Get classifier from a URL:
Classifier cl = Classifier.builder().with(LoaderOption.URL,
"http://openddr.mobi/data/snapshot/");
27#Java2Days #OpenDDR #MVC
New Java Client (2)
Get the client using JAR data source
Classifier cl = Classifier.builder().with(LoaderOption.JAR);
Get client using data from file system
Classifier cl = Classifier.builder().with(LoaderOption.FOLDER,
"/some/path/OpenDDR/latest/devicedata");
The last option is closest to the W3C DDR client.
28#Java2Days #OpenDDR #MVC
Metro – OpenDDR for .NET
29#Java2Days #OpenDDR #MVC
OpenDDR
 Open, free, based on W3C standard. Update to DDR by the community and
device manufacturers.
 Identification is not only for the device as a single entity but extended to the web
browser
and the operating system. OpenDDR can identify third parties web browsers and
customized operating systems. A developer can specify the vocabulary and the
aspects of the property he wants to know.
 Easy migration: Device Repository and most OpenDDR APIs are compatible with
W3C DDR
30#Java2Days #OpenDDR #MVC
MVC Frameworks
21-23 December 2020 #Virtual
Spring Mobile
Spring Mobile is a framework on top of Spring MVC that provides capabilities to
detect the type of device making a request to your Spring web site and serve
alternate views based on that device.
Features:
 A Device resolver abstraction for server-side detection of mobile and tablet
devices
 Site preference management that allows the user to indicate if he or she prefers a
“normal”, “mobile”, or “tablet” experience
 A site switcher capable of switching the user to the most appropriate site, either
mobile, tablet, or normal, based on his or her device and optionally indicated site
preference
 Device aware view management for organizing and managing different views for
specific devices 32#Java2Days #OpenDDR #MVC
Device Detection
@Controller
public class HomeController {
private static final Logger logger =
LoggerFactory.getLogger(HomeController.class);
@RequestMapping("/")
public void home(Device device) {
if (device.isMobile()) {
logger.info("Hello mobile world!");
} else if (device.isTablet()) {
logger.info("Hello tablet world!");
} else {
logger.info("Hello desktop world!");
} }
} 33#Java2Days #OpenDDR #MVC
Site Preference
@RequestMapping("/")
public String home(SitePreference sitePreference, Model model)
if (sitePreference == SitePreference.NORMAL) {
logger.info("Site preference is normal");
return "home";
} else if (sitePreference == SitePreference.MOBILE) {
logger.info("Site preference is mobile");
return "home-mobile";
} else if (sitePreference == SitePreference.TABLET) {
logger.info("Site preference is tablet");
return "home-tablet";
} else { logger.info("no site preference");
return "home"; }
} 34#Java2Days #OpenDDR #MVC
Device aware View Resolution
@Bean
public LiteDeviceDelegatingViewResolver
liteDeviceAwareViewResolver() {
InternalResourceViewResolver delegate =
new InternalResourceViewResolver();
delegate.setPrefix("/WEB-INF/views/");
delegate.setSuffix(".jsp");
LiteDeviceDelegatingViewResolver resolver =
new LiteDeviceDelegatingViewResolver(delegate);
resolver.setMobilePrefix("mobile/");
resolver.setTabletPrefix("tablet/");
return resolver;
}
35#Java2Days #OpenDDR #MVC
Jakarta MVC
Model-View-Controller, or MVC, is a common pattern for Web frameworks, mostly to
build HTML applications. The model refers to the application’s data or domain object,
the view to the data presentation and the controller is responsible for managing input
and out models and producing output.
Web UI frameworks can be action-based or component-based.
The API defined by the Jakarta MVC specification falls into the action-based
category and is, therefore, not intended as a replacement for component-based
frameworks like Java Server Faces (JSF), but as a different approach to build Web
applications on the Jakarta EE platform.
36#Java2Days #OpenDDR #MVC
Demo
21-23 December 2020 #Virtual
Links
 OpenDDR Website:
http://openddr.mobi
 OpenDDR Sources and Data:
https://github.com/OpenDDRmobi
 Mailing List:
https://groups.google.com/g/openddr
 Jakarta MVC:
https://jakarta.ee/specifications/mvc/
 Spring Mobile:
https://projects.spring.io/spring-mobile/
38#Java2Days #OpenDDR #MVC
Thank You !
21-23 December 2020 #Virtual

Mais conteúdo relacionado

Mais procurados

Orchestraing the Blockchain Using Containers
Orchestraing the Blockchain Using ContainersOrchestraing the Blockchain Using Containers
Orchestraing the Blockchain Using ContainersAndrew Kennedy
 
SachinBC_Resume
SachinBC_ResumeSachinBC_Resume
SachinBC_ResumeSachin BC
 
Open Source Licensing: Types, Strategies and Compliance
Open Source Licensing: Types, Strategies and ComplianceOpen Source Licensing: Types, Strategies and Compliance
Open Source Licensing: Types, Strategies and ComplianceAll Things Open
 
Extending Java EE with CDI and JBoss Forge
Extending Java EE with CDI and JBoss ForgeExtending Java EE with CDI and JBoss Forge
Extending Java EE with CDI and JBoss ForgeAntoine Sabot-Durand
 
Kubernetes and CNCF Landscape 101
Kubernetes and CNCF Landscape 101Kubernetes and CNCF Landscape 101
Kubernetes and CNCF Landscape 101Giulio Roggero
 
International Journal of Engineering Research and Development
International Journal of Engineering Research and DevelopmentInternational Journal of Engineering Research and Development
International Journal of Engineering Research and DevelopmentIJERD Editor
 
Dejan Podgorsek - Is Hyperledger Fabric secure enough for your Business?
Dejan Podgorsek - Is Hyperledger Fabric secure enough for your Business?Dejan Podgorsek - Is Hyperledger Fabric secure enough for your Business?
Dejan Podgorsek - Is Hyperledger Fabric secure enough for your Business?Hacken_Ecosystem
 
Android dev o_auth
Android dev o_authAndroid dev o_auth
Android dev o_authlzongren
 
Bringing Docker to the Cloud
Bringing Docker to the CloudBringing Docker to the Cloud
Bringing Docker to the CloudAndrew Kennedy
 
Visage Android Hands-on Lab
Visage Android Hands-on LabVisage Android Hands-on Lab
Visage Android Hands-on LabStephen Chin
 
IEEE Day 2013 - Reverse Engineering an Android Application
IEEE Day 2013 - Reverse Engineering an Android ApplicationIEEE Day 2013 - Reverse Engineering an Android Application
IEEE Day 2013 - Reverse Engineering an Android ApplicationRufatet Babakishiyev
 
Pi Day 2022 - from IoT to MySQL HeatWave Database Service
Pi Day 2022 -  from IoT to MySQL HeatWave Database ServicePi Day 2022 -  from IoT to MySQL HeatWave Database Service
Pi Day 2022 - from IoT to MySQL HeatWave Database ServiceFrederic Descamps
 

Mais procurados (20)

IE issues with AJAX Apps
IE issues with AJAX AppsIE issues with AJAX Apps
IE issues with AJAX Apps
 
Orchestraing the Blockchain Using Containers
Orchestraing the Blockchain Using ContainersOrchestraing the Blockchain Using Containers
Orchestraing the Blockchain Using Containers
 
SachinBC_Resume
SachinBC_ResumeSachinBC_Resume
SachinBC_Resume
 
Open Source Licensing: Types, Strategies and Compliance
Open Source Licensing: Types, Strategies and ComplianceOpen Source Licensing: Types, Strategies and Compliance
Open Source Licensing: Types, Strategies and Compliance
 
Android NDK: Entrando no Mundo Nativo
Android NDK: Entrando no Mundo NativoAndroid NDK: Entrando no Mundo Nativo
Android NDK: Entrando no Mundo Nativo
 
Extending Java EE with CDI and JBoss Forge
Extending Java EE with CDI and JBoss ForgeExtending Java EE with CDI and JBoss Forge
Extending Java EE with CDI and JBoss Forge
 
Kubernetes and CNCF Landscape 101
Kubernetes and CNCF Landscape 101Kubernetes and CNCF Landscape 101
Kubernetes and CNCF Landscape 101
 
The path to cdi 2.0
The path to cdi 2.0The path to cdi 2.0
The path to cdi 2.0
 
International Journal of Engineering Research and Development
International Journal of Engineering Research and DevelopmentInternational Journal of Engineering Research and Development
International Journal of Engineering Research and Development
 
Android dev o_auth
Android dev o_authAndroid dev o_auth
Android dev o_auth
 
In Search of Segmentation
In Search of SegmentationIn Search of Segmentation
In Search of Segmentation
 
Advanced CDI in live coding
Advanced CDI in live codingAdvanced CDI in live coding
Advanced CDI in live coding
 
Dejan Podgorsek - Is Hyperledger Fabric secure enough for your Business?
Dejan Podgorsek - Is Hyperledger Fabric secure enough for your Business?Dejan Podgorsek - Is Hyperledger Fabric secure enough for your Business?
Dejan Podgorsek - Is Hyperledger Fabric secure enough for your Business?
 
Android dev o_auth
Android dev o_authAndroid dev o_auth
Android dev o_auth
 
FluentD vs. Logstash
FluentD vs. LogstashFluentD vs. Logstash
FluentD vs. Logstash
 
Bringing Docker to the Cloud
Bringing Docker to the CloudBringing Docker to the Cloud
Bringing Docker to the Cloud
 
Visage Android Hands-on Lab
Visage Android Hands-on LabVisage Android Hands-on Lab
Visage Android Hands-on Lab
 
IEEE Day 2013 - Reverse Engineering an Android Application
IEEE Day 2013 - Reverse Engineering an Android ApplicationIEEE Day 2013 - Reverse Engineering an Android Application
IEEE Day 2013 - Reverse Engineering an Android Application
 
Android
Android Android
Android
 
Pi Day 2022 - from IoT to MySQL HeatWave Database Service
Pi Day 2022 -  from IoT to MySQL HeatWave Database ServicePi Day 2022 -  from IoT to MySQL HeatWave Database Service
Pi Day 2022 - from IoT to MySQL HeatWave Database Service
 

Semelhante a OpenDDR and Jakarta MVC - Java2Days 2020 Virtual

Apache DeviceMap - ApacheCon Europe 2014
Apache DeviceMap - ApacheCon Europe 2014Apache DeviceMap - ApacheCon Europe 2014
Apache DeviceMap - ApacheCon Europe 2014Werner Keil
 
Apache DeviceMap - ApacheCon core Europe 2015
Apache DeviceMap - ApacheCon core Europe 2015Apache DeviceMap - ApacheCon core Europe 2015
Apache DeviceMap - ApacheCon core Europe 2015Werner Keil
 
Docker Bday #5, SF Edition: Introduction to Docker
Docker Bday #5, SF Edition: Introduction to DockerDocker Bday #5, SF Edition: Introduction to Docker
Docker Bday #5, SF Edition: Introduction to DockerDocker, Inc.
 
Go for Operations
Go for OperationsGo for Operations
Go for OperationsQAware GmbH
 
Docker Birthday #5 Meetup Cluj - Presentation
Docker Birthday #5 Meetup Cluj - PresentationDocker Birthday #5 Meetup Cluj - Presentation
Docker Birthday #5 Meetup Cluj - PresentationAlex Vranceanu
 
Java Development Company | Xicom
Java Development Company | XicomJava Development Company | Xicom
Java Development Company | XicomRyanForeman5
 
Node.js vs. java which one should you choose for backend development
Node.js vs. java  which one should you choose for backend development Node.js vs. java  which one should you choose for backend development
Node.js vs. java which one should you choose for backend development Moon Technolabs Pvt. Ltd.
 
Deploying deep learning models with Docker and Kubernetes
Deploying deep learning models with Docker and KubernetesDeploying deep learning models with Docker and Kubernetes
Deploying deep learning models with Docker and KubernetesPetteriTeikariPhD
 
Docker Birthday #3 - Intro to Docker Slides
Docker Birthday #3 - Intro to Docker SlidesDocker Birthday #3 - Intro to Docker Slides
Docker Birthday #3 - Intro to Docker SlidesDocker, Inc.
 
Docker Birthday #3 Slides - Overview
Docker Birthday #3 Slides - OverviewDocker Birthday #3 Slides - Overview
Docker Birthday #3 Slides - OverviewChris Ciborowski
 
Node.js Development Tools
 Node.js Development Tools Node.js Development Tools
Node.js Development ToolsSofiaCarter4
 
Azure ai on premises with docker
Azure ai on premises with  dockerAzure ai on premises with  docker
Azure ai on premises with dockerVishwas N
 
Tools and Recipes to Replatform Monolithic Apps to Modern Cloud Environments
Tools and Recipes to Replatform Monolithic Apps to Modern Cloud EnvironmentsTools and Recipes to Replatform Monolithic Apps to Modern Cloud Environments
Tools and Recipes to Replatform Monolithic Apps to Modern Cloud EnvironmentsVMware Tanzu
 
How to develop your first cloud-native Applications with Java
How to develop your first cloud-native Applications with JavaHow to develop your first cloud-native Applications with Java
How to develop your first cloud-native Applications with JavaNiklas Heidloff
 
Akka.Net and .Net Core - The Developer Conference 2018 Florianopolis
Akka.Net and .Net Core - The Developer Conference 2018 FlorianopolisAkka.Net and .Net Core - The Developer Conference 2018 Florianopolis
Akka.Net and .Net Core - The Developer Conference 2018 FlorianopolisAlexandre Brandão Lustosa
 
Tampere Docker meetup - Happy 5th Birthday Docker
Tampere Docker meetup - Happy 5th Birthday DockerTampere Docker meetup - Happy 5th Birthday Docker
Tampere Docker meetup - Happy 5th Birthday DockerSakari Hoisko
 
Ii 1300-java essentials for android
Ii 1300-java essentials for androidIi 1300-java essentials for android
Ii 1300-java essentials for androidAdrian Mikeliunas
 
HPC Cloud Burst Using Docker
HPC Cloud Burst Using DockerHPC Cloud Burst Using Docker
HPC Cloud Burst Using DockerIRJET Journal
 

Semelhante a OpenDDR and Jakarta MVC - Java2Days 2020 Virtual (20)

Apache DeviceMap - ApacheCon Europe 2014
Apache DeviceMap - ApacheCon Europe 2014Apache DeviceMap - ApacheCon Europe 2014
Apache DeviceMap - ApacheCon Europe 2014
 
Apache DeviceMap - ApacheCon core Europe 2015
Apache DeviceMap - ApacheCon core Europe 2015Apache DeviceMap - ApacheCon core Europe 2015
Apache DeviceMap - ApacheCon core Europe 2015
 
Nareshkumar_CV
Nareshkumar_CVNareshkumar_CV
Nareshkumar_CV
 
Docker Bday #5, SF Edition: Introduction to Docker
Docker Bday #5, SF Edition: Introduction to DockerDocker Bday #5, SF Edition: Introduction to Docker
Docker Bday #5, SF Edition: Introduction to Docker
 
Go for Operations
Go for OperationsGo for Operations
Go for Operations
 
Docker Birthday #5 Meetup Cluj - Presentation
Docker Birthday #5 Meetup Cluj - PresentationDocker Birthday #5 Meetup Cluj - Presentation
Docker Birthday #5 Meetup Cluj - Presentation
 
Java Development Company | Xicom
Java Development Company | XicomJava Development Company | Xicom
Java Development Company | Xicom
 
Node.js vs. java which one should you choose for backend development
Node.js vs. java  which one should you choose for backend development Node.js vs. java  which one should you choose for backend development
Node.js vs. java which one should you choose for backend development
 
Deploying deep learning models with Docker and Kubernetes
Deploying deep learning models with Docker and KubernetesDeploying deep learning models with Docker and Kubernetes
Deploying deep learning models with Docker and Kubernetes
 
Docker Birthday #3 - Intro to Docker Slides
Docker Birthday #3 - Intro to Docker SlidesDocker Birthday #3 - Intro to Docker Slides
Docker Birthday #3 - Intro to Docker Slides
 
Docker Birthday #3 Slides - Overview
Docker Birthday #3 Slides - OverviewDocker Birthday #3 Slides - Overview
Docker Birthday #3 Slides - Overview
 
Node.js Development Tools
 Node.js Development Tools Node.js Development Tools
Node.js Development Tools
 
Azure ai on premises with docker
Azure ai on premises with  dockerAzure ai on premises with  docker
Azure ai on premises with docker
 
Tools and Recipes to Replatform Monolithic Apps to Modern Cloud Environments
Tools and Recipes to Replatform Monolithic Apps to Modern Cloud EnvironmentsTools and Recipes to Replatform Monolithic Apps to Modern Cloud Environments
Tools and Recipes to Replatform Monolithic Apps to Modern Cloud Environments
 
How to develop your first cloud-native Applications with Java
How to develop your first cloud-native Applications with JavaHow to develop your first cloud-native Applications with Java
How to develop your first cloud-native Applications with Java
 
Akka.Net and .Net Core - The Developer Conference 2018 Florianopolis
Akka.Net and .Net Core - The Developer Conference 2018 FlorianopolisAkka.Net and .Net Core - The Developer Conference 2018 Florianopolis
Akka.Net and .Net Core - The Developer Conference 2018 Florianopolis
 
Dagster @ R&S MNT
Dagster @ R&S MNTDagster @ R&S MNT
Dagster @ R&S MNT
 
Tampere Docker meetup - Happy 5th Birthday Docker
Tampere Docker meetup - Happy 5th Birthday DockerTampere Docker meetup - Happy 5th Birthday Docker
Tampere Docker meetup - Happy 5th Birthday Docker
 
Ii 1300-java essentials for android
Ii 1300-java essentials for androidIi 1300-java essentials for android
Ii 1300-java essentials for android
 
HPC Cloud Burst Using Docker
HPC Cloud Burst Using DockerHPC Cloud Burst Using Docker
HPC Cloud Burst Using Docker
 

Mais de Werner Keil

Securing eHealth, eGovernment and eBanking with Java - DWX '21
Securing eHealth, eGovernment and eBanking with Java - DWX '21Securing eHealth, eGovernment and eBanking with Java - DWX '21
Securing eHealth, eGovernment and eBanking with Java - DWX '21Werner Keil
 
How JSR 385 could have Saved the Mars Climate Orbiter - Zurich IoT Day 2021
How JSR 385 could have Saved the Mars Climate Orbiter - Zurich IoT Day 2021How JSR 385 could have Saved the Mars Climate Orbiter - Zurich IoT Day 2021
How JSR 385 could have Saved the Mars Climate Orbiter - Zurich IoT Day 2021Werner Keil
 
NoSQL Endgame - Java2Days 2020 Virtual
NoSQL Endgame - Java2Days 2020 VirtualNoSQL Endgame - Java2Days 2020 Virtual
NoSQL Endgame - Java2Days 2020 VirtualWerner Keil
 
How JSR 385 could have Saved the Mars Climate Orbiter - JFokus 2020
How JSR 385 could have Saved the Mars Climate Orbiter - JFokus 2020How JSR 385 could have Saved the Mars Climate Orbiter - JFokus 2020
How JSR 385 could have Saved the Mars Climate Orbiter - JFokus 2020Werner Keil
 
Money, Money, Money, can be funny with JSR 354 (Devoxx BE)
Money, Money, Money, can be funny with JSR 354 (Devoxx BE)Money, Money, Money, can be funny with JSR 354 (Devoxx BE)
Money, Money, Money, can be funny with JSR 354 (Devoxx BE)Werner Keil
 
Money, Money, Money, can be funny with JSR 354 (DWX 2019)
Money, Money, Money, can be funny with JSR 354 (DWX 2019)Money, Money, Money, can be funny with JSR 354 (DWX 2019)
Money, Money, Money, can be funny with JSR 354 (DWX 2019)Werner Keil
 
NoSQL: The first New Jakarta EE Specification (DWX 2019)
NoSQL: The first New Jakarta EE Specification (DWX 2019)NoSQL: The first New Jakarta EE Specification (DWX 2019)
NoSQL: The first New Jakarta EE Specification (DWX 2019)Werner Keil
 
How JSR 385 could have Saved the Mars Climate Orbiter - Adopt-a-JSR Day
How JSR 385 could have Saved the Mars Climate Orbiter - Adopt-a-JSR DayHow JSR 385 could have Saved the Mars Climate Orbiter - Adopt-a-JSR Day
How JSR 385 could have Saved the Mars Climate Orbiter - Adopt-a-JSR DayWerner Keil
 
JNoSQL: The Definitive Solution for Java and NoSQL Databases
JNoSQL: The Definitive Solution for Java and NoSQL DatabasesJNoSQL: The Definitive Solution for Java and NoSQL Databases
JNoSQL: The Definitive Solution for Java and NoSQL DatabasesWerner Keil
 
Eclipse JNoSQL: The Definitive Solution for Java and NoSQL Databases
Eclipse JNoSQL: The Definitive Solution for Java and NoSQL DatabasesEclipse JNoSQL: The Definitive Solution for Java and NoSQL Databases
Eclipse JNoSQL: The Definitive Solution for Java and NoSQL DatabasesWerner Keil
 
Physikal - Using Kotlin for Clean Energy - KUG Munich
Physikal - Using Kotlin for Clean Energy - KUG MunichPhysikal - Using Kotlin for Clean Energy - KUG Munich
Physikal - Using Kotlin for Clean Energy - KUG MunichWerner Keil
 
Physikal - JSR 363 and Kotlin for Clean Energy - Java2Days 2017
Physikal - JSR 363 and Kotlin for Clean Energy - Java2Days 2017Physikal - JSR 363 and Kotlin for Clean Energy - Java2Days 2017
Physikal - JSR 363 and Kotlin for Clean Energy - Java2Days 2017Werner Keil
 
Performance Monitoring for the Cloud - Java2Days 2017
Performance Monitoring for the Cloud - Java2Days 2017Performance Monitoring for the Cloud - Java2Days 2017
Performance Monitoring for the Cloud - Java2Days 2017Werner Keil
 
Eclipse Science F2F 2016 - JSR 363
Eclipse Science F2F 2016 - JSR 363Eclipse Science F2F 2016 - JSR 363
Eclipse Science F2F 2016 - JSR 363Werner Keil
 
Java2Days - Security for JavaEE and the Cloud
Java2Days - Security for JavaEE and the CloudJava2Days - Security for JavaEE and the Cloud
Java2Days - Security for JavaEE and the CloudWerner Keil
 
Apache DeviceMap - Web-Dev-BBQ Stuttgart
Apache DeviceMap - Web-Dev-BBQ StuttgartApache DeviceMap - Web-Dev-BBQ Stuttgart
Apache DeviceMap - Web-Dev-BBQ StuttgartWerner Keil
 
The First IoT JSR: Units of Measurement - JUG Berlin-Brandenburg
The First IoT JSR: Units of Measurement - JUG Berlin-BrandenburgThe First IoT JSR: Units of Measurement - JUG Berlin-Brandenburg
The First IoT JSR: Units of Measurement - JUG Berlin-BrandenburgWerner Keil
 
JSR 354: Money and Currency API - Short Overview
JSR 354: Money and Currency API - Short OverviewJSR 354: Money and Currency API - Short Overview
JSR 354: Money and Currency API - Short OverviewWerner Keil
 
JavaLand: Quantified Social - Fitness-Geräte und -Portale mit Agorava
JavaLand: Quantified Social - Fitness-Geräte und -Portale mit AgoravaJavaLand: Quantified Social - Fitness-Geräte und -Portale mit Agorava
JavaLand: Quantified Social - Fitness-Geräte und -Portale mit AgoravaWerner Keil
 
Enterprise 2.0 with Open Source Frameworks like Agorava
Enterprise 2.0 with Open Source Frameworks like AgoravaEnterprise 2.0 with Open Source Frameworks like Agorava
Enterprise 2.0 with Open Source Frameworks like AgoravaWerner Keil
 

Mais de Werner Keil (20)

Securing eHealth, eGovernment and eBanking with Java - DWX '21
Securing eHealth, eGovernment and eBanking with Java - DWX '21Securing eHealth, eGovernment and eBanking with Java - DWX '21
Securing eHealth, eGovernment and eBanking with Java - DWX '21
 
How JSR 385 could have Saved the Mars Climate Orbiter - Zurich IoT Day 2021
How JSR 385 could have Saved the Mars Climate Orbiter - Zurich IoT Day 2021How JSR 385 could have Saved the Mars Climate Orbiter - Zurich IoT Day 2021
How JSR 385 could have Saved the Mars Climate Orbiter - Zurich IoT Day 2021
 
NoSQL Endgame - Java2Days 2020 Virtual
NoSQL Endgame - Java2Days 2020 VirtualNoSQL Endgame - Java2Days 2020 Virtual
NoSQL Endgame - Java2Days 2020 Virtual
 
How JSR 385 could have Saved the Mars Climate Orbiter - JFokus 2020
How JSR 385 could have Saved the Mars Climate Orbiter - JFokus 2020How JSR 385 could have Saved the Mars Climate Orbiter - JFokus 2020
How JSR 385 could have Saved the Mars Climate Orbiter - JFokus 2020
 
Money, Money, Money, can be funny with JSR 354 (Devoxx BE)
Money, Money, Money, can be funny with JSR 354 (Devoxx BE)Money, Money, Money, can be funny with JSR 354 (Devoxx BE)
Money, Money, Money, can be funny with JSR 354 (Devoxx BE)
 
Money, Money, Money, can be funny with JSR 354 (DWX 2019)
Money, Money, Money, can be funny with JSR 354 (DWX 2019)Money, Money, Money, can be funny with JSR 354 (DWX 2019)
Money, Money, Money, can be funny with JSR 354 (DWX 2019)
 
NoSQL: The first New Jakarta EE Specification (DWX 2019)
NoSQL: The first New Jakarta EE Specification (DWX 2019)NoSQL: The first New Jakarta EE Specification (DWX 2019)
NoSQL: The first New Jakarta EE Specification (DWX 2019)
 
How JSR 385 could have Saved the Mars Climate Orbiter - Adopt-a-JSR Day
How JSR 385 could have Saved the Mars Climate Orbiter - Adopt-a-JSR DayHow JSR 385 could have Saved the Mars Climate Orbiter - Adopt-a-JSR Day
How JSR 385 could have Saved the Mars Climate Orbiter - Adopt-a-JSR Day
 
JNoSQL: The Definitive Solution for Java and NoSQL Databases
JNoSQL: The Definitive Solution for Java and NoSQL DatabasesJNoSQL: The Definitive Solution for Java and NoSQL Databases
JNoSQL: The Definitive Solution for Java and NoSQL Databases
 
Eclipse JNoSQL: The Definitive Solution for Java and NoSQL Databases
Eclipse JNoSQL: The Definitive Solution for Java and NoSQL DatabasesEclipse JNoSQL: The Definitive Solution for Java and NoSQL Databases
Eclipse JNoSQL: The Definitive Solution for Java and NoSQL Databases
 
Physikal - Using Kotlin for Clean Energy - KUG Munich
Physikal - Using Kotlin for Clean Energy - KUG MunichPhysikal - Using Kotlin for Clean Energy - KUG Munich
Physikal - Using Kotlin for Clean Energy - KUG Munich
 
Physikal - JSR 363 and Kotlin for Clean Energy - Java2Days 2017
Physikal - JSR 363 and Kotlin for Clean Energy - Java2Days 2017Physikal - JSR 363 and Kotlin for Clean Energy - Java2Days 2017
Physikal - JSR 363 and Kotlin for Clean Energy - Java2Days 2017
 
Performance Monitoring for the Cloud - Java2Days 2017
Performance Monitoring for the Cloud - Java2Days 2017Performance Monitoring for the Cloud - Java2Days 2017
Performance Monitoring for the Cloud - Java2Days 2017
 
Eclipse Science F2F 2016 - JSR 363
Eclipse Science F2F 2016 - JSR 363Eclipse Science F2F 2016 - JSR 363
Eclipse Science F2F 2016 - JSR 363
 
Java2Days - Security for JavaEE and the Cloud
Java2Days - Security for JavaEE and the CloudJava2Days - Security for JavaEE and the Cloud
Java2Days - Security for JavaEE and the Cloud
 
Apache DeviceMap - Web-Dev-BBQ Stuttgart
Apache DeviceMap - Web-Dev-BBQ StuttgartApache DeviceMap - Web-Dev-BBQ Stuttgart
Apache DeviceMap - Web-Dev-BBQ Stuttgart
 
The First IoT JSR: Units of Measurement - JUG Berlin-Brandenburg
The First IoT JSR: Units of Measurement - JUG Berlin-BrandenburgThe First IoT JSR: Units of Measurement - JUG Berlin-Brandenburg
The First IoT JSR: Units of Measurement - JUG Berlin-Brandenburg
 
JSR 354: Money and Currency API - Short Overview
JSR 354: Money and Currency API - Short OverviewJSR 354: Money and Currency API - Short Overview
JSR 354: Money and Currency API - Short Overview
 
JavaLand: Quantified Social - Fitness-Geräte und -Portale mit Agorava
JavaLand: Quantified Social - Fitness-Geräte und -Portale mit AgoravaJavaLand: Quantified Social - Fitness-Geräte und -Portale mit Agorava
JavaLand: Quantified Social - Fitness-Geräte und -Portale mit Agorava
 
Enterprise 2.0 with Open Source Frameworks like Agorava
Enterprise 2.0 with Open Source Frameworks like AgoravaEnterprise 2.0 with Open Source Frameworks like Agorava
Enterprise 2.0 with Open Source Frameworks like Agorava
 

Último

Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsNathaniel Shimoni
 
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxfnnc6jmgwh
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality AssuranceInflectra
 
Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfIngrid Airi González
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfNeo4j
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Alkin Tezuysal
 
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...itnewsafrica
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Nikki Chapple
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesThousandEyes
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Mark Goldstein
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security ObservabilityGlenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security Observabilityitnewsafrica
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...itnewsafrica
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...Wes McKinney
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 

Último (20)

Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
 
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
 
Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdf
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdf
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
 
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security ObservabilityGlenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 

OpenDDR and Jakarta MVC - Java2Days 2020 Virtual

  • 1. Werner Keil, CATMedia Ivar Grimstad, Eclipse Foundation OpenDDR and Jakarta MVC 21-23 December 2020 #Virtual
  • 2. Agenda  Introduction  History and Comparison  Project Overview  MVC Frameworks  Spring Mobile  Jakarta MVC  Demo 2#Java2Days #OpenDDR #MVC
  • 3. Who Am I?  Consultant – Coach  Creative Cosmopolitan  Open Source Evangelist  Software Architect  Maintenance Lead – JSR 385  Maintenance Lead – JSR 354  Jakarta EE Specification Committee Member  Author, Speaker Twitter @wernerkeil 3#Java2Days #OpenDDR #MVC
  • 4. ...and me!! • Jakarta EE Developer Advocate • Java Champion • JUG Leader
  • 5.
  • 6. What is a DDR? 6#Java2Days #OpenDDR #MVC
  • 7. What is a DDR? 7#Java2Days #OpenDDR #MVC
  • 8. What is a DDR? 8#Java2Days #OpenDDR #MVC
  • 9. What is a DDR? 9#Java2Days #OpenDDR #MVC
  • 10. What is OpenDDR? Day after day we all experience an incredible growth and fragmentation of devices available on a more and more proliferated market. Accurately tracking their specs has become very hard work. But this complexity can be reduced if managed by a community daily involved in improving the Device Description Repository (DDR). This is the essence of the OpenDDR project, the best open and free repository of device descriptions currently available. 10#Java2Days #OpenDDR #MVC
  • 11. Why is OpenDDR different? If you want a comfortable user experience, you need dynamic, “responsive” content according to hardware and browser of your device. Device Description Repositories (DDR) are databases that plenty of information concerning mobile phones, tablets, Interactive TVs, set top boxes and any device having a Web browser. DDR allow developers to realize applications providing appropriate user experience on each client There are several DDR projects, most demand often hefty fees to access to their databases and APIs or restricts free use to non-commercial applications. 11#Java2Days #OpenDDR #MVC
  • 14. WURFL Wall since August 2011 #Java2Days #OpenDDR #MVC 14
  • 15. WURFL no longer Open Source #Java2Days #OpenDDR #MVC 15
  • 16. Apache Trail  In late 2011 a few months after OpenDDR started, Apache committers and members got aware of the technology and its relevance. Deciding to create both a unified Device Repository and APIs for Java and .NET.  OpenDDR was a Founding Member of the Apache DeviceMap Incubator.  It graduated in late 2014, but compared to OpenDDR with monthly release cycles, that was not archived for long despite hopes that an Apache project would attract more contributors, activity and releases decreased in the years after.  So DeviceMap was retired in January 2017. #Java2Days #OpenDDR #MVC 16
  • 17. Back to the Roots  About a year after the reboot under OpenDDR.mobi the project saw record- breaking downloads of nearly 175,000 in July 2018 alone. With total of almost 500k in 2018.  This continued with 6-digits in 2019 and despite COVID-19 also affecting top sites, it should be 5-digit by the end of the year, more than DeviceMap ever had in its lifespan between 2011 and 2016. #Java2Days #OpenDDR #MVC 17
  • 18. Project Comparison Project Strength Weakness License 51Degrees.mobi More Predictable product catalogue, .NET Support Free license contains fewer devices, usually less accurate Repository: MPL or Commercial („Pro Edition“) API: Mozilla Public License DeviceAtlas Data is multi- sourced from industry-leading partners. Some W3C compliance Only commercial licenses. Repository: Commercial license API: Commercial license WURFL Former Community project (till Aug 2011) The license does not allow to use the DDR without accessing through the WURFL API the API does not allow use in projects with a proprietary license Repository: Use not allowed if accessed without WURFL APIs API license: dual licensing AGPL and commercial (Changed since August 2011) NetBiscuits Service based, seems easy to integrate at least via JavaScript Free and SME offerings dependent on using their JavaScript , no API below Enterprise or “OEM” price range Repository: N/A API: Commercial license Volantis Relatively wide device coverage Only commercial licenses. Multiple takeovers, the last owner did not show support for it any more. Repository: Commercial license API: Commercial license
  • 20. Why Open Standards?  OpenDDR stakes on open standards: • Repository is fully compliant with W3C DDR • SimpleDDR library implements the W3C DDR Simple APIs  From a developer point of view: • You can start developing your application with confidence that your product will work with any W3C DDR Simple API implementation, no binding to OpenDDR DDR implementation • Adopting a W3C standard, the Copyright of these interfaces is owned and protected by W3C against any IP or patent claim  The Apache License means that you are free to use all of OpenDDR in open source or proprietary software. 20#Java2Days #OpenDDR #MVC
  • 21. What's different in OpenDDR?  Users can update the operating systems of their devices either with custom builds, or just install a new browser.  E.g. Google‘s Project Ara aimed for modular devices with an almost endless combination of capabilities.  The identification of a device through the original User Agent exposed by manufactures is not always enough.  OpenDDR considers the device as a combination of three important aspects: Physical Device Operating System Web Browser 21#Java2Days #OpenDDR #MVC
  • 22. Level of Confidence  OpenDDR can identify custom builds of the operating system and third party browsers.  If a particular version of a browser or an operating system is not recognized, OpenDDR returns information about the closest version rather than not returning any information at all.  OpenDDR identifies a device, a web browser or an operating system with a certain level of Confidence.  You can specify the threshold as a target to achieve in the identification process. The higher the confidence the slower or more memory consuming the process may be. 22#Java2Days #OpenDDR #MVC
  • 23. Patching and Optimization  Lowering the confidence speeds up the process, even if you can have less accurate results.  OpenDDR supports Patching the data source.  In OpenDDR we can specify a reduced vocabulary in order to limit the memory load. • It can be specified in the oddr.limited.vocabulary.path property of the OpenDDR properties file. • It allows developers to choose which properties need to be loaded in memory at startup from the datasource. In most case developers need only a subset of properties from the datasource. 23#Java2Days #OpenDDR #MVC
  • 24. Load Test  We compared OpenDDR with WURFL API (1.3.1) in terms of memory load in two situations: Without limited vocabulary With limited vocabulary  We used jMeter as workload generator, configuring it in order to generate 100 requests per seconds from 10 workers with a different user agent. The user agents set contained ten of most common user agent observed in a real environment.  Both OpenDDR DDR and WURFL API were tested in a simple web app. 24#Java2Days #OpenDDR #MVC
  • 25. Test Results  We chose as limited vocabulary the W3C core vocabulary  The memory load of OpenDDR with limited vocabulary is only about 50MB and after initialization, OpenDDR won't show a memory spike.  Both APIs identified correctly all the user agents in the HTTP request #Java2Days #OpenDDR #MVC 25
  • 26. DDR Service Retrieval To create the identification service we use the ServiceFactory of W3C DDR-Simple-API initializationProperties.load(context.getResourceAsStream ("/WEB-INF/oddr.properties")); Service identificationService = ServiceFactory.newService(“mobi.openddr.ssimple.DDRService", initializationProperties.getProperty(DDRService.ODDR_VOCABULARY_IRI), initializationProperties); The first argument is the class implementing the DDRService; the second argument is the default vocabulary used in the identification if the vocabulary is not specified; the third argument is the SimpleDDR properties file. #Java2Days #OpenDDR #MVC 26
  • 27. New Java Client While departing from W3C compliance a new Java client offers more flexibility e.g. when it comes to ways of loading device data. Data can be loaded via: • URL • JAR file • File system Get classifier from a URL: Classifier cl = Classifier.builder().with(LoaderOption.URL, "http://openddr.mobi/data/snapshot/"); 27#Java2Days #OpenDDR #MVC
  • 28. New Java Client (2) Get the client using JAR data source Classifier cl = Classifier.builder().with(LoaderOption.JAR); Get client using data from file system Classifier cl = Classifier.builder().with(LoaderOption.FOLDER, "/some/path/OpenDDR/latest/devicedata"); The last option is closest to the W3C DDR client. 28#Java2Days #OpenDDR #MVC
  • 29. Metro – OpenDDR for .NET 29#Java2Days #OpenDDR #MVC
  • 30. OpenDDR  Open, free, based on W3C standard. Update to DDR by the community and device manufacturers.  Identification is not only for the device as a single entity but extended to the web browser and the operating system. OpenDDR can identify third parties web browsers and customized operating systems. A developer can specify the vocabulary and the aspects of the property he wants to know.  Easy migration: Device Repository and most OpenDDR APIs are compatible with W3C DDR 30#Java2Days #OpenDDR #MVC
  • 32. Spring Mobile Spring Mobile is a framework on top of Spring MVC that provides capabilities to detect the type of device making a request to your Spring web site and serve alternate views based on that device. Features:  A Device resolver abstraction for server-side detection of mobile and tablet devices  Site preference management that allows the user to indicate if he or she prefers a “normal”, “mobile”, or “tablet” experience  A site switcher capable of switching the user to the most appropriate site, either mobile, tablet, or normal, based on his or her device and optionally indicated site preference  Device aware view management for organizing and managing different views for specific devices 32#Java2Days #OpenDDR #MVC
  • 33. Device Detection @Controller public class HomeController { private static final Logger logger = LoggerFactory.getLogger(HomeController.class); @RequestMapping("/") public void home(Device device) { if (device.isMobile()) { logger.info("Hello mobile world!"); } else if (device.isTablet()) { logger.info("Hello tablet world!"); } else { logger.info("Hello desktop world!"); } } } 33#Java2Days #OpenDDR #MVC
  • 34. Site Preference @RequestMapping("/") public String home(SitePreference sitePreference, Model model) if (sitePreference == SitePreference.NORMAL) { logger.info("Site preference is normal"); return "home"; } else if (sitePreference == SitePreference.MOBILE) { logger.info("Site preference is mobile"); return "home-mobile"; } else if (sitePreference == SitePreference.TABLET) { logger.info("Site preference is tablet"); return "home-tablet"; } else { logger.info("no site preference"); return "home"; } } 34#Java2Days #OpenDDR #MVC
  • 35. Device aware View Resolution @Bean public LiteDeviceDelegatingViewResolver liteDeviceAwareViewResolver() { InternalResourceViewResolver delegate = new InternalResourceViewResolver(); delegate.setPrefix("/WEB-INF/views/"); delegate.setSuffix(".jsp"); LiteDeviceDelegatingViewResolver resolver = new LiteDeviceDelegatingViewResolver(delegate); resolver.setMobilePrefix("mobile/"); resolver.setTabletPrefix("tablet/"); return resolver; } 35#Java2Days #OpenDDR #MVC
  • 36. Jakarta MVC Model-View-Controller, or MVC, is a common pattern for Web frameworks, mostly to build HTML applications. The model refers to the application’s data or domain object, the view to the data presentation and the controller is responsible for managing input and out models and producing output. Web UI frameworks can be action-based or component-based. The API defined by the Jakarta MVC specification falls into the action-based category and is, therefore, not intended as a replacement for component-based frameworks like Java Server Faces (JSF), but as a different approach to build Web applications on the Jakarta EE platform. 36#Java2Days #OpenDDR #MVC
  • 38. Links  OpenDDR Website: http://openddr.mobi  OpenDDR Sources and Data: https://github.com/OpenDDRmobi  Mailing List: https://groups.google.com/g/openddr  Jakarta MVC: https://jakarta.ee/specifications/mvc/  Spring Mobile: https://projects.spring.io/spring-mobile/ 38#Java2Days #OpenDDR #MVC
  • 39. Thank You ! 21-23 December 2020 #Virtual