SlideShare una empresa de Scribd logo
1 de 45
Descargar para leer sin conexión
uMobile Development
      March 15, 2012
uMobile Overview
uMobile Application Server

 •   Presents browser-based mobile experience

 •   Serves as an administrative console

 •   Provides web-based modules, RESTful data to
     native app

 •   Based on uPortal
Native App Codebase

 •   Based on Titanium Appcelerator
     •   JavaScript-based platform-independent development
         framework

     •   Compile shared codebase to iPhone and Android
         applications with native controls

     •   Open source under the Apache 2.0 License
Choosing a Distribution

 •   uPortal
     •   Includes mobile framework and skin

     •   Can power the native app

 •   uMobile
     •   Branch of uPortal codebase

     •   Adds additional modules, test data
uMobile Content
Overall Development Style

 •   Create well-defined integration APIs
     •   Support personalized content, multiple sources

 •   Support common data formats (iCal, RSS)

 •   If no standard exists, define our own XSD

 •   Allow custom implementations
Calendar

 •   Read-only calendar aggregator
     •   iCal, CalDAV, XML, Bedework,
         Exchange

     •   API for custom integrations

 •   Allows for delegated
     authentication / credential
     replay

 •   Role-based feed distribution
News

 •   Read-only news aggregator

 •   RSS / Atom feeds

 •   Role-based feed distribution
Search

 •   Portlet registry

 •   Directory search results

 •   Google Search
     Appliance
Directory

 •   Uses uPortal’s person
     directory configuration

 •   Permissions control
     visibility of users, user
     attributes
Videos

 •   Displays recent posts by a
     single YouTube author

 •   Configure author name in
     portlet definition
Map

 •   Custom XSD defines map
     data format
     •   Name, geocoordinates,
         search keys, categories,
         campuses

 •   Include static JSON file of
     location data
Courses

 •   Merges multiple data
     sources

 •   Supported LMSs
     •   In-progress DAOs for Sakai
         and Moodle

     •   Looking for collaborators
Campus Life
Sample Campus Life Data
<laundromat-list xmlns="https://source.jasig.org/schemas/portlet/laundry"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="https://source.jasig.org/schemas/portlet/laundry ../xsd/laundry.xsd">

    <laundromat name="Saybrook" location-code="SY">
        <machine-type key="Washer" message-key="laundry.type.washer"
            icon-key="Washer" available="5" total="12" />
        <machine-type key="Dryer" message-key="laundry.type.dryer"
            icon-key="Dryer" available="5" total="12" />
    </laundromat>

    <laundromat name="Branford" location-code="BR">
        <machine-type key="Washer" message-key="laundry.type.washer"
            icon-key="Washer" available="2" total="10" />
        <machine-type key="Dryer" message-key="laundry.type.dryer"
            icon-key="Dryer" available="10" total="15" />
    </laundromat>

    <laundromat name="Berkeley" location-code="BK">
        <machine-type key="Washer" message-key="laundry.type.washer"
            icon-key="Washer" available="10" total="12" />
        <machine-type key="Dryer" message-key="laundry.type.dryer"
            icon-key="Dryer" available="3" total="8" />
    </laundromat>

</laundromat-list>
Custom Content
Type                           Advantages

 External Website via   •   Chose any language / framework
IFrame or Web Proxy     •   Manage outside of portal
                            framework


                        •   Well-defined API
 JSR-168 / JSR-286      •   Share views w/ desktop portal
      Portlet           •   Take advantage of portal services
                            such as auth and roles


                        •   Access to native device services
   Native Module        •   Potential performance
                            improvements
Web-based vs. Native

 •   Web-based modules
     •   Allow sharing code with web views

     •   Easier to update and deploy

 •   Native framework
     •   Young framework with quickly changing APIs

     •   Frameworks are changing quickly, want to leave
         options open
Portal / native app
             provides top-level
                 navigation



             Web-based module
                 content




Web-based Module Layout
IFrame Publishing Type

 •   Rendered as
     •   Desktop browser: include external site via IFrame

     •   Mobile browser: link to external site

     •   Native app: include in web view

 •   Examples
     •   Transit, library in default uMobile dataset
IFrame Content
Web Proxy

 •   Proxy an external website

 •   Recommendations
     •   Design specifically for web proxy view

     •   Use portal CSS styles

     •   Avoid AJAX to prevent XSS restrictions
Advanced CMS
<div class="portlet">
    <div class="portlet-content" data-role="content">
        <ul data-role="listview">
            <li data-role="list-divider">Fish!</li>
            <li>Red Fish</li>
            <li>Blue Fish</li>
        </ul>
    </div>
