SlideShare ist ein Scribd-Unternehmen logo
1 von 76
Single-Sourcing
  RAP and RCP




               Chris Aniszczyk
         zx@eclipsesource.com
Leadership roles in over 10 Eclipse projects

     Equinox, OSGi, RCP, p2, RAP, PDE, ECF, ...

Provide services and solutions for the Eclipse ecosystem



                                                 2
What is Eclipse?

              3
Eclipse is a
Technology!

               4
5
Eclipse is a
Foundation!

                6
7
Eclipse is a
Ecosystem!

               8
Let’s Talk Technology...
RCP!

       11
Lotus Notes 8+




                 12
Lotus Sametime 7.5+




                      13
NASA




       14
RCP Knowledge
Web 2.0

          16
Online Presentations?




                        17
Online Photoshop?




                    18
Pixlr




        19
Web 2.0 Knowledge




                    20
21
Web 2.0   Desktop
23
24
25
Impossible?




              26
Exchange the
  Runtime!

           27
Foundation: OSGi

    RCP      RAP




     equinox

                   28
Layers of RCP
RAP Layers
On the Surface
Best of both worlds




                      33
Select a point of view




                         34
Why!?

        35
It’s possible!

                 36
37
38
How much reuse!?

             39
Code Reuse

 80%–98% is possible
platform specific code




                        shared code
                                      40
What about the
   2-20%?

            41
RAP Runs in a Browser

 File system       File upload
 GraphicsContext




    RCP                   RAP
RAP is Multi-User!




 RCP            RAP
API Differences



       RCP        RAP



  Desktop-only     Web-specific
  features            features
Handy Tools

   Eclipse SDK



   RAP SDK
   includes
   - RAP Runtime
   - Tooling
   - Help
Workplace
Shared Projects
                  RAP Workspace




                  RCP Workspace
Example Application
            RCP Mail Demo




                        49
Runs immediately




                   50
Lift Off




           51
Conclusion


   Thanks for listening!
      Questions!?

  www.eclipsesource.com
   www.eclipse.org/rap     52
Extra Slides...




                  53
Import into
    RAP Workspace




                54
Do not copy!




               55
Don't Panic!




               56
Dependencies




 Package Imports
 Optional Dependencies
                         57
Optional Dependencies




                  58
59
Fragments
                  Fragments

    Host Bundle
Create Fragments
                   maildemo.rap




                   maildemo.rcp




                         61
Move extensions




                  62
63
Delegation



               Bundle




             Fragment
                        64
API Differences
RCP




RAP


RCP
 +
RAP
                  65
Helper Class




               66
ImplementationLoader




                 67
Implementations
RCP




RAP




                  68
Zero Errors




              69
Entry Point




              70
Summary



          71
Use Two Workspaces




                     72
Optional Dependencies




                   73
Compatibility Plug-in
Use Fragments
                  Fragments

    Host Bundle
Use Delegation



                 Bundle




             Fragment
                          76

Weitere ähnliche Inhalte

Was ist angesagt?

Une (simple) présentation de Apache Maven 2
Une (simple) présentation de Apache Maven 2Une (simple) présentation de Apache Maven 2
Une (simple) présentation de Apache Maven 2
teejug
 
Spring Meetup Paris - Back to the basics of Spring (Boot)
Spring Meetup Paris - Back to the basics of Spring (Boot)Spring Meetup Paris - Back to the basics of Spring (Boot)
Spring Meetup Paris - Back to the basics of Spring (Boot)
Eric SIBER
 

Was ist angesagt? (20)

Developing Rich Clients with the Eclipse 4 Application Platform
Developing Rich Clients with the Eclipse 4 Application PlatformDeveloping Rich Clients with the Eclipse 4 Application Platform
Developing Rich Clients with the Eclipse 4 Application Platform
 
Hands On with Maven
Hands On with MavenHands On with Maven
Hands On with Maven
 
Java EE vs Spring Framework
Java  EE vs Spring Framework Java  EE vs Spring Framework
Java EE vs Spring Framework
 
GitLab과 Kubernetes를 통한 CI/CD 구축
GitLab과 Kubernetes를 통한 CI/CD 구축GitLab과 Kubernetes를 통한 CI/CD 구축
GitLab과 Kubernetes를 통한 CI/CD 구축
 
Nodejs Explained with Examples
Nodejs Explained with ExamplesNodejs Explained with Examples
Nodejs Explained with Examples
 
Architecture jee principe de inversion de controle et injection des dependances
Architecture jee principe de inversion de controle et injection des dependancesArchitecture jee principe de inversion de controle et injection des dependances
Architecture jee principe de inversion de controle et injection des dependances
 
Une (simple) présentation de Apache Maven 2
Une (simple) présentation de Apache Maven 2Une (simple) présentation de Apache Maven 2
Une (simple) présentation de Apache Maven 2
 
Eclipse IDE
Eclipse IDEEclipse IDE
Eclipse IDE
 
A la découverte de vue.js
A la découverte de vue.jsA la découverte de vue.js
A la découverte de vue.js
 
Source Code management System
Source Code management SystemSource Code management System
Source Code management System
 
Introduction to Maven
Introduction to MavenIntroduction to Maven
Introduction to Maven
 
Intégration continue et déploiement continue avec Jenkins
Intégration continue et déploiement continue avec JenkinsIntégration continue et déploiement continue avec Jenkins
Intégration continue et déploiement continue avec Jenkins
 
Introduction to NodeJS
Introduction to NodeJSIntroduction to NodeJS
Introduction to NodeJS
 
Maven
MavenMaven
Maven
 
Docker Explained | What Is A Docker Container? | Docker Simplified | Docker T...
Docker Explained | What Is A Docker Container? | Docker Simplified | Docker T...Docker Explained | What Is A Docker Container? | Docker Simplified | Docker T...
Docker Explained | What Is A Docker Container? | Docker Simplified | Docker T...
 
Introduction to Spring Framework
Introduction to Spring FrameworkIntroduction to Spring Framework
Introduction to Spring Framework
 
Docker 101 - Nov 2016
Docker 101 - Nov 2016Docker 101 - Nov 2016
Docker 101 - Nov 2016
 
The Enterprise Case for Node.js
The Enterprise Case for Node.jsThe Enterprise Case for Node.js
The Enterprise Case for Node.js
 
BitBucket presentation
BitBucket presentationBitBucket presentation
BitBucket presentation
 
Spring Meetup Paris - Back to the basics of Spring (Boot)
Spring Meetup Paris - Back to the basics of Spring (Boot)Spring Meetup Paris - Back to the basics of Spring (Boot)
Spring Meetup Paris - Back to the basics of Spring (Boot)
 

Ähnlich wie Single Sourcing RCP and RAP

Single Sourcing Techniques for RAP and RCP
Single Sourcing Techniques for RAP and RCPSingle Sourcing Techniques for RAP and RCP
Single Sourcing Techniques for RAP and RCP
Ralf Sternberg
 
Polyglot Plugin Programming
Polyglot Plugin ProgrammingPolyglot Plugin Programming
Polyglot Plugin Programming
Atlassian
 
Ruby on rails探索
Ruby on rails探索Ruby on rails探索
Ruby on rails探索
Mu Chun Wang
 
Overview: Building Open Source Cloud Computing Environments
Overview: Building Open Source Cloud Computing EnvironmentsOverview: Building Open Source Cloud Computing Environments
Overview: Building Open Source Cloud Computing Environments
Mark Hinkle
 
blueMarine photographic workflow with Java
blueMarine photographic workflow with JavablueMarine photographic workflow with Java
blueMarine photographic workflow with Java
Fabrizio Giudici
 

Ähnlich wie Single Sourcing RCP and RAP (20)

Single Sourcing Techniques for RAP and RCP
Single Sourcing Techniques for RAP and RCPSingle Sourcing Techniques for RAP and RCP
Single Sourcing Techniques for RAP and RCP
 
Rich Ajax Platform - theEdge 2012 conference presentation
Rich Ajax Platform - theEdge 2012 conference presentationRich Ajax Platform - theEdge 2012 conference presentation
Rich Ajax Platform - theEdge 2012 conference presentation
 
