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

OpenDDR and Jakarta MVC - Java2Days 2020 Virtual

  • 1.
    Werner Keil, CATMedia IvarGrimstad, Eclipse Foundation OpenDDR and Jakarta MVC 21-23 December 2020 #Virtual
  • 2.
    Agenda  Introduction  Historyand 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!! • JakartaEE Developer Advocate • Java Champion • JUG Leader
  • 6.
    What is aDDR? 6#Java2Days #OpenDDR #MVC
  • 7.
    What is aDDR? 7#Java2Days #OpenDDR #MVC
  • 8.
    What is aDDR? 8#Java2Days #OpenDDR #MVC
  • 9.
    What is aDDR? 9#Java2Days #OpenDDR #MVC
  • 10.
    What is OpenDDR? Dayafter 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 OpenDDRdifferent? 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
  • 12.
  • 13.
  • 14.
    WURFL Wall sinceAugust 2011 #Java2Days #OpenDDR #MVC 14
  • 15.
    WURFL no longerOpen Source #Java2Days #OpenDDR #MVC 15
  • 16.
    Apache Trail  Inlate 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 theRoots  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 StrengthWeakness 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
  • 19.
  • 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 inOpenDDR?  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  Wecompared 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  Wechose 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 Tocreate 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 Whiledeparting 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 – OpenDDRfor .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
  • 31.
  • 32.
    Spring Mobile Spring Mobileis 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 classHomeController { 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 Stringhome(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 ViewResolution @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, orMVC, 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
  • 37.
  • 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-23December 2020 #Virtual