1




   Riena/RCP Applications in the Web using RAP


                Christian Campo
                EclipseCon 2011 – March 22nd




                  Confidential | Date | Other Information, if necessary
März 23, 2011                                                                                        © 2002 IBM Corporation
                                          Copyright © 2011 compeople AG, Made available under the Eclipse Public License v 1.0
What is Riena again ?

        §  RCP based Framework
        §  Client / Server Applications
        §  Remote OSGi Service Support
        §  End-user focused Navigation Concept
        §  Promotes the separation of View and ViewController




Copyright © 2011 compeople AG, Made available under the Eclipse Public License v 1.0   2
End-user focused Navigation Concept ?




Copyright © 2011 compeople AG, Made available under the Eclipse Public License v 1.0   3
RCP started as the Eclipse IDE




Copyright © 2011 compeople AG, Made available under the Eclipse Public License v 1.0   4
RCP – Apps




Copyright © 2011 compeople AG, Made available under the Eclipse Public License v 1.0   5
UI Concepts used in Riena




Copyright © 2011 compeople AG, Made available under the Eclipse Public License v 1.0   6
UI Concepts for Views (=Workarea)



                          •  Model
                                 •  Data modeled in POJO or JavaBeans
                          •  View
                                 •  Widgets
                                 •  Layout
                                 •  Colors, Fonts
                          •  Controller
                              •  ActionListener, SelectionListener, DoubleClickListener
                                 •  Databinding Calls
                                    ActionListener, SelectionListener, DoubleClickListener
                                 •  use of Services (DI ?, OSGi Services)
                                    Databinding Calls
                                 •  use of Services (DI ?, OSGi Services)




Copyright © 2011 compeople AG, Made available under the Eclipse Public License v 1.0         7
Many implementation of the same concept




Copyright © 2011 compeople AG, Made available under the Eclipse Public License v 1.0   8
Riena is also ...

        §  Equinox Security Support for Client / Server Environment
        §  Aimed at large Applications
                §  Avoid Boilerplate Code
                §  Make reoccurring tasks simple
                §  Manage the overall UI structure of the application
        §  Promotes the use of Dependency Injection for Services and
            Extensions using Annotations and API




Copyright © 2011 compeople AG, Made available under the Eclipse Public License v 1.0   9
What is RAP again ?

        §  RCP, JFace and Workbench for Webapplications
        §  Goals
                §  Any RCP App can be run in a Browser
                §  Single-sourcing (same source for desktop and web)
        §  By default a desktop client with a browser look
        §  Themeable
        §  API to convert Singletons into Session-Singletons




Copyright © 2011 compeople AG, Made available under the Eclipse Public License v 1.0   10
What is RAP again ?




Copyright © 2011 compeople AG, Made available under the Eclipse Public License v 1.0   11
Bring Riena and RAP together




Copyright © 2011 compeople AG, Made available under the Eclipse Public License v 1.0   12
Scalability – RCP/Riena


                                                                                            Riena Server
            Browser
             Browser                                   remote Service Calls
               Browser                                                                    stateless Services
                RCP/Riena
                Browser
                        Client




    •  one Session per JVM                                                             •  many worker threads
    •  many RCP Riena Clients                                                          •  stateless Services
    •  maintains Client state                                                          •  calls can take several
                                                                                          seconds




Copyright © 2011 compeople AG, Made available under the Eclipse Public License v 1.0                               13
Scalability – RCP/Riena + RAP


                                                                 RAP Server                  Riena Server
            Browser
             Browser
               Browser                                         Session                     stateless Services
                Browser                                         Session
                  Browser                                         Session
                                                                   Session
                                                                     Session




    •  many Browser Clients                               •    one Session per User     •  many worker threads
                                                          •    short and quick calls    •  stateless Services
                                                          •    stateful                 •  calls can take several
                                                          •    maintains Client state      seconds
                                                          •    runs RCP Client code




Copyright © 2011 compeople AG, Made available under the Eclipse Public License v 1.0                                14
Moving Client Code to the Webcontainer

        §  Identify all Singletons
                §  Some are REAL Singletons (ImageCache)
                §  Some need to become SessionSingletons
        §  Create Fragments for RCP/RAP specific code
                §  Create Facades to call one of the specific impl. at runtime
        §  Local (Client) OSGi Services
                §  should not maintain state
                §  should be reentrant
        §  If you are NOT on the UI Thread, its hard to get the correct
            Display instance i.e. in Jobs. (one Display instance per user)
        §  The GOAL is to SingleSource ! (one source for RCP and RAP)


Copyright © 2011 compeople AG, Made available under the Eclipse Public License v 1.0   15
How to convert Singletons into SessionSingletons
   RCP
                                                                                       RAP
   public MySingleton {
                         public MySingleton extends SessionSingletonBase {
     private static MySingleton instance = new MySingleton();
                             private static MySingleton instance;
     public static MySingleton getInstance() {
            return instance; public static MySingleton getInstance() {
     }                               return (MySingleton)super.getInstance(MySingleton.class);
  }                          }
                         }
         public MySingleton {
 Riena
              private static SingletonProvider<MySingleton> ME = new
         SessionSingletonProvider<MySingleton>(MySingleton.class);

                     public static MySingleton getInstance() {
                            return ME.getInstance(MySingleton.class);
                     }
               }