</div>
Custom Portlets

 •   Add mobile view layer to JSR-286 portlets

 •   New projects can use Jasig portlet archetype
     •   Creates skeleton maven project with mobile JSPs

     •   https://wiki.jasig.org/display/UMM/Using+the+uMobile
         +Portlet+Archetype

     •   http://www.youtube.com/jasigumobile
Device-Specific Views

 •   Often need a different feature or interface on one
     platform
     •   Separate layout / CSS for desktop, tablet, mobile

     •   Mouse vs. Touch-based interactions

 •   Want to share backend logic where possible
     •   Business logic

     •   Controllers
View Layer: jQuery Mobile

 •   Easily create mobile-friendly views

 •   More lightweight

 •   Fairly new project, though growing quickly

 •   Works with jQuery framework
     •   Adds touch-based events like tap, swipe, pinch

 •   MIT or GPL 2
jQuery Mobile
jQuery Mobile Skinning
Controller




                                     Model
      View Resolver




Desktop View    Mobile View



          Providing Multiple Views
Column




                            Maximized




Mobile


     Example: Calendar Portlet
Is it Mobile?

 •   Parse user agent
     •   User agent available as request header

     •   Potential for mismatch between device and preferred
         version

     •   Can use WURFL or parse manually

 •   Make decisions based on theme name
Checking the Theme
public class ThemeNameViewSelectorImpl implements IViewSelector {

    protected static final String THEME_NAME_PROPERTY = "themeName";
    protected static final String MOBILE_THEMES_KEY = "mobileThemes";
    protected static final String[] MOBILE_THEMES_DEFAULT = new String[]{ "UniversalityMobile" };

    protected final Log logger = LogFactory.getLog(getClass());

    public boolean isMobile(PortletRequest request) {

        String[] mobileThemes = request.getPreferences().getValues(MOBILE_THEMES_KEY, MOBILE_THEMES_DEFAULT);
        String themeName = request.getProperty(THEME_NAME_PROPERTY);

        // if no theme name can be found, just assume the request is for a
        // desktop client
        if (themeName == null) {
            logger.debug("No theme name found, assuming desktop environment");
            return false;
        }

        // otherwise, determine if the theme name matches one of the known
        // mobile themes
        for (String theme : mobileThemes) {
            if (themeName.equals(theme)) {
                logger.debug("Theme name " + themeName + " matches configured list of mobile themes");
                return true;
            }
        }

        logger.debug("No match found for theme name " + themeName + ", assuming desktop environment");
        return false;
    }

}
New Item Count

 •   Number indicates “new”
     items associated with a
     module

 •   Invites users to visit a
     module

 •   Set via a portlet response
     property
Setting New Item Counts
public class MinimizedStateHandlerInterceptor extends HandlerInterceptorAdapter {

    @Autowired(required = true)
    private ICoursesDao coursesDao;

    @Override
    public boolean preHandleRender(RenderRequest request, RenderResponse response, Object handler)
            throws Exception {

        if (WindowState.MINIMIZED.equals(request.getWindowState())) {

            CourseSummaryWrapper summary = coursesDao.getSummary(request);
            int newCount = summary.getNewUpdateCount();
            response.setProperty("newItemCount", String.valueOf(newCount));

            return false;
        }

        return true;
    }

}
Search Integration

 •   New search API in
     uPortal 4

 •   Based on JSR-286
     events
Search Integration

 •   Portlet responds to search event with domain-
     specific results

 •   https://wiki.jasig.org/display/UPM40/Using+the
     +new+Search+API
Notifications Integration

 •   On uMobile 1.3 roadmap

 •   Publish notifications to drop-down panel in native
     app
More Resources
uMobile Roadmap

 •   https://wiki.jasig.org/display/umobile/uMobile+1.2+
     %28Phase+3%29+Roadmap
Documentation

 •   uMobile Manual
     •   https://wiki.jasig.org/display/UMM/Manual+Home

 •   uPortal 4 Manual
     •   https://wiki.jasig.org/display/UPM40/Home

 •   Jasig Portlet Developer Space
     •   https://wiki.jasig.org/display/PLT/Portlet+Development
Documentation

 •   uMobile YouTube
     •   http://youtube.com/jasigumobile

 •   jQuery Mobile
     •   http://jquerymobile.com/test/