SlapOS Presentation at VW2011 Seoul
SlapOS Presentation at VW2011 SeoulSlapOS Presentation at VW2011 Seoul
SlapOS Presentation at VW2011 Seoul
 
RxSwift
RxSwiftRxSwift
RxSwift
 
meetPHP#8 - PHP startups prototypes
meetPHP#8 - PHP startups prototypesmeetPHP#8 - PHP startups prototypes
meetPHP#8 - PHP startups prototypes
 
Open Source Toolchains to Manage Cloud Infrastructure
Open Source Toolchains to Manage Cloud InfrastructureOpen Source Toolchains to Manage Cloud Infrastructure
Open Source Toolchains to Manage Cloud Infrastructure
 
Polyglot Plugin Programming
Polyglot Plugin ProgrammingPolyglot Plugin Programming
Polyglot Plugin Programming
 
Single Sourcing RAP and RCP - Desktop and web clients from a single code base
Single Sourcing RAP and RCP - Desktop and web clients from a single code baseSingle Sourcing RAP and RCP - Desktop and web clients from a single code base
Single Sourcing RAP and RCP - Desktop and web clients from a single code base
 
Bosc talk 7-15-2011x
Bosc talk 7-15-2011xBosc talk 7-15-2011x
Bosc talk 7-15-2011x
 
Ruby on rails探索
Ruby on rails探索Ruby on rails探索
Ruby on rails探索
 
Build a Cloud Day SF - Crash Course on Open Source Cloud Computing
Build a Cloud Day SF - Crash Course on Open Source Cloud ComputingBuild a Cloud Day SF - Crash Course on Open Source Cloud Computing
Build a Cloud Day SF - Crash Course on Open Source Cloud Computing
 
Scaling the Container Dataplane
Scaling the Container Dataplane Scaling the Container Dataplane
Scaling the Container Dataplane
 
2014 carlos gzlez florido nksip the erlang sip application server
2014 carlos gzlez florido nksip the erlang sip application server2014 carlos gzlez florido nksip the erlang sip application server
2014 carlos gzlez florido nksip the erlang sip application server
 
Siggraph 2016 - Vulkan and nvidia : the essentials
Siggraph 2016 - Vulkan and nvidia : the essentialsSiggraph 2016 - Vulkan and nvidia : the essentials
Siggraph 2016 - Vulkan and nvidia : the essentials
 
NkSIP: The Erlang SIP application server
NkSIP: The Erlang SIP application serverNkSIP: The Erlang SIP application server
NkSIP: The Erlang SIP application server
 
Overview: Building Open Source Cloud Computing Environments
Overview: Building Open Source Cloud Computing EnvironmentsOverview: Building Open Source Cloud Computing Environments
Overview: Building Open Source Cloud Computing Environments
 
blueMarine photographic workflow with Java
blueMarine photographic workflow with JavablueMarine photographic workflow with Java
blueMarine photographic workflow with Java
 
Extending and scripting PDT
Extending and scripting PDTExtending and scripting PDT
Extending and scripting PDT
 
Adventures in Asymmetric Warfare
Adventures in Asymmetric WarfareAdventures in Asymmetric Warfare
Adventures in Asymmetric Warfare
 
A Tale of a Server Architecture (Frozen Rails 2012)
A Tale of a Server Architecture (Frozen Rails 2012)A Tale of a Server Architecture (Frozen Rails 2012)
A Tale of a Server Architecture (Frozen Rails 2012)
 

Mehr von Chris Aniszczyk

The Open Source... Behind the Tweets
The Open Source... Behind the TweetsThe Open Source... Behind the Tweets
The Open Source... Behind the Tweets
Chris Aniszczyk
 
Open Source Compliance at Twitter
Open Source Compliance at TwitterOpen Source Compliance at Twitter
Open Source Compliance at Twitter
Chris Aniszczyk
 
Effective Development With Eclipse Mylyn, Git, Gerrit and Hudson
Effective Development With Eclipse Mylyn, Git, Gerrit and HudsonEffective Development With Eclipse Mylyn, Git, Gerrit and Hudson
Effective Development With Eclipse Mylyn, Git, Gerrit and Hudson
Chris Aniszczyk
 

