Doing Server-Side Push with JSF

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    1 Favorite

    Doing Server-Side Push with JSF - Presentation Transcript

    1. Doing Server-Side Push with JSF Matthias Wessendorf | matzew@apache.org http://matthiaswessendorf.wordpress.com http://twitter.com/mwessendorf
    2. Matthias Wessendorf
      • Oracle Corporation
      • Apache Software Foundation
        • ASF Member
        • Committer and PMC @Apache MyFaces
        • Committer and PMC @Apache Shale
      • Author
        • (German) Java- and Eclipse-Magazine
        • Books on Struts, J2ME & WebServices
      • Speaker
        • Oracle Open World
        • ApacheCon
        • JavaOne
        • JAX, WJAX
    3. Agenda
      • Introduction
      • Comet / Server-Side Push
      • ADF Faces - Overview
      • ADF Faces - Architecture
      • ADS  Active Data Service
      • comet.NEXT
      • Discussion
    4. Agenda
      • Introduction
      • Comet / Server-Side Push
      • ADF Faces - Overview
      • ADF Faces - Architecture
      • ADS  Active Data Service
      • comet.NEXT
      • Discussion
    5. Why push ?
    6. Introduction
      • Polling
        • annoying..., traffic on the server  chatty solution
      • Push
        • Don‘t call us, we call you !
      • Use Cases
        • collaborative tooling
          • sharing documents
          • chat
        • streaming data (  football/soccer, ...)
        • trading systems (  auctions)
        • live reporting
        • monitoring (  server console)
        • pushing async data into the client (  credit card verification)
    7. collaborative tooling Push when you need it
    8. Agenda
      • Introduction
      • Comet / Server-Side Push
      • ADF Faces - Overview
      • ADF Faces - Architecture
      • ADS  Active Data Service
      • comet.NEXT
      • Discussion
    9. Comet / server side push
    10. Comet / server side push
      • polling VS long-polling VS streaming
      *  depends on the interval... **  fallback to long-polling - - ++ live connection some issues ** OK OK proxy servers + + + - * latency push long-poll polling
    11. Comet / server side push
      • Integration into JSF...
      • Polling:
        • JSF lifecycle
      • Push and long-polling:
        • extra „channel“ for comet
        • client architecture ...
        • „ client side rendering“
    12. Comet / server side push
    13. Comet / server side push
      • Bayeux Specification
        • JSON-based protocol for transporting asynchronous msgs
          • pub/sub  „JMS over http“
        • Client and Server APIs
      • Client:
        • connect ("/context/servlet");
        • subscribe ("/buli/BVB", javaScriptCallback);
      • Server:
        • Channel channel = bayeux .getChannel("/buli/BVB“);
        • Message msg = bayeux.newMessage(client);
        • msg.put(" currentResult ", "BVB-Schalke 9:0");
        • msg.put(" player ", "Alexander Frei");
        • channel.publish(message);
    14. Comet / server side push
      • Bayeux Implementations
        • Server:
          • Jetty
          • Tomcat (smaller and cleaner API)
          • Glassfish / Grizzly
          • Weblogic (HTTP Publish-Subscribe Server) Perl, Pyhton,...
        • Client:
          • dojo toolkit
          • jQuery-based (two are there)
      • Issues
        • not a real Java standard (e.g. JSF / Servlet)
        • different APIs for all implementations
    15. Comet / server side push
      • Possible integration for JSF:
        • Server-side API  doing it again ?
        • Client-side API
          • resue jQuery ?
          • reuse dojo ?
        • Offer a (behavioral) tag:
      • <mylib:bayeux channel=&quot;/bvbticker&quot; callback=&quot; myCallbackJavaScriptFunction &quot;
      • ... />
      • Server-code needs to be done...
        • I am waiting for Servlet 3 
    16. Comet solutions for JSF
      • IceSoft  IceFaces
      • Oracle  ADF Faces Rich Client
        • more later...
    17. IceFaces  reverse ajax
      • Rich JSF and Web 2.0 component suite
        • „ RIA toolkit“
        • 50+ widgets
        • Support for iPhone, etc.
        • OpenSource
        • CSS Themes
        • and more
      • Push / Poll model
        • Glassfish / Grizzly
      • SessionRenderer
        • SessionRenderer.render(...)
        • SessionRenderer.addCurrentSession(...)
    18. Agenda
      • Introduction
      • Comet / Server-Side Push
      • ADF Faces - Overview
      • ADF Faces - Architecture
      • ADS  Active Data Service
      • comet.NEXT
      • Discussion
    19. ADF Faces
      • ADF Faces Rich Client
        • Rich Widgets, Web 2.0 components
      • more than 90 JSF components
        • No InputSuggest ...
      • more than 30 helpers
        • printable view, validators, excel export, ...
      • Ajax
        • Ajax integration, API for server AND client
      • Requirements
        • JavaServer Faces 1.2 *
        • Apache MyFaces Trinidad *
    20. RIA – Rich Internet Applications
    21. ADF Faces
      • ADF Faces Rich Client
        • Rich Widgets, Web 2.0 components
      • more than 90 JSF components
        • No (yet) InputSuggest ...
      • more than 30 helpers
        • printable view, validators, excel export, ...
      • Ajax
        • Ajax integration, API for server AND client
      • Requirements
        • JavaServer Faces 1.2_x
        • Apache MyFaces Trinidad 1.2.x
    22. ADF Faces
      •  DEMO 
        • http://tinyurl.com/adf-faces-live
    23. Agenda
      • Introduction
      • Comet / Server-Side Push
      • ADF Faces - Overview
      • ADF Faces - Architecture
      • ADS  Active Data Service
      • comet.NEXT
      • Discussion
    24. ADF Faces - Architecture Client Side Server Side Label1 Label2 Label3 OK DOM Peer Objects Document Form Element Servlet JSF Lifecycle In Memory Tree View Root Form UI Component Renderer
    25. ADF Faces - Architecture client-side components Label1 Label2 OK <af:panelLabelAndMessage labelAndAccessKey=&quot;Label 2&quot;> <af:inputText autoTab=&quot;true&quot; simple=&quot;true&quot; id=&quot;id1&quot; maximumLength=&quot;3&quot; columns=&quot;3&quot; label=&quot;first&quot;/> <af:inputText autoTab=&quot;true&quot; simple=&quot;true&quot; id=&quot;id2&quot; maximumLength=&quot;3&quot; columns=&quot;3&quot; label=&quot;second&quot;/> <af:inputText autoTab=&quot;true&quot; simple=&quot;true&quot; id=&quot;id3&quot; maximumLength=&quot;3&quot; columns=&quot;3&quot; label=&quot;third&quot;/> </af:panelLabelAndMessage> <af:inputText id=&quot;idInputText&quot; label=&quot;Label 1&quot; value=&quot;#{myBean.value}&quot;/> id1 id2 Id3
    26. Agenda
      • Introduction
      • Comet / Server-Side Push
      • ADF Faces - Overview
      • ADF Faces - Architecture
      • ADS  Active Data Service
      • comet.NEXT
      • Discussion
    27. ADS  Active Data Support
      • Doing „comet“ is hard
        • JavaScript guy...
        • Server-side guy...
          • Tomcat vs. Jetty vs. WLS vs. Glashfish vs. WhatNot
      • Active Data Support is integrated into ADF
        • BAM
      • important interface(s):
        • ActiveDataModel
        • ActiveDataListener
      • custom implementation possible ...
      • based on JSF‘s declarative model
        • no special handling in the view
    28. ADS  Active Data Support
      • supports different servers
        • Weblogic: AdsServlet (extends AbstractAsyncServlet )
          • Optimized version, leverages: FutureResponseModel
          • @WLServlet annotation  no issues on other containers
            • Similar thing is part of Servlet 3.0
        • Non-Weblogic: AdsFilter
          • Basically decoration to wait() and notify()
          • does not scale, but works...
            • Servlet 3.0 will help here...
      • support for HA / failover
      • shared connection on the client
    29. ADS  Active Data Support
      •  DEMO 
    30. Agenda
      • Introduction
      • Comet / Server-Side Push
      • ADF Faces - Overview
      • ADF Faces - Architecture
      • ADS  Active Data Service
      • comet.NEXT
      • Discussion
    31. comet.NEXT – Servlet 3.0
      • Part of Java EE 6
        • ready in September 2009 ???
      • ServletRequest interface
        • startAsync() : AsyncContext
        • startAsync(request, response) : AsyncContext
        • isAsyncSupported() : boolean
      • AsyncListener interface
        • onComplete(asyncEvent) : void
        • onTimeout(asyncEvent) : void
    32. comet.NEXT – Servlet 3.0
      • Async example:
      • service(Request req, Response res) {
      • AsyncContext actx = req.startAsync();
      • Runnable runnable = new Runnable() {
      • public void run() {
      • Message m = jmsTemplate.receive();
      • res.write(m);
      • req.complete();
      • }
      • };
      • executor.submit(runnable);
      • }
      Defensive programming: request.isAsyncSupported(); request.isAsyncStarted(); request.getAsyncContext();
    33. comet.NEXT – HTML 5
      • WebSockets
        • var socket = new WebSocket(&quot;ws://myserver.com&quot;);
        • socket.onopen = function(evt) {...};
        • socket.onmessage = function(evt) { alert( &quot;Received Message: &quot; + evt.data);
        • };
        • socket.onclose = function(evt) {...};
      • Usage
        • socket.postMsg(„Hallo Server“);
        • socket.disconnect();
    34. comet.NEXT – HTML 5
      • Server-Send-Events
        • standardizes the format of (continuous) data stream
        • native in the browser; cross-browser ...
        • new HTML element „eventsource“:
        • <eventsource src=&quot;http://my.server.com&quot; onmessage=&quot;alert(event.data)&quot; />
        • Data property, contains JSON:
        • data: {'game' : {'currentResult': 'BVB – S04 9:0', 'player': 'Alexander Frei'}, 'id' : '12345432' }
    35. comet.NEXT – HTML 5
      • Today
        • Lift Framework
        • Kaazing Gateway
        • Opera / Safari 4* / WebKit / Firefox Minefield *
        • Firefox-Plugin
      • Future
        • IE 11 
      • UPDATE -> 2009/03/28
        • Shrinking of HTML5 spec:
          • http://annevankesteren.nl/2009/03/more-shrinking-html5
      * https://bugzilla.mozilla.org/show_bug.cgi?id=472529
    36. Agenda
      • Introduction
      • Comet / Server-Side Push
      • ADF Faces - Overview
      • ADF Faces - Architecture
      • ADS  Active Data Service
      • comet.NEXT
      • Discussion
    37. Discussion
      • Where are we today ?
      • Web 2.0 Applications  RIA
        • more application, than WEB
      • Adding „Hacks“  Comet
        • Improving the UI experience
      • Simulating FAT clients
      • The browser == Application Platform
    38. Questions
      • and (maybe) answers
    39. Links and Resources
      • ADF
        • http://www.oracle.com/technology/products/adf/adffaces/index.html
        • http://tinyurl.com/adf-faces-live
      • Bayeux / Cometd
        • http://cometdproject.dojotoolkit.org/
        • Blog
      • HTML 5 WebSockets
        • http://dev.w3.org/html5/spec/Overview.html#comms
      • Slides:
        • http://www.slideshare.net/mwessendorf
    40. Thank you! [email_address] BLOG: matthiaswessendorf.wordpress.com

    + mwessendorfmwessendorf, 7 months ago

    custom

    1084 views, 1 favs, 0 embeds more stats

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 1084
      • 1084 on SlideShare
      • 0 from embeds
    • Comments 0
    • Favorites 1
    • Downloads 0
    Most viewed embeds

    more

    All embeds

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories