SlideShare a Scribd company logo
1 of 67
Download to read offline
What’s new in DWR v3


Joe Walker
DWR Lead Developer
SitePen UK
Recap
                                                  Since we last talked ...
                                                    Named Parameters
                                                        Binary Files
                                                JavaScript Extending Java
                                                    Better Reverse Ajax
                                               Data Sync: Dojo Data Store
                                               JSON / JSONP / JSON-RPC
                                            Varargs and Overloaded Methods
                                                        What’s Next


© SitePen, Inc. 2008. All Rights Reserved
Recap



© SitePen, Inc. 2008. All Rights Reserved
© SitePen, Inc. 2008. All Rights Reserved
Marshalling Types

        Primitive types, and their Object counterparts
                 int, boolean, long, float, double, etc
        Obvious classes
                 String, Date, BigDecimal, BigInteger, Enum, etc
        Arrays and Collections
                 Map, List, Set, Iterator, ...
        JavaBeans and Objects
        XML objects
                 DOM, XOM, JDom, Dom4J


© SitePen, Inc. 2008. All Rights Reserved
© SitePen, Inc. 2008. All Rights Reserved
Since we last talked ...



        TIBCO General Interface
        SitePen
        http://svn.directwebremoting.org




© SitePen, Inc. 2008. All Rights Reserved
Named Parameters



© SitePen, Inc. 2008. All Rights Reserved
Named Parameters



        DWR will create client-side classes to look like
        server-side classes to make passing parameters
        easy




© SitePen, Inc. 2008. All Rights Reserved
Named Parameters

          Java:

          public interface Person { ... }
          public class Employee implements Person { ... }
          public class Manager extends Employee { ... }

          public HumanResources {
            public void addPerson(Person p) { ... }
          }

          JavaScript:

          Manager m = new Manager();
          HumanResources.addPerson(m);




© SitePen, Inc. 2008. All Rights Reserved
Named Parameters



        Why?
                 • Inheritance is useful in places
                 • It saves creating addEmployee() and addManager()
                   methods




© SitePen, Inc. 2008. All Rights Reserved
Lightweight Named
                                      Parameters



© SitePen, Inc. 2008. All Rights Reserved
Lightweight Named Parameters




        DWR also allows a lighter-weight method of
        declaring types




© SitePen, Inc. 2008. All Rights Reserved
Lightweight Named Parameters

          Java:

          public interface Person { ... }
          public class Employee implements Person { ... }
          public class Manager extends Employee { ... }

          public HumanResources {
            public void addPerson(Person p) { ... }
          }

          JavaScript:

          var m = { $dwrClassName:'Manager', firstname:'Joe', ...};
          HumanResources.addPerson(m);




© SitePen, Inc. 2008. All Rights Reserved
Lightweight Named Parameters



        Why?
                 • Everything as for Named Parameters
                 • But sometimes you get an object from somewhere
                   else




© SitePen, Inc. 2008. All Rights Reserved
Binary Files: File Upload



© SitePen, Inc. 2008. All Rights Reserved
Binary Files: File Upload


        DWR has always had a long list of things that it will
        marshall including Dates, DOM trees, etc


        In addition, DWR will now marshall binary files just
        as if they were the text resources it handles now




© SitePen, Inc. 2008. All Rights Reserved
Binary Files: File Upload

          Java:

          public Remoted {
            public void receiveBinaryFile(byte[] uploaded) { ... }
          }

          HTML:

          <input id='fileId' type='file'/>

          JavaScript:

          var binary = dwr.util.getValue('fileId');
          Remoted.receiveBinaryFile(binary);




© SitePen, Inc. 2008. All Rights Reserved
Binary Files: File Upload

        Will marshall to:
                 • byte[]
                 • java.awt.BufferedImage
                 • java.io.InputStream
                 • org.directwebremoting.io.FileTransfer
                   (gives access to filename and mime-type in
                   addition to the contents)




© SitePen, Inc. 2008. All Rights Reserved
Binary Files: File Upload


        Why?
                 • This is a lot easier than using commons-fileupload
                   or similar
                 • We can provide integration with progress bar
                   widgets




© SitePen, Inc. 2008. All Rights Reserved
Binary Files: Download



© SitePen, Inc. 2008. All Rights Reserved
Binary Files: Download


        Binary file handling is 2 way. It’s good for:
                 • Images
                 • PDF files
                 • Word, Excel documents
                 • etc.




© SitePen, Inc. 2008. All Rights Reserved
Binary Files: Download

          Java:
          public Remoted {
            public void getPDF(String contents) {
                        ByteArrayOutputStream buf = new ByteArrayOutputStream();
                        Document doc = new Document();
                        PdfWriter.getInstance(doc, buf);
                        doc.open();
                        doc.add(new Paragraph(contents));
                        doc.close();
                        return new FileTransfer(quot;ex.pdfquot;, quot;application/pdfquot;, buf.toByteArray());
          }

          JavaScript:
          Remoted.getPDF('Joe', function(data) {
            dwr.engine.openInDownload(data);
          });




© SitePen, Inc. 2008. All Rights Reserved
Binary Files: Download



        Why?
                 • This is a lot easier than creating a special PDF/
                   image/etc serving servlet




© SitePen, Inc. 2008. All Rights Reserved
Javascript extending Java



© SitePen, Inc. 2008. All Rights Reserved
Javascript extending Java




        DWR will allow you to implement Java interfaces
        using JavaScript




© SitePen, Inc. 2008. All Rights Reserved
Javascript extending Java
           Java:
          public interface BazListener {
            void somethingChanged(String msg);
          }
          public class Remote {
            public void addBazListener(BazListener bl) { ... }

                public void calledLater() {
                  for (BazListener bl : listeners)
                    bl.somethingChanged(quot;JS objects can implement Java interfacesquot;);
                }
                ...
          }

          JavaScript:
          function BazListener() {this.$dwrByRef;}
          BazListener.prototype.somethingChanged = function(msg){alert(msg);};

          var bl = new BazListener();
          Remote.addBazListener(bl);




© SitePen, Inc. 2008. All Rights Reserved
Javascript extending Java



        Why?
                 • Intuitive way to interact
                 • Easy Pub-sub
                 • Allows interaction with existing APIs




© SitePen, Inc. 2008. All Rights Reserved
Scalable Reverse Ajax



© SitePen, Inc. 2008. All Rights Reserved
Scalable Reverse Ajax



        Previously there were some scalability limitations
        with the 2.0 reverse ajax API.
        3.0 deprecates the problem areas.




© SitePen, Inc. 2008. All Rights Reserved
Scalable Reverse Ajax


        Reverse Ajax proxies no longer take a list of
        ScriptSessions in the constructor, they just write to
        the current ‘destination’


        The Browser API allows you to change the current
        ‘destination’




© SitePen, Inc. 2008. All Rights Reserved
Scalable Reverse Ajax


          // The default destination is the browser
          // that caused the current action to happen.
          Window.alert(quot;Helloquot;);

          // Non DWR thread have no default destination
          Thread t = new Thread(new Runnable()) {
            public void run() {
              // Error
              Window.alert(quot;Helloquot;);
            }
          });




© SitePen, Inc. 2008. All Rights Reserved
Scalable Reverse Ajax

          // Set the destination to be all browsers that
          // are looking at the current page
          Browser.withCurrentPage(new Runnable()) {
            public void run() {
              Window.alert(quot;Helloquot;);
            }
          });

          // Set the destination to be all browsers that
          // are looking at the current page
          Browser.withCurrentPage(quot;index.htmlquot;, new Runnable()) {
            public void run() {
              Window.alert(quot;Helloquot;);
            }
          });



© SitePen, Inc. 2008. All Rights Reserved
Scalable Reverse Ajax



          // Broadcast to everyone
          Browser.withAllSessions(...);

          // Broadcast to subsets
          Browser.with*Filtered(scriptSesssionFilter, ...);

          // To a known individual
          Browser.withSession(sessionId, ...);




© SitePen, Inc. 2008. All Rights Reserved
Scalable Reverse Ajax



        Why?
                 • It’s generally easier to use
                 • It decouples generation from routing
                 • It scales




© SitePen, Inc. 2008. All Rights Reserved
Reverse Ajax APIs



© SitePen, Inc. 2008. All Rights Reserved
Reverse Ajax APIs



                                            Reverse Ajax != Comet


                   Reverse Ajax == Comet + Polling + Piggyback




© SitePen, Inc. 2008. All Rights Reserved
Reverse Ajax APIs: JS Level



          // Low level: Use server-side W3C DOM methods
          Element ele = doc.createElement(quot;pquot;);

          ScriptSessions.addFunctionCall(
                       quot;document.body.appendChildquot;,
                       ele);




© SitePen, Inc. 2008. All Rights Reserved
Reverse Ajax APIs: JS Level




          // Low level: Any arbitrary JavaScript
          String s = quot;if (document.all) window.alert('IE');quot;;

          ScriptSessions.addScript(s);




© SitePen, Inc. 2008. All Rights Reserved
Reverse Ajax APIs: DOM Level



          // Some methods from Window and Document
          import javax.servlet.http.Cookie;
          import org.directwebremoting.ui.browser.Document;

          Cookie c = new Cookie(quot;namequot;, quot;valuequot;);
          Document.setCookie(c);




© SitePen, Inc. 2008. All Rights Reserved
Reverse Ajax APIs: dwr.util



          // dwr.util in Java
          import org.directwebremoting.ui.dwr.Util;

          String[] opts = new String[] {quot;onequot;,quot;twoquot;,...};
          Util.addOptions(quot;liquot;, opts);




© SitePen, Inc. 2008. All Rights Reserved
Reverse Ajax APIs: Scriptaculous




          // Scriptaculous Effects in Java
          import org.directwebremoting.ui.scriptaculous.Effect;

          Effect.fade(quot;someIdquot;);




© SitePen, Inc. 2008. All Rights Reserved
Reverse Ajax APIs: TIBCO GI


          // TIBCO General Interface in Java
          import jsx3.GI;
          import jsx3.app.*;
          import jsx3.gui.*;

          Server server = GI.getServer(quot;servernamequot;);
          TextBox phoneNum = server.getJSXByName(quot;phoneNumquot;,
                                             TextBox.class);

          phoneNum.setValue(quot;servernamequot;);




© SitePen, Inc. 2008. All Rights Reserved
Reverse Ajax APIs: Dojo



          // Dojo in Java
          import org.dojotoolkit.dijit.Dijit;
          import org.dojotoolkit.dijit.Editor;

          Editor e = Dijit.byId(quot;pricequot;, Editor.class);
          e.setValue(42);




© SitePen, Inc. 2008. All Rights Reserved
Scalable Reverse Ajax

        Why?
                 • A full range of APIs for dynamically updating client
                   data
                 • DWR doesn’t do widgets, but it does talk to the
                   people that do


        Drapgen can be used to create and maintain large
        APIs




© SitePen, Inc. 2008. All Rights Reserved
Dojo Data Store



© SitePen, Inc. 2008. All Rights Reserved
Dojo Data Store




        DWR now implements all 4 interfaces to allow Dojo
        to sync data with Java code on the server




© SitePen, Inc. 2008. All Rights Reserved
Dojo Data Store


          Java:

          // Load the data somehow
          Map<String, Person> ppl = ...;

          // Create an implementation of StoreProvider to hold the data
          MapStoreProvider provider = new MapStoreProvider(ppl, Person.class);

          // Tell DWR to expose the data to the internet
          Directory.register(quot;testServerDataquot;, provider);




© SitePen, Inc. 2008. All Rights Reserved
Dojo Data Store

          HTML:
          <table id=quot;gridquot; dojoType=quot;dojox.grid.DataGridquot; ><tr>
            <th field=quot;namequot; width=quot;120pxquot; editable=quot;truequot;>Name</th>
            ...
          </tr></table>



          JavaScript:
          dojo.registerModulePath(quot;dwrquot;, quot;path/from/dojo/to/dwrquot;);
          dojo.require(quot;dwr.data.Storequot;);

          dwrStore = new dwr.data.Store(quot;testServerDataquot;, { subscribe:true });
          dijit.byId(quot;gridquot;).setStore(dwrStore);




© SitePen, Inc. 2008. All Rights Reserved
Dojo Data Store


          Java:

          // The StoreProvider from earlier
          MapStoreProvider provider = ...

          // Get a representation of the internal data
          Map<String, Person> data = provider.asMap();

          // Mutate it
          data.addPerson(new Person(...));

          // The browsers viewing the data automagically update




© SitePen, Inc. 2008. All Rights Reserved
Dojo Data Store


        Why?
                 • Data-Sync APIs are hard to get right, but are really
                   simple to use
                 • There is lots of potential for network level
                   optimization




© SitePen, Inc. 2008. All Rights Reserved
JSON / JSONP / JSON-RPC



© SitePen, Inc. 2008. All Rights Reserved
Dojo Data Store



        DWR now supports:
                 • plain JSON
                 • JSONP
                 • JSON-RPC