Mehr von Chris Aniszczyk (20)

Bringing an open source project to the Linux Foundation
Bringing an open source project to the Linux FoundationBringing an open source project to the Linux Foundation
Bringing an open source project to the Linux Foundation
 
Starting an Open Source Program Office (OSPO)
Starting an Open Source Program Office (OSPO)Starting an Open Source Program Office (OSPO)
Starting an Open Source Program Office (OSPO)
 
Open Container Initiative Update
Open Container Initiative UpdateOpen Container Initiative Update
Open Container Initiative Update
 
Cloud Native Landscape (CNCF and OCI)
Cloud Native Landscape (CNCF and OCI)Cloud Native Landscape (CNCF and OCI)
Cloud Native Landscape (CNCF and OCI)
 
Rise of Open Source Programs
Rise of Open Source ProgramsRise of Open Source Programs
Rise of Open Source Programs
 
The Open Container Initiative (OCI) at 12 months
The Open Container Initiative (OCI) at 12 monthsThe Open Container Initiative (OCI) at 12 months
The Open Container Initiative (OCI) at 12 months
 
Open Source Lessons from the TODO Group
Open Source Lessons from the TODO GroupOpen Source Lessons from the TODO Group
Open Source Lessons from the TODO Group
 
Getting Students Involved in Open Source
Getting Students Involved in Open SourceGetting Students Involved in Open Source
Getting Students Involved in Open Source
 
Life at Twitter + Career Advice for Students
Life at Twitter + Career Advice for StudentsLife at Twitter + Career Advice for Students
Life at Twitter + Career Advice for Students
 
Creating an Open Source Office: Lessons from Twitter
Creating an Open Source Office: Lessons from TwitterCreating an Open Source Office: Lessons from Twitter
Creating an Open Source Office: Lessons from Twitter
 
The Open Source... Behind the Tweets
The Open Source... Behind the TweetsThe Open Source... Behind the Tweets
The Open Source... Behind the Tweets
 
Apache Mesos at Twitter (Texas LinuxFest 2014)
Apache Mesos at Twitter (Texas LinuxFest 2014)Apache Mesos at Twitter (Texas LinuxFest 2014)
Apache Mesos at Twitter (Texas LinuxFest 2014)
 
Evolution of The Twitter Stack
Evolution of The Twitter StackEvolution of The Twitter Stack
Evolution of The Twitter Stack
 
Open Source Craft at Twitter
Open Source Craft at TwitterOpen Source Craft at Twitter
Open Source Craft at Twitter
 
Open Source Compliance at Twitter
Open Source Compliance at TwitterOpen Source Compliance at Twitter
Open Source Compliance at Twitter
 
Effective Development With Eclipse Mylyn, Git, Gerrit and Hudson
Effective Development With Eclipse Mylyn, Git, Gerrit and HudsonEffective Development With Eclipse Mylyn, Git, Gerrit and Hudson
Effective Development With Eclipse Mylyn, Git, Gerrit and Hudson
 
Effective Git with Eclipse
Effective Git with EclipseEffective Git with Eclipse
Effective Git with Eclipse
 
Evolution of Version Control In Open Source
Evolution of Version Control In Open SourceEvolution of Version Control In Open Source
Evolution of Version Control In Open Source
 
ESE 2010: Using Git in Eclipse
ESE 2010: Using Git in EclipseESE 2010: Using Git in Eclipse
ESE 2010: Using Git in Eclipse
 
SWTBot Tutorial
SWTBot TutorialSWTBot Tutorial
SWTBot Tutorial
 

Kürzlich hochgeladen

IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
Enterprise Knowledge
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 

Kürzlich hochgeladen (20)

Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 

Single Sourcing RCP and RAP