Copyright © 2011 compeople AG, Made available under the Eclipse Public License v 1.0         16
Creating Facades
                                                                                       Riena
                      // your code using the facades
       public class MyFacade {
                      MyFacade.getInstance().getText(myTextField);
   •  Sometimes you need different code on RCP and RAP
   •  Use a facade to abstract that
   •  Put the platform specific codeinstance = FacadeFactory.getFacade(MyFacade.class);
           private static MyFacade in a fragment

               public static MyFacade getInstance() {
                      return instance;
               }

               public abstract String getText(Text text);
                                                    public class MyFacadeRAP extends MyFacade {
         }
                                            public String getText(Text text) {
                                               ......
public class MyFacadeRCP extends MyFacade { }
                                       }
   public String getText(Text text) {
      ....
   }
}



Copyright © 2011 compeople AG, Made available under the Eclipse Public License v 1.0           17
Moving Riena Client to a Webcontainer

        §  Session -> SessionSingleton
                §  NavigationTreeModel
                §  Workarea (managing the Views attached to Navigation Tree Leafs)
                §  Security (logged User, Permissions, Sessionid)




Copyright © 2011 compeople AG, Made available under the Eclipse Public License v 1.0   18
One more thing....




Copyright © 2011 compeople AG, Made available under the Eclipse Public License v 1.0   19
UI Model Desktop -> Web                                                                Riena + RAP Client


   Riena Client




Copyright © 2011 compeople AG, Made available under the Eclipse Public License v 1.0                        20
Existing Web Application




Copyright © 2011 compeople AG, Made available under the Eclipse Public License v 1.0   21
Bring the two together                                                 Menu




Navigation
Tree
                                                                                         Subapplication
                                                                                         Switcher




  Copyright © 2011 compeople AG, Made available under the Eclipse Public License v 1.0               22
...even on the iPad thanks to RAP




Copyright © 2011 compeople AG, Made available under the Eclipse Public License v 1.0   23
§  If you want to move your Desktop Client to Web
                §  Understand the problem areas
                §  You need to possibly refactor and rework some of your code
                §  SingleSourcing as much as possible
        §  Contact
                §  http://www.eclipse.org/riena
                §  http://wiki.eclipse.org/Riena_Project
                §  riena-dev@eclipse.org
        §  RT BoF TONIGHT(Tuesday) 8:30 pm




Copyright © 2011 compeople AG, Made available under the Eclipse Public License v 1.0