© SitePen, Inc. 2008. All Rights Reserved
JSONP

          Java:

          public class Demo {
            public sayHello(String name) {
              return quot;Hello, quot; + name;
            }
          }

          Shell:

          $ wget http://example.com/app/dwr/jsonp/Demo/sayHello? ↩
                                callback=callback&param0=quot;Joequot;

          -> callback(quot;Hello, Joequot;);




© SitePen, Inc. 2008. All Rights Reserved
JSONP
          Dojo:

          dojo.io.script.get({
            url:'http://example.com/app/dwr/jsonp/Demo/sayHello',
            content:{param:'Joe'}
          }).addCallback(function() { ... });

          JQuery:

          $.ajax({
            dataType:'jsonp',
            data:'param=Joe',
            url:'http://example.com/app/dwr/jsonp/Demo/sayHello',
            success:function () { ... },
          });



© SitePen, Inc. 2008. All Rights Reserved
JSON / JSONP / JSON-RPC


        Why?
                 • To allow DWR to remote functions to things other
                   than a DWR client
                 • ‘DWRP’ is designed to be something we can change
                   without a long deprecation process




© SitePen, Inc. 2008. All Rights Reserved
Varargs



© SitePen, Inc. 2008. All Rights Reserved
Varargs




        You can now call methods with a vararg parameter




© SitePen, Inc. 2008. All Rights Reserved
Varargs


          Java:

          public Remoted {
            public void method(String... arg) { ... }
          }

          JavaScript:

          Remoted.method(quot;Onequot;, quot;Twoquot;, quot;Threequot;);




© SitePen, Inc. 2008. All Rights Reserved
Varargs

        Why?
                 • It saves the hassle of wrapping options in an array
                   or collection before a method is called


        Alert:
                 • It could break some corner cases when mixing
                   servlet parameters with normal parameters




© SitePen, Inc. 2008. All Rights Reserved
Overloaded Methods



© SitePen, Inc. 2008. All Rights Reserved
Overloaded Methods




        Previously DWR prevented you from reliably calling
        overloaded methods




© SitePen, Inc. 2008. All Rights Reserved
Overloaded Methods

          Java:
          public Remoted {
            public void method(int num) {
                         log.debug(quot;int method called with quot; + num);
                }
                 public void method(String str) {
                         log.debug(quot;String method called with quot; + str);
                }
          }

          JavaScript:
          Remoted.method(quot;String Paramquot;);
          Remoted.method(42);




© SitePen, Inc. 2008. All Rights Reserved
Overloaded Methods



        Why?
                 • It saves you from creating multiple proxy methods
                   to existing APIs




© SitePen, Inc. 2008. All Rights Reserved
What’s Next



© SitePen, Inc. 2008. All Rights Reserved
Top Directions for DWR 3.1

        Shorter release cycle
        Gears
        SMD
        Dojo:
                 • Reverse Ajax API support
                 • Auto-build
        Rest




© SitePen, Inc. 2008. All Rights Reserved
Any Questions?


        • http://directwebremoting.org
        • http://sitepen.com



© SitePen, Inc. 2008. All Rights Reserved

More Related Content

What's hot

QThreads: Are You Using Them Wrong?
QThreads: Are You Using Them Wrong? QThreads: Are You Using Them Wrong?
QThreads: Are You Using Them Wrong? ICS
 
Formation Informatique base et généralités
Formation Informatique base et généralitésFormation Informatique base et généralités
Formation Informatique base et généralitésSinovatia
 
Chapitre1ordinateur et systeme d'exploitation
Chapitre1ordinateur et systeme d'exploitationChapitre1ordinateur et systeme d'exploitation
Chapitre1ordinateur et systeme d'exploitationSaad Loula
 
PyQt: rapid application development
PyQt: rapid application developmentPyQt: rapid application development
PyQt: rapid application developmentDeveler S.r.l.
 
Django Framework Overview forNon-Python Developers
Django Framework Overview forNon-Python DevelopersDjango Framework Overview forNon-Python Developers
Django Framework Overview forNon-Python DevelopersRosario Renga
 
Cours informatique chapitre 1 ordinateur et système d'exploitation 7ème
Cours informatique chapitre 1 ordinateur et système d'exploitation   7ème Cours informatique chapitre 1 ordinateur et système d'exploitation   7ème
Cours informatique chapitre 1 ordinateur et système d'exploitation 7ème Tunisie collège
 
jBPM: Implementando Procesos con Software Libre
jBPM: Implementando Procesos con Software LibrejBPM: Implementando Procesos con Software Libre
jBPM: Implementando Procesos con Software LibrePablo Sepulveda P.
 
Ordinateur & ses constituants
Ordinateur & ses constituantsOrdinateur & ses constituants
Ordinateur & ses constituantssaidnord
 
Integrated Motion on EtherNet/IP: Solution Overview
Integrated Motion on EtherNet/IP: Solution OverviewIntegrated Motion on EtherNet/IP: Solution Overview
Integrated Motion on EtherNet/IP: Solution OverviewRockwell Automation
 
OVERVIEW: Chromium Source Tree
OVERVIEW: Chromium Source TreeOVERVIEW: Chromium Source Tree
OVERVIEW: Chromium Source TreeChang W. Doh
 
Cours informatique chapitre 1 ordinateur et système d'exploitation 7ème
Cours informatique chapitre 1 ordinateur et système d'exploitation   7ème Cours informatique chapitre 1 ordinateur et système d'exploitation   7ème
Cours informatique chapitre 1 ordinateur et système d'exploitation 7ème Tunisie collège
 
NI221 - Fundamentals of Computer
NI221 - Fundamentals of ComputerNI221 - Fundamentals of Computer
NI221 - Fundamentals of Computerpaulcaspe
 
Dictionaries and Sets in Python
Dictionaries and Sets in PythonDictionaries and Sets in Python
Dictionaries and Sets in PythonMSB Academy
 
Gestion des dossiers et fichiers
Gestion des dossiers et fichiersGestion des dossiers et fichiers
Gestion des dossiers et fichierss12ber
 

What's hot (20)

QThreads: Are You Using Them Wrong?
QThreads: Are You Using Them Wrong? QThreads: Are You Using Them Wrong?
QThreads: Are You Using Them Wrong?
 
Formation Informatique base et généralités
Formation Informatique base et généralitésFormation Informatique base et généralités
Formation Informatique base et généralités
 
Chapitre1ordinateur et systeme d'exploitation
Chapitre1ordinateur et systeme d'exploitationChapitre1ordinateur et systeme d'exploitation
Chapitre1ordinateur et systeme d'exploitation
 
PyQt: rapid application development
PyQt: rapid application developmentPyQt: rapid application development
PyQt: rapid application development
 
