Castle in the Clouds: SaaS-Enabling Oracle ADF Faces Applications


Published on

Software as a service (SaaS) applications serve users in many organizations from a single application instance running in a cloud. Common SaaS requirements are customization such as hiding and adding fields, managing boilerplate text, and influencing look and feel and a service API for retrieving and manipulating data and enabling registration of listeners (applications outside the cloud that are notified by the SaaS application of events). Deep-link navigation into the SaaS application enables visual integration with local apps. This session’s speakers share their best practices, having developed three rich Oracle ADF Faces RC SaaS apps, with demos of the customization, using Meta Data Services (MDS) and the SOA interface across the cloud.

Published in: Technology
  • Be the first to comment

No Downloads
Total views
On SlideShare
From Embeds
Number of Embeds
Embeds 0
No embeds

No notes for slide
  • Data by 3rd party:No access from internal systems security risks foreign regulation & legislation (Patriot Act)Risk SaaS provider collapseSwitch to another SaaS providerIntegration how to programmatically interact with SaaS application how to push events from SaaS to local EDA/Enterprise Service Bus how to synchronize data between SaaS and local database how to integrate application in (local) Portal and Mashup: publish UI Services (Portlets) from SaaS
  • Castle in the Clouds: SaaS-Enabling Oracle ADF Faces Applications

    1. 1. Castle in the Clouds: SaaS-Enabling Oracle ADF Faces Applications<br />Oracle Open World 2009<br />Wednesday, 14thOctober<br />Lucas Jellema <br />AMIS, The Netherlands<br />
    2. 2. Overview<br />What makes an application ‘SaaS’?<br />And why provide an application as SaaS<br />Requirements of SaaS applications<br />Focus on Customization<br />Integration & SOA across the cloud<br />Deep Linking, Mash Up and UI Services<br />Services API<br />Remote Events Listeners<br />Summary and Road Ahead<br />
    3. 3. Software as a Servicecommon characteristics<br />Single instance of standard application & database<br />Running in a shared infrastructure, 24/7<br />Managed by central administration team<br />Delivered over the internet to web browsers<br />Used by individuals from many organizations<br />Multi-tenant with multiple users each<br />Globally distributed & multi-lingual user community<br />Licence model based on usage metrics<br />Service Level Agreement to specify quality of service<br />
    4. 4.
    5. 5. Software as a Service(perceived) benefits<br />Small up-front investment<br />Quick startup – ‘turn on the software tap’ <br />Professional administration with guaranteed performance and application availability<br />Low TCO through ‘economies of scale’<br />Dynamic Scalability<br />Rapid evolution of new features and bug resolution – quick deployment<br />Quick adoption of new technology<br />Community to create, foster & share best practices<br />
    6. 6. Software as a Serviceconcerns & potential disadvantages<br />Dependence on 3rd party for<br />Security, Availability & Performance, Scalability<br />Data outside the own infrastructure<br />Standard application – not at all tailor-made<br />Our own terminology, fields, default values, validation rules, workflow<br />How does SaaS application integrate with<br />Our SOA & EDA, Mash Up/Portal and Workflow<br />Identity Management and Single Sign On <br />How to prevent lock-in with the SaaS provider<br />
    7. 7. SaaSRequirements: Integration across the cloud<br />Make SaaS application integrate with IT backbone of the organization using the SaaS<br />SOA & EDA, workflow management, identity management, email server and other shared central facilities<br />Two-way, based on open standards, geared towards both programmatic and UI integration<br />
    8. 8. SaaS Requirements<br />Customization<br />Allow organizations and individuals to tailor the ‘standard’ application for better fit<br />Within the single instance of the SaaS application<br />Easy, dynamic, run-time, self-service in browser<br />Multi-version on single ‘url and database’<br />SaaS customers can upgrade to new versions of the SaaS application when they want to<br />
    9. 9. Application ‘levels of reality’<br />Factory<br />Customer<br />Customer<br />Organization B<br />Organization A<br />End User<br />End User<br />
    10. 10. Application Mode Switcher<br />Application Managers can switch between Application Modes<br />To view and manipulate the application at the selected level<br />
    11. 11. Application Rollout process…<br />Development in the Factory<br />Production-time refining<br />Customer (organization) specific implementation<br />By SaaS Helpdesk, on site consultant, Application Admin<br />End User (dynamic, run-time) Personalization<br />
    12. 12. Proposal<br />Let’s approach every end user application as a SaaS application!<br />Both standard and custom applications<br />
    13. 13. Desirable SaaS features & facilities<br />Dynamic, Wiki-like, context-sensitive help<br />Integration with incident registration<br />Automatic passing of page, context data & logging<br />‘Simulate user’ option for the service desk<br />SLA metrics and application usage monitoring<br />Self Service style application management<br />‘Toggle’ between factory, organization and user<br />Integrated workflow & collaboration<br />Communication (email, chat), task list, tagging, …<br />“Register interest in” – notification of events<br />
    14. 14. Customization<br />Allow tailoring of terminology to organization<br />Dynamic, run-time resource bundle management<br />Resource Bundles per organization (and individual)<br />Support for adding/hiding fields<br />Configuration of application behavior through organization and user level preferences<br />Personalization (my…) features for fine tuning<br />Workflow and task configuration<br />Configure menus and add new items<br />Fine tune look & feel – e.g. skins, styles, logos <br />
    15. 15. Customizing terminology <br />Boilerplate text – prompt, title, button label, messages, help,… - come from resource bundles<br />Built in support for i18n – language & country<br />Typically held in property files deployed in WAR<br />We need to implement resource bundles<br />that can be updated and refreshed at run time<br />Or at least extended with any overrides of default values<br />keys that support the notion of organization specific versions of bundle entries in addition to factory ones<br />maintenance facilities with self service support<br />That presents bundle entries in understandable format<br />
    16. 16. Implementing Self Service Customization of Resource Bundles<br />Resource Bundle implemented as class (extend ListResourceBundle) that read from database<br />Keys are constructed as: &lt;base_key&gt;_&lt;org_id&gt;<br />And even &lt;base_key&gt;_&lt;org_id&gt;_&lt;user_id&gt;<br />JSF page refers to resources through intermediate bean: #{bundleHandler[‘baseKey’]}<br />The bundleHandler bean first tries user specific key; if not found then org key and then base key<br />It can also access several resource bundles – first the dynamic, database based one with overrides<br />
    17. 17. Custom(izing) fields<br />Some fields are never used by some organizations and are therefore ‘in the way’<br />or they may even be legally forbidden in a country!<br />Every organization finds the application lacking with one or more fields<br />but no two organizations ahree on which fields…<br />To allow optimal customization, a SaaS application ideally allows<br />Customization of standard items<br />Addition of custom items embedded in pages<br />And associated with data records like ‘regular’ items<br />
    18. 18. Application Settings for customizing application behavior<br />Some Application Behavior is developed as dynamically configurable<br />Through Preferences or Application Settings<br />Display: Locale, Format, Units for Height and Weight (converter parameters), feature on/off<br />Business logic: Default Values for new records, Validation parameters, Field & Button Authorization<br />Styling: Images, Fonts, Colors, Skins/Themes<br />Settings can be configured at Factory (default), Organization and User level<br />At run-time through self service pages<br />
    19. 19. Integrating Application Settings during development<br />#{user.settings[&apos;NAME&apos;]}<br />
    20. 20. Application Settings Data Model<br />Application <br />Settings<br />Customized <br />Settings<br />* Name<br />o Factory Value<br />o Allowable Values<br />o Description<br />o Data Type<br />o Level Updatable<br />o Updatable By<br />* OrgId<br />o Value<br />o UserId<br />o Comment<br />mm/dd/yyyy<br />Date Format<br />dd-mm-yyyy<br />dd-mm-yy<br />Use<br />Photo<br />N<br />Y<br />Y<br />Metric/Imperial<br />m<br />N<br />…<br />i<br />
    21. 21. Application Personalization<br />We are all individuals<br />We are all individuals<br />We are all individuals<br />We are all individuals<br />We are all individuals<br />We are all individuals<br />We are all individuals<br />We are all individuals<br />We are all individuals<br />We are all individuals<br />We are all individuals<br />I’m not…<br />
    22. 22. Personalization Features – My… options<br />My Navigation History<br />My Favorites (quick links, bookmarks)<br />My own custom properties (‘flex fields’)<br />My Date Format, Weight/Height units, Currency, Default Values<br />My lingo in titles, labels, prompts & messages<br />Personalized Menu-structure<br />… (my logo!)<br />
    23. 23. Demo SaaS style Customization in JSF<br />Run Time Management of Organization specific Resource Bundles<br />Change the boilerplate text defined in the factory<br />Create organization and user specific resources<br />Influencing application behavior through application settings at organization level<br />Configure date format pattern<br />Specify customized highlight definitions<br />Toggle between user/organisation/factory scope<br />
    24. 24.
    25. 25.
    26. 26. Run Time form-customization<br />One application, multiple marketing labels<br />Each label requires a slightly different set of items – in a potentially different sequence<br />To be defined and applied at run-time<br />Solution:<br />After the JSF component tree is built in memory, let a JSF PhaseListener traverse it and<br />Set rendered to false<br />Change the order of panelFormLayout children<br />based on the current context and the meta data<br />
    27. 27. Run Time form-customization<br />Design time base edition<br />Apply Marketing Label X<br />Apply Marketing Label Y<br />
    28. 28. Run Time form-customizationDefine label specific settings<br />
    29. 29. ADF Customization facilitiesRun Time ‘Change Persistence’<br />ADF Change Persistence: built-in run-time customizations for several components<br />Table, Collapsible/Disclosable Panels, Panel Splitter<br />Change persistence can also be leveraged programmatically for custom run-time changes<br />changing an attribute value, adding or removing a facet, adding or removing a child component, reordering child components, moving a child component to a different parent<br />
    30. 30. ADF Customization facilitiesDesign time ADF Customization<br />Developer uses declarative customization<br />Start with the base application<br />Create specialized versions of XML based application artefacts like JSF page definition<br />For every possible context in one or more dimensions<br />At run time: users work with an application specially customized based on the actual context<br />Multiple versions of artefactsare managed in the MDS repository<br />
    31. 31. ADF Customization facilitiesRun time WebCenter Composer<br />Application manager or content editor can ‘edit’ the application at run time<br />Add or remove items in customizable regions<br />Rich content elements, portletsand registered taskflows<br />Edit content, configure portlets, rearrange items<br />Create new pages with dynamic content items<br />
    32. 32. Multi-version SaaS Application<br />Pre Oracle Database 11gR2: tough!<br />separate database schemas and dynamic data source selection<br />With Oracle Database 11gR2: easy!<br />Using Edition Based Redefinition<br />Multiple versions of database objects in the same schema – on a common set of tables<br />The application (version) specifies at connect time which ‘edition’ of the database to use<br />Come to my session S310492 Monday 17:30 - 18:30, Moscone South, Room 305<br />
    33. 33. Parallel Application Versions<br />Application X<br />VERSION 1<br />Application X<br />VERSION 2<br />Release 2<br />Release 3<br />Base Release<br />
    34. 34. SOA across the cloud<br />SaaS A<br />SaaS B<br />CMS<br />Social API<br />internet<br />internal<br />LDAP<br />WorkflowEngine<br />App D<br />App C<br />Validation<br />Service<br />Service API<br />Service API<br />CMS<br />Email<br />IM<br />Fax<br />34<br />
    35. 35. Integration and SOA across the cloud<br />Service API as programmatic alternative to UI<br />RSS, SOAP, REST<br />Event Listener registration to be notified by SaaS<br />Service Registration (Dependency Injection) <br />Authentication/Authorization, Translation, Validation, Workflow, Communication<br />Identity cross referencing (SaaS & local identifier)<br />Deep Link API for context sensitive navigation<br />UI Services (Portlets) to fit into Mashups & Portals<br />Data Export, Synch & Import – bulk facilities<br />“internet service bus” – integrating multiple SaaSs<br />35<br />
    36. 36. SOA across the cloud: data & operations<br />36<br />SaaS A<br />service <br />dependency<br />injection<br />SaaS B<br />CMS<br />Social API<br />Export<br />Service API<br />Service API<br />RSS<br />listenerregistration<br />internet<br />internal<br />LDAP<br />WorkflowEngine<br />App D<br />App C<br />Validation<br />Service<br />Service API<br />Service API<br />CMS<br />Email<br />IM<br />Fax<br />
    37. 37. SOA across the cloud: UI / Navigation / Process/Presentation<br />37<br />SaaS B<br />SaaS A<br />Deep link<br />Interface<br />CMS<br />Deep link<br />Interface<br />Social API<br />Portlet API<br />HTMLPages<br />Portlet API<br />RSS<br />RSS<br />internet<br />internal<br />ToDo<br />News<br />WorkflowEngine<br />App D<br />App C<br />Portlet API<br />Portlet API<br />RSS<br />CMS<br />Email<br />IM<br />Fax<br />
    38. 38. SaaS A<br />SaaS A<br />service <br />dependency<br />injection<br />SaaS B<br />SaaS B<br />Deep link<br />Interface<br />CMS<br />CMS<br />Deep link<br />Interface<br />Portlet API<br />HTMLPages<br />Portlet API<br />Export<br />RSS<br />Service API<br />Service API<br />RSS<br />RSS<br />listenerregistration<br />internet<br />internet<br />internal<br />internal<br />ToDo<br />News<br />LDAP<br />WorkflowEngine<br />WorkflowEngine<br />App D<br />App C<br />App D<br />App C<br />Portlet API<br />Portlet API<br />Validation<br />Service<br />Service API<br />Service API<br />RSS<br />CMS<br />CMS<br />Email<br />IM<br />Fax<br />Email<br />IM<br />Fax<br />38<br />
    39. 39. Publishing ADF Application as (remotely embeddable) Portlet<br />
    40. 40. Publishing ADF Application as (remotely embeddable) Portlet<br />Any ADF Task Flow can be published as a standard (WSRP) Portlet<br />Using WebCenter Framework<br />Without development restrictions<br />Well, … almost that is<br />Note that ADF applicationscan consume remoteportlets as well<br />Using WebCenter<br />WebCenter<br />(Remote Portlet Provider)<br />
    41. 41. Demonstrating Deep Link Navigation<br />41<br />SaaS A<br />HTMLPages<br />Portlet API<br /><ul><li>To Do list shows task “Handle promotion for Employee Scott”
    42. 42. Selecting this task will bring up a popup loaded through a deep link into SaaS A
    43. 43. Presenting the ‘Update Job’ page with the details of Scott loaded</li></ul>Service API<br />RSS<br />ToDo<br />News<br />WorkflowEngine<br />
    44. 44. Implementing Deep Linking in JSF<br />URL like http://host/SaaSApp/UpdateJob/Scott<br />Cookie provides hook for Single Sign On <br />ServletFilter intercepts and redirects to proper JSF page – after storing parameters in the request<br />JSF PhaseListener intercepts the request to the page and prepares the backing beans<br />Using the request parameters<br />JSF page is rendered with proper data context<br />When the user is done, the JSF application could <br />update the task by calling the workflow engine SAPI<br />publish a SaaS event<br />42<br />
    45. 45. Demonstrating the SaaS Service API<br />SaaS A<br />HTMLPages<br />Create a new Employee <br />Call the SaaS API to propagate the new employee record<br />Right after succesful transaction commit<br />Inspect the new record in the SaaS UI<br />Portlet API<br />Service API<br />RSS<br />App D<br />
    46. 46. Demonstrating cross-cloud event listeners<br />44<br />SaaS A<br />Portlet API<br /><ul><li>Register App D’s Update Employee service as Event Listener for SaaS event
    47. 47. Update a salary in the SaaS UI
    48. 48. Event is routed to the remote listener that calls the App D Service API that “does something with it”</li></ul>Service API<br />RSS<br />listenerregistration<br />App D<br />Service API<br />DB<br />
    49. 49. 45<br />
    50. 50. 46<br />Register Event Listener by calling the WebService<br />
    51. 51.
    52. 52. SaaS in the Multi-Org world<br />SaaS B<br />SaaS A<br /><br />CMS<br />Social API<br />Export<br />Service API<br />Service API<br />RSS<br />Portlet API<br />Portlet API<br />HTMLPages<br />internet<br />App Y<br />App X<br />App D<br />Service API<br />Service API<br />Service API<br />App Z<br />WorkflowEngine<br />48<br />
    53. 53. 49<br />Summary and ConclusionSaaS and the road ahead<br />SaaSapplications need special facilities<br />Customization & personalization<br />Service API (UI and programmatic), Event support<br />SLA management, metrics monitoring & self service<br />Multiple parallel application versions<br />Most applications could do with the same facilities: let’s regard all applications as SaaS!<br />
    54. 54. 50<br />Summary and Conclusions<br />Enterprise Service Bus and Portal/Mashup connect the SaaSapplications<br />With WebServices API and Event/Listener model<br />Through embeddable Portlets with params/events<br />ADF Faces & EL support dynamic front ends<br />Custom facilities like dynamic resource bundles<br />ADF design-time customization and WebCenter Composer run-time customization<br />Multi-version is enabled through Oracle Database 11gR2 Edition Based Redefinition<br />
    55. 55. Resources<br />Presentation and demos are on our blog<br /><br />Contact me<br />