Hinweis der Redaktion

  1. introducing each other EclipseSource
  2. Problems: * existing RCP Code * RCP developers not familiar with web technologies * Example: insurance business, complicated forms * Reuse code * Reuse knowledge * Same development environment (Eclipse) * Same concepts (Plug-ins, Extension Points) * Single sourcing is dev of web and desktop apps from a single code base
  3. OSGi specifies a dynamic component model: the Eclipse OSGi implementation is provided by the Equinox project RAP consists of bundles RAP runs on OSGi
  4. Overview of RCP Layers SWT building blocks, native widgets JFace add higher-level API for common UI tasks Workbench does presentation and coordination of UI
  5. need to replace SWT with sth.
  6. RWT implements same API as SWT - client and server part - uses qooxdoo on client - server build on Equinox - server based on JEE techn. - runs in a servlet container (servlet 2.3 - 2.5) - subsets of SWT, JFace, Workbench APIs
  7. SWT, JFace, Workbench APIs → same UI concepts XXX: exchange text RWT ~ SWT
  8. Same UI concepts as in RCP But might not always fit for a web app
  9. Same building blocks, can be arranged differently examples: - custom perspective switcher - custom menu
  10. reuse of existing RCP code * 80% - 98% also reuse of knowledge – takes long time to get familiar with RCP … (cobbler, stay with your trade) Why not 100%? * RAP provides only a subset of RCP * applications need to become multi-user enabled This talk is about how to deal with the gray part
  11. Restrictions due to web environment: unsupported RCP API - GC (research) no platform-indep. perfomant drawing - MouseMove slightly different - modify events sends data in chunks - file upload web-specific requirements - theming
  12. RAP is client/server RAP runs in a multi-user environment - one OSGi instance for all sessions in RAP → shared bundles - singletons shared between sessions - no implicit thread to session assignment - resources (images, colors und fonts) are shared Different scopes
  13. Result multi-user + browser → different code need to separate shared and specific code need place to put the differences possiblities? - plug-ins, extension points - services - fragments
  14. RCP development against RCP runtime RAP runtime → 2 targets
  15. RAP and RCP need different targets switching a target is time-consuming because the complete workspace is recompiled avoids need to open and close projects → 2 workspaces, one for each target
  16. shared projects referenced by both workspaces → not include projects in workspace folder
  17. In the RCP Workspace Created by using new plug-in project wizard Filed in a common projects folder Created as Rich Client Application
  18. runs immediately
  19. Create RAP workspace / switch
  20. do not copy projects into workspace
  21. after import 216 error markers step by step conversion to support both runtimes First problem: dependencies
  22. problem of different bundle ids possible solutions: package import OSGi specification section 3.13.2 problems caused by split-packages optional dependencies on both warnings caused by missing bundle references reexport
  23. list of required bundles org.eclipse.rap.ui org.eclipse.ui properties ‘Optional’ ‘Reexport this dependency’
  24. First error: binding extension point not available in RAP same problem as API differences applies also to extension points: - missing: e.g. bindings, helpSupport … - additional E-Ps for web specific requirements e.g. entrypoint, phaselistener … need place to put platform specific parts
  25. Fragments are bundles that are merged with a host at runtime - can contribute extensions - same classloader as host - at runtime, it's like one bundle well suited to solve single sourcing problems * two fragments per plug-in one for RAP specifics one for RCP specifics * at runtime, only the plug-in that fits the environment will be installed
  26. using the new project wizard fragment project all fragments are filed in the projects folder each workspace contains only the relevant fragments
  27. in RCP workspace move extension from plugin.xml → fragment.xml
  28. solution: delegation-like pattern abstract supertype in host-bundle, that encapsulates the problem type implementation in the (platform dependent) fragment solves the problem loading the platform specific implementation at runtime by means of reflection
  29. RCP has ActionFactory.ABOUT not available in RAP use custom AboutAction use delegation to cover differences (same code for both platforms)
  30. static initializer: loads impl create delegates to impl createInternal does the actual work
  31. finds impl by naming convention needs reflection because no reference to impl at compile time
  32. All errors resolved … … now how to RUN it? entry point main method in SWT entry point is counterpart to main method
  33. extension point attr: parameter (URL parameter) class (implements interface)
  34. the recommended way to work with different targets
  35. excursion: hides optional decencies from app bundles reexport! location in projects folder import into both workspaces