Additional Resources

 •   Jasig mailing lists
     •   uMobile, portlet, and uPortal lists

     •   https://wiki.jasig.org/display/JSG/Jasig+Mailing+Lists

 •   Jasig / Sakai Conference
     •   June 10 - 15 2012

     •   http://www.jasig.org/jasig-sakai-conference-2012
Questions?

Más contenido relacionado

La actualidad más candente

WebBiblio Subject Gateway System
WebBiblio Subject Gateway SystemWebBiblio Subject Gateway System
WebBiblio Subject Gateway System
Jack Eapen
 

La actualidad más candente (16)

Why Drupal?
Why Drupal?Why Drupal?
Why Drupal?
 
Website Mashup
Website MashupWebsite Mashup
Website Mashup
 
November 19, 2014 NISO Virtual Conference: Can't We All Work Together?: Inter...
November 19, 2014 NISO Virtual Conference: Can't We All Work Together?: Inter...November 19, 2014 NISO Virtual Conference: Can't We All Work Together?: Inter...
November 19, 2014 NISO Virtual Conference: Can't We All Work Together?: Inter...
 
Past present and future of event registration in drupal
Past present and future of event registration in drupalPast present and future of event registration in drupal
Past present and future of event registration in drupal
 
November 19, 2014 NISO Virtual Conference: Can't We All Work Together?: Inter...
November 19, 2014 NISO Virtual Conference: Can't We All Work Together?: Inter...November 19, 2014 NISO Virtual Conference: Can't We All Work Together?: Inter...
November 19, 2014 NISO Virtual Conference: Can't We All Work Together?: Inter...
 
Implementing OpenAthens Single Sign-On Authentication
Implementing OpenAthens Single Sign-On AuthenticationImplementing OpenAthens Single Sign-On Authentication
Implementing OpenAthens Single Sign-On Authentication
 
Discovery Layers: An Overview and Case Study
Discovery Layers: An Overview and Case StudyDiscovery Layers: An Overview and Case Study
Discovery Layers: An Overview and Case Study
 
Doing Authentication
Doing AuthenticationDoing Authentication
Doing Authentication
 
WebBiblio Subject Gateway System
WebBiblio Subject Gateway SystemWebBiblio Subject Gateway System
WebBiblio Subject Gateway System
 
MVC Web Application
MVC Web ApplicationMVC Web Application
MVC Web Application
 
Drupal 8 Basic Training - DrupalEurope 2018 - Maarten De Block
Drupal 8 Basic Training - DrupalEurope 2018 - Maarten De BlockDrupal 8 Basic Training - DrupalEurope 2018 - Maarten De Block
Drupal 8 Basic Training - DrupalEurope 2018 - Maarten De Block
 
CeCC Single Source Publishing Examples
CeCC Single Source Publishing ExamplesCeCC Single Source Publishing Examples
CeCC Single Source Publishing Examples
 
Evergreen oss
Evergreen ossEvergreen oss
Evergreen oss
 
Everyday Tools for the Semantic Web Developer
Everyday Tools for the Semantic Web DeveloperEveryday Tools for the Semantic Web Developer
Everyday Tools for the Semantic Web Developer
 
72d5drupal
72d5drupal72d5drupal
72d5drupal
 
Html5
Html5Html5
Html5
 

Similar a uMobile Development Strategies

WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...
Fabio Franzini
 
Best Practices in Widget Development - Examples and Counterexamples
Best Practices in Widget Development  - Examples and CounterexamplesBest Practices in Widget Development  - Examples and Counterexamples
Best Practices in Widget Development - Examples and Counterexamples
ROLE Project
 
An Introduction to Tornado
An Introduction to TornadoAn Introduction to Tornado
An Introduction to Tornado
Gavin Roy
 
Drupal and mobile devices komelin konstanin (eng)
Drupal and mobile devices komelin konstanin (eng)Drupal and mobile devices komelin konstanin (eng)
Drupal and mobile devices komelin konstanin (eng)
drupalconf
 
Building SharePoint Single Page Applications Using AngularJS
Building SharePoint Single Page Applications Using AngularJSBuilding SharePoint Single Page Applications Using AngularJS
Building SharePoint Single Page Applications Using AngularJS
SharePointInstitute
 
Webdev battacherjee
Webdev battacherjeeWebdev battacherjee
Webdev battacherjee
RavingTiger
 

Similar a uMobile Development Strategies (20)

uMobile Preconference Seminar
uMobile Preconference SeminaruMobile Preconference Seminar
uMobile Preconference Seminar
 