Django Framework Overview forNon-Python Developers
Django Framework Overview forNon-Python DevelopersDjango Framework Overview forNon-Python Developers
Django Framework Overview forNon-Python Developers
 
Cours informatique chapitre 1 ordinateur et système d'exploitation 7ème
Cours informatique chapitre 1 ordinateur et système d'exploitation   7ème Cours informatique chapitre 1 ordinateur et système d'exploitation   7ème
Cours informatique chapitre 1 ordinateur et système d'exploitation 7ème
 
l'ordinateur
l'ordinateurl'ordinateur
l'ordinateur
 
PyCharm demo
PyCharm demoPyCharm demo
PyCharm demo
 
jBPM: Implementando Procesos con Software Libre
jBPM: Implementando Procesos con Software LibrejBPM: Implementando Procesos con Software Libre
jBPM: Implementando Procesos con Software Libre
 
Ordinateur & ses constituants
Ordinateur & ses constituantsOrdinateur & ses constituants
Ordinateur & ses constituants
 
Python
PythonPython
Python
 
Exercice2
Exercice2Exercice2
Exercice2
 
Integrated Motion on EtherNet/IP: Solution Overview
Integrated Motion on EtherNet/IP: Solution OverviewIntegrated Motion on EtherNet/IP: Solution Overview
Integrated Motion on EtherNet/IP: Solution Overview
 
OVERVIEW: Chromium Source Tree
OVERVIEW: Chromium Source TreeOVERVIEW: Chromium Source Tree
OVERVIEW: Chromium Source Tree
 
Cours informatique chapitre 1 ordinateur et système d'exploitation 7ème
Cours informatique chapitre 1 ordinateur et système d'exploitation   7ème Cours informatique chapitre 1 ordinateur et système d'exploitation   7ème
Cours informatique chapitre 1 ordinateur et système d'exploitation 7ème
 
Python Tutorial Part 2
Python Tutorial Part 2Python Tutorial Part 2
Python Tutorial Part 2
 
NI221 - Fundamentals of Computer
NI221 - Fundamentals of ComputerNI221 - Fundamentals of Computer
NI221 - Fundamentals of Computer
 
Pytest KT.pptx
Pytest KT.pptxPytest KT.pptx
Pytest KT.pptx
 
Dictionaries and Sets in Python
Dictionaries and Sets in PythonDictionaries and Sets in Python
Dictionaries and Sets in Python
 
Gestion des dossiers et fichiers
Gestion des dossiers et fichiersGestion des dossiers et fichiers
Gestion des dossiers et fichiers
 

Viewers also liked

SBML: What Is It About?
SBML: What Is It About?SBML: What Is It About?
SBML: What Is It About?Mike Hucka
 
Lenovo's 'Idea Tweetathon' Contest Guidelines
Lenovo's 'Idea Tweetathon' Contest GuidelinesLenovo's 'Idea Tweetathon' Contest Guidelines
Lenovo's 'Idea Tweetathon' Contest GuidelinesLenovo
 
Cross site calls with javascript - the right way with CORS
Cross site calls with javascript - the right way with CORSCross site calls with javascript - the right way with CORS
Cross site calls with javascript - the right way with CORSMichael Neale
 
The Role of Standards in BPM
The Role of Standards in BPMThe Role of Standards in BPM
The Role of Standards in BPMSandy Kemsley
 
Specialist in personal injury law
Specialist in personal injury lawSpecialist in personal injury law
Specialist in personal injury lawParamount Lawyers
 
The Most Misunderstood “Buzzword” of All Time: Content Marketing
The Most Misunderstood “Buzzword” of All Time: Content MarketingThe Most Misunderstood “Buzzword” of All Time: Content Marketing
The Most Misunderstood “Buzzword” of All Time: Content MarketingGhergich & Co.
 
Halkin Dusmanlari
Halkin DusmanlariHalkin Dusmanlari
Halkin Dusmanlarikaanay
 
Streamlining the Quota Process for a World-Class Sales Organization
Streamlining the Quota Process for a World-Class Sales OrganizationStreamlining the Quota Process for a World-Class Sales Organization
Streamlining the Quota Process for a World-Class Sales OrganizationCallidus Software
 
Stefano Ricci, PRIVACY E SERVIZI DELLA SOCIETA' DELL'INFORMAZIONE (2)
Stefano Ricci, PRIVACY E SERVIZI DELLA SOCIETA' DELL'INFORMAZIONE (2)Stefano Ricci, PRIVACY E SERVIZI DELLA SOCIETA' DELL'INFORMAZIONE (2)
Stefano Ricci, PRIVACY E SERVIZI DELLA SOCIETA' DELL'INFORMAZIONE (2)Andrea Rossetti
 
Callidus Software Product Suite Overview: What's New
Callidus Software Product Suite Overview: What's NewCallidus Software Product Suite Overview: What's New
Callidus Software Product Suite Overview: What's NewCallidus Software
 
APMP Knowledge Sharing Tools 11 Oct07
APMP  Knowledge Sharing Tools 11 Oct07APMP  Knowledge Sharing Tools 11 Oct07
APMP Knowledge Sharing Tools 11 Oct07guest66ff7d
 
01 Paolo Lessio, Processo civile telematico
01 Paolo Lessio, Processo civile telematico01 Paolo Lessio, Processo civile telematico
01 Paolo Lessio, Processo civile telematicoAndrea Rossetti
 
02 - Paolo Lessio, Processo civile telematico
02 - Paolo Lessio, Processo civile telematico02 - Paolo Lessio, Processo civile telematico
02 - Paolo Lessio, Processo civile telematicoAndrea Rossetti
 
New Media Addicts Anonymous
New Media Addicts AnonymousNew Media Addicts Anonymous
New Media Addicts AnonymousGeert Wissink
 
Andrea Cavalloni, Digital Rights Management: Il caso Sony-BMG
Andrea Cavalloni, Digital Rights Management:Il caso Sony-BMGAndrea Cavalloni, Digital Rights Management:Il caso Sony-BMG
Andrea Cavalloni, Digital Rights Management: Il caso Sony-BMGAndrea Rossetti
 
Hollywood vs Silicon Valley: Open Video als Vermittler
Hollywood vs Silicon Valley: Open Video als VermittlerHollywood vs Silicon Valley: Open Video als Vermittler
Hollywood vs Silicon Valley: Open Video als VermittlerBertram Gugel
 
Film Titles
Film TitlesFilm Titles
Film Titlesmezusa
 
Decisions and Time in the Information Society
Decisions and Time in the Information SocietyDecisions and Time in the Information Society
Decisions and Time in the Information Societyjexxon
 

Viewers also liked (20)