Riena onrap econ-2011

  • 1.
    1 Riena/RCP Applications in the Web using RAP Christian Campo EclipseCon 2011 – March 22nd Confidential | Date | Other Information, if necessary März 23, 2011 © 2002 IBM Corporation Copyright © 2011 compeople AG, Made available under the Eclipse Public License v 1.0
  • 2.
    What is Rienaagain ? §  RCP based Framework §  Client / Server Applications §  Remote OSGi Service Support §  End-user focused Navigation Concept §  Promotes the separation of View and ViewController Copyright © 2011 compeople AG, Made available under the Eclipse Public License v 1.0 2
  • 3.
    End-user focused NavigationConcept ? Copyright © 2011 compeople AG, Made available under the Eclipse Public License v 1.0 3
  • 4.
    RCP started asthe Eclipse IDE Copyright © 2011 compeople AG, Made available under the Eclipse Public License v 1.0 4
  • 5.
    RCP – Apps Copyright© 2011 compeople AG, Made available under the Eclipse Public License v 1.0 5
  • 6.
    UI Concepts usedin Riena Copyright © 2011 compeople AG, Made available under the Eclipse Public License v 1.0 6
  • 7.
    UI Concepts forViews (=Workarea) •  Model •  Data modeled in POJO or JavaBeans •  View •  Widgets •  Layout •  Colors, Fonts •  Controller •  ActionListener, SelectionListener, DoubleClickListener •  Databinding Calls ActionListener, SelectionListener, DoubleClickListener •  use of Services (DI ?, OSGi Services) Databinding Calls •  use of Services (DI ?, OSGi Services) Copyright © 2011 compeople AG, Made available under the Eclipse Public License v 1.0 7
  • 8.
    Many implementation ofthe same concept Copyright © 2011 compeople AG, Made available under the Eclipse Public License v 1.0 8
  • 9.
    Riena is also... §  Equinox Security Support for Client / Server Environment §  Aimed at large Applications §  Avoid Boilerplate Code §  Make reoccurring tasks simple §  Manage the overall UI structure of the application §  Promotes the use of Dependency Injection for Services and Extensions using Annotations and API Copyright © 2011 compeople AG, Made available under the Eclipse Public License v 1.0 9
  • 10.
    What is RAPagain ? §  RCP, JFace and Workbench for Webapplications §  Goals §  Any RCP App can be run in a Browser §  Single-sourcing (same source for desktop and web) §  By default a desktop client with a browser look §  Themeable §  API to convert Singletons into Session-Singletons Copyright © 2011 compeople AG, Made available under the Eclipse Public License v 1.0 10
  • 11.
    What is RAPagain ? Copyright © 2011 compeople AG, Made available under the Eclipse Public License v 1.0 11
  • 12.
    Bring Riena andRAP together Copyright © 2011 compeople AG, Made available under the Eclipse Public License v 1.0 12
  • 13.
    Scalability – RCP/Riena Riena Server Browser Browser remote Service Calls Browser stateless Services RCP/Riena Browser Client •  one Session per JVM •  many worker threads •  many RCP Riena Clients •  stateless Services •  maintains Client state •  calls can take several seconds Copyright © 2011 compeople AG, Made available under the Eclipse Public License v 1.0 13
  • 14.
    Scalability – RCP/Riena+ RAP RAP Server Riena Server Browser Browser Browser Session stateless Services Browser Session Browser Session Session Session •  many Browser Clients •  one Session per User •  many worker threads •  short and quick calls •  stateless Services •  stateful •  calls can take several •  maintains Client state seconds •  runs RCP Client code Copyright © 2011 compeople AG, Made available under the Eclipse Public License v 1.0 14
  • 15.
    Moving Client Codeto the Webcontainer §  Identify all Singletons §  Some are REAL Singletons (ImageCache) §  Some need to become SessionSingletons §  Create Fragments for RCP/RAP specific code §  Create Facades to call one of the specific impl. at runtime §  Local (Client) OSGi Services §  should not maintain state §  should be reentrant §  If you are NOT on the UI Thread, its hard to get the correct Display instance i.e. in Jobs. (one Display instance per user) §  The GOAL is to SingleSource ! (one source for RCP and RAP) Copyright © 2011 compeople AG, Made available under the Eclipse Public License v 1.0 15
  • 16.
    How to convertSingletons into SessionSingletons RCP RAP public MySingleton { public MySingleton extends SessionSingletonBase { private static MySingleton instance = new MySingleton(); private static MySingleton instance; public static MySingleton getInstance() { return instance; public static MySingleton getInstance() { } return (MySingleton)super.getInstance(MySingleton.class); } } } public MySingleton { Riena private static SingletonProvider<MySingleton> ME = new SessionSingletonProvider<MySingleton>(MySingleton.class); public static MySingleton getInstance() { return ME.getInstance(MySingleton.class); } } Copyright © 2011 compeople AG, Made available under the Eclipse Public License v 1.0 16
  • 17.
    Creating Facades Riena // your code using the facades public class MyFacade { MyFacade.getInstance().getText(myTextField); •  Sometimes you need different code on RCP and RAP •  Use a facade to abstract that •  Put the platform specific codeinstance = FacadeFactory.getFacade(MyFacade.class); private static MyFacade in a fragment public static MyFacade getInstance() { return instance; } public abstract String getText(Text text); public class MyFacadeRAP extends MyFacade { } public String getText(Text text) { ...... public class MyFacadeRCP extends MyFacade { } } public String getText(Text text) { .... } } Copyright © 2011 compeople AG, Made available under the Eclipse Public License v 1.0 17
  • 18.
    Moving Riena Clientto a Webcontainer §  Session -> SessionSingleton §  NavigationTreeModel §  Workarea (managing the Views attached to Navigation Tree Leafs) §  Security (logged User, Permissions, Sessionid) Copyright © 2011 compeople AG, Made available under the Eclipse Public License v 1.0 18
  • 19.
    One more thing.... Copyright© 2011 compeople AG, Made available under the Eclipse Public License v 1.0 19
  • 20.
    UI Model Desktop-> Web Riena + RAP Client Riena Client Copyright © 2011 compeople AG, Made available under the Eclipse Public License v 1.0 20
  • 21.
    Existing Web Application Copyright© 2011 compeople AG, Made available under the Eclipse Public License v 1.0 21
  • 22.
    Bring the twotogether Menu Navigation Tree Subapplication Switcher Copyright © 2011 compeople AG, Made available under the Eclipse Public License v 1.0 22
  • 23.
    ...even on theiPad thanks to RAP Copyright © 2011 compeople AG, Made available under the Eclipse Public License v 1.0 23
  • 24.
    §  If youwant to move your Desktop Client to Web §  Understand the problem areas §  You need to possibly refactor and rework some of your code §  SingleSourcing as much as possible §  Contact §  http://www.eclipse.org/riena §  http://wiki.eclipse.org/Riena_Project §  riena-dev@eclipse.org §  RT BoF TONIGHT(Tuesday) 8:30 pm Copyright © 2011 compeople AG, Made available under the Eclipse Public License v 1.0