uPortal 3.2 And Beyond
uPortal 3.2 And BeyonduPortal 3.2 And Beyond
uPortal 3.2 And Beyond
 
WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...
 
Best Practices in Widget Development - Examples and Counterexamples
Best Practices in Widget Development  - Examples and CounterexamplesBest Practices in Widget Development  - Examples and Counterexamples
Best Practices in Widget Development - Examples and Counterexamples
 
Top 10 HTML5 Features for Oracle Cloud Developers
Top 10 HTML5 Features for Oracle Cloud DevelopersTop 10 HTML5 Features for Oracle Cloud Developers
Top 10 HTML5 Features for Oracle Cloud Developers
 
Mobile Web
Mobile WebMobile Web
Mobile Web
 
ITB2017 - Keynote
ITB2017 - KeynoteITB2017 - Keynote
ITB2017 - Keynote
 
Groovy & Grails eXchange 2012 vert.x presentation
Groovy & Grails eXchange 2012 vert.x presentationGroovy & Grails eXchange 2012 vert.x presentation
Groovy & Grails eXchange 2012 vert.x presentation
 
Reaching out from ADF Mobile (ODTUG KScope 2014)
Reaching out from ADF Mobile (ODTUG KScope 2014)Reaching out from ADF Mobile (ODTUG KScope 2014)
Reaching out from ADF Mobile (ODTUG KScope 2014)
 
The Mobile Web Revealed For The Java Developer
The Mobile Web Revealed For The Java DeveloperThe Mobile Web Revealed For The Java Developer
The Mobile Web Revealed For The Java Developer
 
An Introduction to Tornado
An Introduction to TornadoAn Introduction to Tornado
An Introduction to Tornado
 
Drupal and mobile devices komelin konstanin (eng)
Drupal and mobile devices komelin konstanin (eng)Drupal and mobile devices komelin konstanin (eng)
Drupal and mobile devices komelin konstanin (eng)
 
Portets to composite applications
Portets to composite applicationsPortets to composite applications
Portets to composite applications
 
SOLID Programming with Portable Class Libraries
SOLID Programming with Portable Class LibrariesSOLID Programming with Portable Class Libraries
SOLID Programming with Portable Class Libraries
 
Building SharePoint Single Page Applications Using AngularJS
Building SharePoint Single Page Applications Using AngularJSBuilding SharePoint Single Page Applications Using AngularJS
Building SharePoint Single Page Applications Using AngularJS
 
DrupalCon 2011 Highlight
DrupalCon 2011 HighlightDrupalCon 2011 Highlight
DrupalCon 2011 Highlight
 
SEE 2009: Improving Mobile Web Developer Experience
SEE 2009: Improving Mobile Web Developer ExperienceSEE 2009: Improving Mobile Web Developer Experience
SEE 2009: Improving Mobile Web Developer Experience
 
Webdev battacherjee
Webdev battacherjeeWebdev battacherjee
Webdev battacherjee
 
Plone FSR
Plone FSRPlone FSR
Plone FSR
 
SPTechCon Boston 2015 - Utilizing jQuery in SharePoint
SPTechCon Boston 2015 - Utilizing jQuery in SharePointSPTechCon Boston 2015 - Utilizing jQuery in SharePoint
SPTechCon Boston 2015 - Utilizing jQuery in SharePoint
 

Más de Jasig uPortal Project

uPortal Community Call September 30, 2010
uPortal Community Call September 30, 2010uPortal Community Call September 30, 2010
uPortal Community Call September 30, 2010
Jasig uPortal Project
 
uPortal Roadmap Community Call: uPortal 3.2 and Beyond
uPortal Roadmap Community Call: uPortal 3.2 and BeyonduPortal Roadmap Community Call: uPortal 3.2 and Beyond
uPortal Roadmap Community Call: uPortal 3.2 and Beyond
Jasig uPortal Project
 

Más de Jasig uPortal Project (9)

April communitycall2013 04-04
April communitycall2013 04-04April communitycall2013 04-04
April communitycall2013 04-04
 
April 2012 uPortal Community Call
April 2012 uPortal Community CallApril 2012 uPortal Community Call
April 2012 uPortal Community Call
 
August 2011 uPortal Community Call
August 2011 uPortal Community CallAugust 2011 uPortal Community Call
August 2011 uPortal Community Call
 
uPortal Community Call - 2011 April
uPortal Community Call - 2011 ApriluPortal Community Call - 2011 April
uPortal Community Call - 2011 April
 
uPortal Community Call September 30, 2010
uPortal Community Call September 30, 2010uPortal Community Call September 30, 2010
uPortal Community Call September 30, 2010
 