SBML: What Is It About?
SBML: What Is It About?SBML: What Is It About?
SBML: What Is It About?
 
Lenovo's 'Idea Tweetathon' Contest Guidelines
Lenovo's 'Idea Tweetathon' Contest GuidelinesLenovo's 'Idea Tweetathon' Contest Guidelines
Lenovo's 'Idea Tweetathon' Contest Guidelines
 
Cross site calls with javascript - the right way with CORS
Cross site calls with javascript - the right way with CORSCross site calls with javascript - the right way with CORS
Cross site calls with javascript - the right way with CORS
 
The Role of Standards in BPM
The Role of Standards in BPMThe Role of Standards in BPM
The Role of Standards in BPM
 
Specialist in personal injury law
Specialist in personal injury lawSpecialist in personal injury law
Specialist in personal injury law
 
The Most Misunderstood “Buzzword” of All Time: Content Marketing
The Most Misunderstood “Buzzword” of All Time: Content MarketingThe Most Misunderstood “Buzzword” of All Time: Content Marketing
The Most Misunderstood “Buzzword” of All Time: Content Marketing
 
Halkin Dusmanlari
Halkin DusmanlariHalkin Dusmanlari
Halkin Dusmanlari
 
Streamlining the Quota Process for a World-Class Sales Organization
Streamlining the Quota Process for a World-Class Sales OrganizationStreamlining the Quota Process for a World-Class Sales Organization
Streamlining the Quota Process for a World-Class Sales Organization
 
Stefano Ricci, PRIVACY E SERVIZI DELLA SOCIETA' DELL'INFORMAZIONE (2)
Stefano Ricci, PRIVACY E SERVIZI DELLA SOCIETA' DELL'INFORMAZIONE (2)Stefano Ricci, PRIVACY E SERVIZI DELLA SOCIETA' DELL'INFORMAZIONE (2)
Stefano Ricci, PRIVACY E SERVIZI DELLA SOCIETA' DELL'INFORMAZIONE (2)
 
Callidus Software Product Suite Overview: What's New
Callidus Software Product Suite Overview: What's NewCallidus Software Product Suite Overview: What's New
Callidus Software Product Suite Overview: What's New
 
Agencies Blogging
Agencies BloggingAgencies Blogging
Agencies Blogging
 
APMP Knowledge Sharing Tools 11 Oct07
APMP  Knowledge Sharing Tools 11 Oct07APMP  Knowledge Sharing Tools 11 Oct07
APMP Knowledge Sharing Tools 11 Oct07
 
01 Paolo Lessio, Processo civile telematico
01 Paolo Lessio, Processo civile telematico01 Paolo Lessio, Processo civile telematico
01 Paolo Lessio, Processo civile telematico
 
02 - Paolo Lessio, Processo civile telematico
02 - Paolo Lessio, Processo civile telematico02 - Paolo Lessio, Processo civile telematico
02 - Paolo Lessio, Processo civile telematico
 
New Media Addicts Anonymous
New Media Addicts AnonymousNew Media Addicts Anonymous
New Media Addicts Anonymous
 
Andrea Cavalloni, Digital Rights Management: Il caso Sony-BMG
Andrea Cavalloni, Digital Rights Management:Il caso Sony-BMGAndrea Cavalloni, Digital Rights Management:Il caso Sony-BMG
Andrea Cavalloni, Digital Rights Management: Il caso Sony-BMG
 
Hollywood vs Silicon Valley: Open Video als Vermittler
Hollywood vs Silicon Valley: Open Video als VermittlerHollywood vs Silicon Valley: Open Video als Vermittler
Hollywood vs Silicon Valley: Open Video als Vermittler
 
Film Titles
Film TitlesFilm Titles
Film Titles
 
Decisions and Time in the Information Society
Decisions and Time in the Information SocietyDecisions and Time in the Information Society
Decisions and Time in the Information Society
 
6 Takes
6 Takes6 Takes
6 Takes
 

Similar to What's new in DWR version 3

Apache Wicket Web Framework
Apache Wicket Web FrameworkApache Wicket Web Framework
Apache Wicket Web FrameworkLuther Baker
 
The curious Life of JavaScript - Talk at SI-SE 2015
The curious Life of JavaScript - Talk at SI-SE 2015The curious Life of JavaScript - Talk at SI-SE 2015
The curious Life of JavaScript - Talk at SI-SE 2015jbandi
 
Rapid java backend and api development for mobile devices
Rapid java backend and api development for mobile devicesRapid java backend and api development for mobile devices
Rapid java backend and api development for mobile devicesciklum_ods
 
Java EE 7 (Hamed Hatami)
Java EE 7 (Hamed Hatami)Java EE 7 (Hamed Hatami)
Java EE 7 (Hamed Hatami)Hamed Hatami
 
Intro to JavaScript
Intro to JavaScriptIntro to JavaScript
Intro to JavaScriptYakov Fain
 
Why Nodejs Guilin Shanghai
Why Nodejs Guilin ShanghaiWhy Nodejs Guilin Shanghai
Why Nodejs Guilin ShanghaiJackson Tian
 
Why Node.js
Why Node.jsWhy Node.js
Why Node.jsguileen
 
IE 8 et les standards du Web - Chris Wilson - Paris Web 2008
IE 8 et les standards du Web - Chris Wilson - Paris Web 2008IE 8 et les standards du Web - Chris Wilson - Paris Web 2008
IE 8 et les standards du Web - Chris Wilson - Paris Web 2008Association Paris-Web
 
Google Back To Front: From Gears to App Engine and Beyond
Google Back To Front: From Gears to App Engine and BeyondGoogle Back To Front: From Gears to App Engine and Beyond
Google Back To Front: From Gears to App Engine and Beyonddion
 
Automated integration testing of distributed systems with Docker Compose and ...
Automated integration testing of distributed systems with Docker Compose and ...Automated integration testing of distributed systems with Docker Compose and ...
Automated integration testing of distributed systems with Docker Compose and ...Boris Kravtsov
 
Deep Dive Java 17 Devoxx UK
Deep Dive Java 17 Devoxx UKDeep Dive Java 17 Devoxx UK
Deep Dive Java 17 Devoxx UKJosé Paumard
 
Getting started with Websocket and Server-sent Events using Java - Arun Gupta
Getting started with Websocket and Server-sent Events using Java - Arun Gupta Getting started with Websocket and Server-sent Events using Java - Arun Gupta
Getting started with Websocket and Server-sent Events using Java - Arun Gupta jaxconf
 
Ajax with DWR
Ajax with DWRAjax with DWR
Ajax with DWRgouthamrv
 
Getting Started with WebSocket and Server-Sent Events using Java by Arun Gupta
Getting Started with WebSocket and Server-Sent Events using Java by Arun GuptaGetting Started with WebSocket and Server-Sent Events using Java by Arun Gupta
Getting Started with WebSocket and Server-Sent Events using Java by Arun GuptaCodemotion
 
Java EE 7 in practise - OTN Hyderabad 2014
Java EE 7 in practise - OTN Hyderabad 2014Java EE 7 in practise - OTN Hyderabad 2014
Java EE 7 in practise - OTN Hyderabad 2014Jagadish Prasath
 
Boston Computing Review - Java Server Pages
Boston Computing Review - Java Server PagesBoston Computing Review - Java Server Pages
Boston Computing Review - Java Server PagesJohn Brunswick
 

Similar to What's new in DWR version 3 (20)

AJppt.pptx
AJppt.pptxAJppt.pptx
AJppt.pptx
 
Apache Wicket Web Framework
Apache Wicket Web FrameworkApache Wicket Web Framework
Apache Wicket Web Framework
 
The curious Life of JavaScript - Talk at SI-SE 2015
The curious Life of JavaScript - Talk at SI-SE 2015The curious Life of JavaScript - Talk at SI-SE 2015
The curious Life of JavaScript - Talk at SI-SE 2015
 
Rapid java backend and api development for mobile devices
Rapid java backend and api development for mobile devicesRapid java backend and api development for mobile devices
Rapid java backend and api development for mobile devices
 
Json generation
Json generationJson generation
Json generation
 
Java EE 7 (Hamed Hatami)
Java EE 7 (Hamed Hatami)Java EE 7 (Hamed Hatami)
Java EE 7 (Hamed Hatami)
 
Intro to JavaScript
Intro to JavaScriptIntro to JavaScript
Intro to JavaScript
 
Why Nodejs Guilin Shanghai
Why Nodejs Guilin ShanghaiWhy Nodejs Guilin Shanghai
Why Nodejs Guilin Shanghai
 
Why Node.js
Why Node.jsWhy Node.js
Why Node.js
 
IE 8 et les standards du Web - Chris Wilson - Paris Web 2008
IE 8 et les standards du Web - Chris Wilson - Paris Web 2008IE 8 et les standards du Web - Chris Wilson - Paris Web 2008
IE 8 et les standards du Web - Chris Wilson - Paris Web 2008
 
Google Back To Front: From Gears to App Engine and Beyond
Google Back To Front: From Gears to App Engine and BeyondGoogle Back To Front: From Gears to App Engine and Beyond
Google Back To Front: From Gears to App Engine and Beyond
 
Automated integration testing of distributed systems with Docker Compose and ...
Automated integration testing of distributed systems with Docker Compose and ...Automated integration testing of distributed systems with Docker Compose and ...
Automated integration testing of distributed systems with Docker Compose and ...
 
Deep Dive Java 17 Devoxx UK
Deep Dive Java 17 Devoxx UKDeep Dive Java 17 Devoxx UK
Deep Dive Java 17 Devoxx UK
 
Getting started with Websocket and Server-sent Events using Java - Arun Gupta
Getting started with Websocket and Server-sent Events using Java - Arun Gupta Getting started with Websocket and Server-sent Events using Java - Arun Gupta
Getting started with Websocket and Server-sent Events using Java - Arun Gupta
 
Having Fun with Play
Having Fun with PlayHaving Fun with Play
Having Fun with Play
 
Ajax with DWR
Ajax with DWRAjax with DWR
Ajax with DWR
 
Getting Started with WebSocket and Server-Sent Events using Java by Arun Gupta
Getting Started with WebSocket and Server-Sent Events using Java by Arun GuptaGetting Started with WebSocket and Server-Sent Events using Java by Arun Gupta
Getting Started with WebSocket and Server-Sent Events using Java by Arun Gupta
 
Java EE 7 in practise - OTN Hyderabad 2014
Java EE 7 in practise - OTN Hyderabad 2014Java EE 7 in practise - OTN Hyderabad 2014
Java EE 7 in practise - OTN Hyderabad 2014
 
I Feel Pretty
I Feel PrettyI Feel Pretty
I Feel Pretty
 
Boston Computing Review - Java Server Pages
Boston Computing Review - Java Server PagesBoston Computing Review - Java Server Pages
Boston Computing Review - Java Server Pages
 

Recently uploaded

The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
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
 
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesThousandEyes
 
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
 