uPortal Community Call May 13, 2010
uPortal Community Call May 13, 2010uPortal Community Call May 13, 2010
uPortal Community Call May 13, 2010
 
uPortal Community Call April 15, 2010
uPortal Community Call April 15, 2010uPortal Community Call April 15, 2010
uPortal Community Call April 15, 2010
 
uPortal Community Call February 18, 2010
uPortal Community Call February 18, 2010uPortal Community Call February 18, 2010
uPortal Community Call February 18, 2010
 
uPortal Roadmap Community Call: uPortal 3.2 and Beyond
uPortal Roadmap Community Call: uPortal 3.2 and BeyonduPortal Roadmap Community Call: uPortal 3.2 and Beyond
uPortal Roadmap Community Call: uPortal 3.2 and Beyond
 

Último

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Victor Rentea
 

Último (20)

Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKSpring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024
 

uMobile Development Strategies

  • 1. uMobile Development March 15, 2012
  • 3. uMobile Application Server • Presents browser-based mobile experience • Serves as an administrative console • Provides web-based modules, RESTful data to native app • Based on uPortal
  • 4. Native App Codebase • Based on Titanium Appcelerator • JavaScript-based platform-independent development framework • Compile shared codebase to iPhone and Android applications with native controls • Open source under the Apache 2.0 License
  • 5.
  • 6. Choosing a Distribution • uPortal • Includes mobile framework and skin • Can power the native app • uMobile • Branch of uPortal codebase • Adds additional modules, test data
  • 8. Overall Development Style • Create well-defined integration APIs • Support personalized content, multiple sources • Support common data formats (iCal, RSS) • If no standard exists, define our own XSD • Allow custom implementations
  • 9. Calendar • Read-only calendar aggregator • iCal, CalDAV, XML, Bedework, Exchange • API for custom integrations • Allows for delegated authentication / credential replay • Role-based feed distribution
  • 10. News • Read-only news aggregator • RSS / Atom feeds • Role-based feed distribution
  • 11. Search • Portlet registry • Directory search results • Google Search Appliance
  • 12. Directory • Uses uPortal’s person directory configuration • Permissions control visibility of users, user attributes
  • 13. Videos • Displays recent posts by a single YouTube author • Configure author name in portlet definition
  • 14. Map • Custom XSD defines map data format • Name, geocoordinates, search keys, categories, campuses • Include static JSON file of location data
  • 15. Courses • Merges multiple data sources • Supported LMSs • In-progress DAOs for Sakai and Moodle • Looking for collaborators
  • 17. Sample Campus Life Data <laundromat-list xmlns="https://source.jasig.org/schemas/portlet/laundry" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://source.jasig.org/schemas/portlet/laundry ../xsd/laundry.xsd"> <laundromat name="Saybrook" location-code="SY"> <machine-type key="Washer" message-key="laundry.type.washer" icon-key="Washer" available="5" total="12" /> <machine-type key="Dryer" message-key="laundry.type.dryer" icon-key="Dryer" available="5" total="12" /> </laundromat> <laundromat name="Branford" location-code="BR"> <machine-type key="Washer" message-key="laundry.type.washer" icon-key="Washer" available="2" total="10" /> <machine-type key="Dryer" message-key="laundry.type.dryer" icon-key="Dryer" available="10" total="15" /> </laundromat> <laundromat name="Berkeley" location-code="BK"> <machine-type key="Washer" message-key="laundry.type.washer" icon-key="Washer" available="10" total="12" /> <machine-type key="Dryer" message-key="laundry.type.dryer" icon-key="Dryer" available="3" total="8" /> </laundromat> </laundromat-list>
  • 19. Type Advantages External Website via • Chose any language / framework IFrame or Web Proxy • Manage outside of portal framework • Well-defined API JSR-168 / JSR-286 • Share views w/ desktop portal Portlet • Take advantage of portal services such as auth and roles • Access to native device services Native Module • Potential performance improvements
  • 20. Web-based vs. Native • Web-based modules • Allow sharing code with web views • Easier to update and deploy • Native framework • Young framework with quickly changing APIs • Frameworks are changing quickly, want to leave options open
  • 21. Portal / native app provides top-level navigation Web-based module content Web-based Module Layout
  • 22. IFrame Publishing Type • Rendered as • Desktop browser: include external site via IFrame • Mobile browser: link to external site • Native app: include in web view • Examples • Transit, library in default uMobile dataset
  • 24. Web Proxy • Proxy an external website • Recommendations • Design specifically for web proxy view • Use portal CSS styles • Avoid AJAX to prevent XSS restrictions
  • 25. Advanced CMS <div class="portlet"> <div class="portlet-content" data-role="content"> <ul data-role="listview"> <li data-role="list-divider">Fish!</li> <li>Red Fish</li> <li>Blue Fish</li> </ul> </div> </div>
  • 26. Custom Portlets • Add mobile view layer to JSR-286 portlets • New projects can use Jasig portlet archetype • Creates skeleton maven project with mobile JSPs • https://wiki.jasig.org/display/UMM/Using+the+uMobile +Portlet+Archetype • http://www.youtube.com/jasigumobile
  • 27. Device-Specific Views • Often need a different feature or interface on one platform • Separate layout / CSS for desktop, tablet, mobile • Mouse vs. Touch-based interactions • Want to share backend logic where possible • Business logic • Controllers
  • 28. View Layer: jQuery Mobile • Easily create mobile-friendly views • More lightweight • Fairly new project, though growing quickly • Works with jQuery framework • Adds touch-based events like tap, swipe, pinch • MIT or GPL 2
  • 31. Controller Model View Resolver Desktop View Mobile View Providing Multiple Views
  • 32. Column Maximized Mobile Example: Calendar Portlet
  • 33. Is it Mobile? • Parse user agent • User agent available as request header • Potential for mismatch between device and preferred version • Can use WURFL or parse manually • Make decisions based on theme name
  • 34. Checking the Theme public class ThemeNameViewSelectorImpl implements IViewSelector { protected static final String THEME_NAME_PROPERTY = "themeName"; protected static final String MOBILE_THEMES_KEY = "mobileThemes"; protected static final String[] MOBILE_THEMES_DEFAULT = new String[]{ "UniversalityMobile" }; protected final Log logger = LogFactory.getLog(getClass()); public boolean isMobile(PortletRequest request) { String[] mobileThemes = request.getPreferences().getValues(MOBILE_THEMES_KEY, MOBILE_THEMES_DEFAULT); String themeName = request.getProperty(THEME_NAME_PROPERTY); // if no theme name can be found, just assume the request is for a // desktop client if (themeName == null) { logger.debug("No theme name found, assuming desktop environment"); return false; } // otherwise, determine if the theme name matches one of the known // mobile themes for (String theme : mobileThemes) { if (themeName.equals(theme)) { logger.debug("Theme name " + themeName + " matches configured list of mobile themes"); return true; } } logger.debug("No match found for theme name " + themeName + ", assuming desktop environment"); return false; } }
  • 35. New Item Count • Number indicates “new” items associated with a module • Invites users to visit a module • Set via a portlet response property
  • 36. Setting New Item Counts public class MinimizedStateHandlerInterceptor extends HandlerInterceptorAdapter { @Autowired(required = true) private ICoursesDao coursesDao; @Override public boolean preHandleRender(RenderRequest request, RenderResponse response, Object handler) throws Exception { if (WindowState.MINIMIZED.equals(request.getWindowState())) { CourseSummaryWrapper summary = coursesDao.getSummary(request); int newCount = summary.getNewUpdateCount(); response.setProperty("newItemCount", String.valueOf(newCount)); return false; } return true; } }
  • 37. Search Integration • New search API in uPortal 4 • Based on JSR-286 events
  • 38. Search Integration • Portlet responds to search event with domain- specific results • https://wiki.jasig.org/display/UPM40/Using+the +new+Search+API
  • 39. Notifications Integration • On uMobile 1.3 roadmap • Publish notifications to drop-down panel in native app
  • 41. uMobile Roadmap • https://wiki.jasig.org/display/umobile/uMobile+1.2+ %28Phase+3%29+Roadmap
  • 42. Documentation • uMobile Manual • https://wiki.jasig.org/display/UMM/Manual+Home • uPortal 4 Manual • https://wiki.jasig.org/display/UPM40/Home • Jasig Portlet Developer Space • https://wiki.jasig.org/display/PLT/Portlet+Development
  • 43. Documentation • uMobile YouTube • http://youtube.com/jasigumobile • jQuery Mobile • http://jquerymobile.com/test/
  • 44. Additional Resources • Jasig mailing lists • uMobile, portlet, and uPortal lists • https://wiki.jasig.org/display/JSG/Jasig+Mailing+Lists • Jasig / Sakai Conference • June 10 - 15 2012 • http://www.jasig.org/jasig-sakai-conference-2012