[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
 
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
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
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
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Strongerpanagenda
 
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
 
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
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Farhan Tariq
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
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
 
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...AliaaTarek5
 
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
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demoHarshalMandlekar2
 
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
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentPim van der Noll
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 

Recently uploaded (20)

The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
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
 
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
 
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
 
[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
 
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
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
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
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
 
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
 
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...
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
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
 
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
 
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
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demo
 
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
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 

What's new in DWR version 3

  • 1. What’s new in DWR v3 Joe Walker DWR Lead Developer SitePen UK
  • 2. Recap Since we last talked ... Named Parameters Binary Files JavaScript Extending Java Better Reverse Ajax Data Sync: Dojo Data Store JSON / JSONP / JSON-RPC Varargs and Overloaded Methods What’s Next © SitePen, Inc. 2008. All Rights Reserved
  • 3. Recap © SitePen, Inc. 2008. All Rights Reserved
  • 4. © SitePen, Inc. 2008. All Rights Reserved
  • 5. Marshalling Types Primitive types, and their Object counterparts int, boolean, long, float, double, etc Obvious classes String, Date, BigDecimal, BigInteger, Enum, etc Arrays and Collections Map, List, Set, Iterator, ... JavaBeans and Objects XML objects DOM, XOM, JDom, Dom4J © SitePen, Inc. 2008. All Rights Reserved
  • 6. © SitePen, Inc. 2008. All Rights Reserved
  • 7. Since we last talked ... TIBCO General Interface SitePen http://svn.directwebremoting.org © SitePen, Inc. 2008. All Rights Reserved
  • 8. Named Parameters © SitePen, Inc. 2008. All Rights Reserved
  • 9. Named Parameters DWR will create client-side classes to look like server-side classes to make passing parameters easy © SitePen, Inc. 2008. All Rights Reserved
  • 10. Named Parameters Java: public interface Person { ... } public class Employee implements Person { ... } public class Manager extends Employee { ... } public HumanResources { public void addPerson(Person p) { ... } } JavaScript: Manager m = new Manager(); HumanResources.addPerson(m); © SitePen, Inc. 2008. All Rights Reserved
  • 11. Named Parameters Why? • Inheritance is useful in places • It saves creating addEmployee() and addManager() methods © SitePen, Inc. 2008. All Rights Reserved
  • 12. Lightweight Named Parameters © SitePen, Inc. 2008. All Rights Reserved
  • 13. Lightweight Named Parameters DWR also allows a lighter-weight method of declaring types © SitePen, Inc. 2008. All Rights Reserved
  • 14. Lightweight Named Parameters Java: public interface Person { ... } public class Employee implements Person { ... } public class Manager extends Employee { ... } public HumanResources { public void addPerson(Person p) { ... } } JavaScript: var m = { $dwrClassName:'Manager', firstname:'Joe', ...}; HumanResources.addPerson(m); © SitePen, Inc. 2008. All Rights Reserved
  • 15. Lightweight Named Parameters Why? • Everything as for Named Parameters • But sometimes you get an object from somewhere else © SitePen, Inc. 2008. All Rights Reserved
  • 16. Binary Files: File Upload © SitePen, Inc. 2008. All Rights Reserved
  • 17. Binary Files: File Upload DWR has always had a long list of things that it will marshall including Dates, DOM trees, etc In addition, DWR will now marshall binary files just as if they were the text resources it handles now © SitePen, Inc. 2008. All Rights Reserved
  • 18. Binary Files: File Upload Java: public Remoted { public void receiveBinaryFile(byte[] uploaded) { ... } } HTML: <input id='fileId' type='file'/> JavaScript: var binary = dwr.util.getValue('fileId'); Remoted.receiveBinaryFile(binary); © SitePen, Inc. 2008. All Rights Reserved
  • 19. Binary Files: File Upload Will marshall to: • byte[] • java.awt.BufferedImage • java.io.InputStream • org.directwebremoting.io.FileTransfer (gives access to filename and mime-type in addition to the contents) © SitePen, Inc. 2008. All Rights Reserved
  • 20. Binary Files: File Upload Why? • This is a lot easier than using commons-fileupload or similar • We can provide integration with progress bar widgets © SitePen, Inc. 2008. All Rights Reserved
  • 21. Binary Files: Download © SitePen, Inc. 2008. All Rights Reserved
  • 22. Binary Files: Download Binary file handling is 2 way. It’s good for: • Images • PDF files • Word, Excel documents • etc. © SitePen, Inc. 2008. All Rights Reserved
  • 23. Binary Files: Download Java: public Remoted { public void getPDF(String contents) { ByteArrayOutputStream buf = new ByteArrayOutputStream(); Document doc = new Document(); PdfWriter.getInstance(doc, buf); doc.open(); doc.add(new Paragraph(contents)); doc.close(); return new FileTransfer(quot;ex.pdfquot;, quot;application/pdfquot;, buf.toByteArray()); } JavaScript: Remoted.getPDF('Joe', function(data) { dwr.engine.openInDownload(data); }); © SitePen, Inc. 2008. All Rights Reserved
  • 24. Binary Files: Download Why? • This is a lot easier than creating a special PDF/ image/etc serving servlet © SitePen, Inc. 2008. All Rights Reserved
  • 25. Javascript extending Java © SitePen, Inc. 2008. All Rights Reserved
  • 26. Javascript extending Java DWR will allow you to implement Java interfaces using JavaScript © SitePen, Inc. 2008. All Rights Reserved
  • 27. Javascript extending Java Java: public interface BazListener { void somethingChanged(String msg); } public class Remote { public void addBazListener(BazListener bl) { ... } public void calledLater() { for (BazListener bl : listeners) bl.somethingChanged(quot;JS objects can implement Java interfacesquot;); } ... } JavaScript: function BazListener() {this.$dwrByRef;} BazListener.prototype.somethingChanged = function(msg){alert(msg);}; var bl = new BazListener(); Remote.addBazListener(bl); © SitePen, Inc. 2008. All Rights Reserved
  • 28. Javascript extending Java Why? • Intuitive way to interact • Easy Pub-sub • Allows interaction with existing APIs © SitePen, Inc. 2008. All Rights Reserved
  • 29. Scalable Reverse Ajax © SitePen, Inc. 2008. All Rights Reserved
  • 30. Scalable Reverse Ajax Previously there were some scalability limitations with the 2.0 reverse ajax API. 3.0 deprecates the problem areas. © SitePen, Inc. 2008. All Rights Reserved
  • 31. Scalable Reverse Ajax Reverse Ajax proxies no longer take a list of ScriptSessions in the constructor, they just write to the current ‘destination’ The Browser API allows you to change the current ‘destination’ © SitePen, Inc. 2008. All Rights Reserved
  • 32. Scalable Reverse Ajax // The default destination is the browser // that caused the current action to happen. Window.alert(quot;Helloquot;); // Non DWR thread have no default destination Thread t = new Thread(new Runnable()) { public void run() { // Error Window.alert(quot;Helloquot;); } }); © SitePen, Inc. 2008. All Rights Reserved
  • 33. Scalable Reverse Ajax // Set the destination to be all browsers that // are looking at the current page Browser.withCurrentPage(new Runnable()) { public void run() { Window.alert(quot;Helloquot;); } }); // Set the destination to be all browsers that // are looking at the current page Browser.withCurrentPage(quot;index.htmlquot;, new Runnable()) { public void run() { Window.alert(quot;Helloquot;); } }); © SitePen, Inc. 2008. All Rights Reserved
  • 34. Scalable Reverse Ajax // Broadcast to everyone Browser.withAllSessions(...); // Broadcast to subsets Browser.with*Filtered(scriptSesssionFilter, ...); // To a known individual Browser.withSession(sessionId, ...); © SitePen, Inc. 2008. All Rights Reserved
  • 35. Scalable Reverse Ajax Why? • It’s generally easier to use • It decouples generation from routing • It scales © SitePen, Inc. 2008. All Rights Reserved
  • 36. Reverse Ajax APIs © SitePen, Inc. 2008. All Rights Reserved
  • 37. Reverse Ajax APIs Reverse Ajax != Comet Reverse Ajax == Comet + Polling + Piggyback © SitePen, Inc. 2008. All Rights Reserved
  • 38. Reverse Ajax APIs: JS Level // Low level: Use server-side W3C DOM methods Element ele = doc.createElement(quot;pquot;); ScriptSessions.addFunctionCall( quot;document.body.appendChildquot;, ele); © SitePen, Inc. 2008. All Rights Reserved
  • 39. Reverse Ajax APIs: JS Level // Low level: Any arbitrary JavaScript String s = quot;if (document.all) window.alert('IE');quot;; ScriptSessions.addScript(s); © SitePen, Inc. 2008. All Rights Reserved
  • 40. Reverse Ajax APIs: DOM Level // Some methods from Window and Document import javax.servlet.http.Cookie; import org.directwebremoting.ui.browser.Document; Cookie c = new Cookie(quot;namequot;, quot;valuequot;); Document.setCookie(c); © SitePen, Inc. 2008. All Rights Reserved
  • 41. Reverse Ajax APIs: dwr.util // dwr.util in Java import org.directwebremoting.ui.dwr.Util; String[] opts = new String[] {quot;onequot;,quot;twoquot;,...}; Util.addOptions(quot;liquot;, opts); © SitePen, Inc. 2008. All Rights Reserved
  • 42. Reverse Ajax APIs: Scriptaculous // Scriptaculous Effects in Java import org.directwebremoting.ui.scriptaculous.Effect; Effect.fade(quot;someIdquot;); © SitePen, Inc. 2008. All Rights Reserved
  • 43. Reverse Ajax APIs: TIBCO GI // TIBCO General Interface in Java import jsx3.GI; import jsx3.app.*; import jsx3.gui.*; Server server = GI.getServer(quot;servernamequot;); TextBox phoneNum = server.getJSXByName(quot;phoneNumquot;, TextBox.class); phoneNum.setValue(quot;servernamequot;); © SitePen, Inc. 2008. All Rights Reserved
  • 44. Reverse Ajax APIs: Dojo // Dojo in Java import org.dojotoolkit.dijit.Dijit; import org.dojotoolkit.dijit.Editor; Editor e = Dijit.byId(quot;pricequot;, Editor.class); e.setValue(42); © SitePen, Inc. 2008. All Rights Reserved
  • 45. Scalable Reverse Ajax Why? • A full range of APIs for dynamically updating client data • DWR doesn’t do widgets, but it does talk to the people that do Drapgen can be used to create and maintain large APIs © SitePen, Inc. 2008. All Rights Reserved
  • 46. Dojo Data Store © SitePen, Inc. 2008. All Rights Reserved
  • 47. Dojo Data Store DWR now implements all 4 interfaces to allow Dojo to sync data with Java code on the server © SitePen, Inc. 2008. All Rights Reserved
  • 48. Dojo Data Store Java: // Load the data somehow Map<String, Person> ppl = ...; // Create an implementation of StoreProvider to hold the data MapStoreProvider provider = new MapStoreProvider(ppl, Person.class); // Tell DWR to expose the data to the internet Directory.register(quot;testServerDataquot;, provider); © SitePen, Inc. 2008. All Rights Reserved
  • 49. Dojo Data Store HTML: <table id=quot;gridquot; dojoType=quot;dojox.grid.DataGridquot; ><tr> <th field=quot;namequot; width=quot;120pxquot; editable=quot;truequot;>Name</th> ... </tr></table> JavaScript: dojo.registerModulePath(quot;dwrquot;, quot;path/from/dojo/to/dwrquot;); dojo.require(quot;dwr.data.Storequot;); dwrStore = new dwr.data.Store(quot;testServerDataquot;, { subscribe:true }); dijit.byId(quot;gridquot;).setStore(dwrStore); © SitePen, Inc. 2008. All Rights Reserved
  • 50. Dojo Data Store Java: // The StoreProvider from earlier MapStoreProvider provider = ... // Get a representation of the internal data Map<String, Person> data = provider.asMap(); // Mutate it data.addPerson(new Person(...)); // The browsers viewing the data automagically update © SitePen, Inc. 2008. All Rights Reserved
  • 51. Dojo Data Store Why? • Data-Sync APIs are hard to get right, but are really simple to use • There is lots of potential for network level optimization © SitePen, Inc. 2008. All Rights Reserved
  • 52. JSON / JSONP / JSON-RPC © SitePen, Inc. 2008. All Rights Reserved
  • 53. Dojo Data Store DWR now supports: • plain JSON • JSONP • JSON-RPC © SitePen, Inc. 2008. All Rights Reserved
  • 54. JSONP Java: public class Demo { public sayHello(String name) { return quot;Hello, quot; + name; } } Shell: $ wget http://example.com/app/dwr/jsonp/Demo/sayHello? ↩ callback=callback&param0=quot;Joequot; -> callback(quot;Hello, Joequot;); © SitePen, Inc. 2008. All Rights Reserved
  • 55. JSONP Dojo: dojo.io.script.get({ url:'http://example.com/app/dwr/jsonp/Demo/sayHello', content:{param:'Joe'} }).addCallback(function() { ... }); JQuery: $.ajax({ dataType:'jsonp', data:'param=Joe', url:'http://example.com/app/dwr/jsonp/Demo/sayHello', success:function () { ... }, }); © SitePen, Inc. 2008. All Rights Reserved
  • 56. JSON / JSONP / JSON-RPC Why? • To allow DWR to remote functions to things other than a DWR client • ‘DWRP’ is designed to be something we can change without a long deprecation process © SitePen, Inc. 2008. All Rights Reserved
  • 57. Varargs © SitePen, Inc. 2008. All Rights Reserved
  • 58. Varargs You can now call methods with a vararg parameter © SitePen, Inc. 2008. All Rights Reserved
  • 59. Varargs Java: public Remoted { public void method(String... arg) { ... } } JavaScript: Remoted.method(quot;Onequot;, quot;Twoquot;, quot;Threequot;); © SitePen, Inc. 2008. All Rights Reserved
  • 60. Varargs Why? • It saves the hassle of wrapping options in an array or collection before a method is called Alert: • It could break some corner cases when mixing servlet parameters with normal parameters © SitePen, Inc. 2008. All Rights Reserved
  • 61. Overloaded Methods © SitePen, Inc. 2008. All Rights Reserved
  • 62. Overloaded Methods Previously DWR prevented you from reliably calling overloaded methods © SitePen, Inc. 2008. All Rights Reserved
  • 63. Overloaded Methods Java: public Remoted { public void method(int num) { log.debug(quot;int method called with quot; + num); } public void method(String str) { log.debug(quot;String method called with quot; + str); } } JavaScript: Remoted.method(quot;String Paramquot;); Remoted.method(42); © SitePen, Inc. 2008. All Rights Reserved
  • 64. Overloaded Methods Why? • It saves you from creating multiple proxy methods to existing APIs © SitePen, Inc. 2008. All Rights Reserved
  • 65. What’s Next © SitePen, Inc. 2008. All Rights Reserved
  • 66. Top Directions for DWR 3.1 Shorter release cycle Gears SMD Dojo: • Reverse Ajax API support • Auto-build Rest © SitePen, Inc. 2008. All Rights Reserved
  • 67. Any Questions? • http://directwebremoting.org • http://sitepen.com © SitePen, Inc. 2008. All Rights Reserved