RAP, RCPWhat's the Difference?
The main difference between Eclipse RAP and Eclipse RCP is RAP's use of RWT
(RAP Widget Toolkit), which is a replacement for SWT
|Figure 2. The Internal Compositions of a RCP and a RAP Application:|
Here's a side-by-side comparison of the technical differences between an RCP application and a RAP one.
Since the only big difference resolves to different rendering techniques (SWT vs. RWT), it follows that the same code written for an RCP application will work (almost) unchanged for a RAP application (see Sidebar 1. How RAP Works for more on their differences and similarities). Figure 3 shows one of the sample RCP application views shipped with Eclipse rendered both as an RCP and as a RAP application. Notice that the RAP one lives within a browser window.
|Figure 3. View Rendered Both as an RCP and as a RAP Application:|
Here's a Sample view rendered both into a RCP standalone client and in RAP within a browser window.
The view uses exactly the same code (shown in Listing 1) in both cases. (The code for the complete sample is available in the code download.)
Exceptions apply to what RAP/RWT can do with respect to RCP/SWT. Probably the most evident difference between the two platforms is the limited set of widgets supported by RAP. Since RWT renders widgets as DHTML primitives, some of the most advanced widgets available on SWT cannot be used with RAP. This includes, for example, the StyledText widget, which is used to create text editors that allow different text colors, fonts, and attributes for different portions of text. The common use case for this widget is editors with syntax highlighting. RAP is limited to non-styled Text widgets that render as TEXTAREA HTML elements.
However, this does not imply that you are limited to basic HTML components in your RAP applications. On the contrary, RAP allows for the creation of custom widgets, via some mixed Java and DHTML code, such as the Google Maps example described in the RAP documentation.
Another thing you cannot do in RAP is direct drawing on canvas; you cannot draw circles, lines, and other graphic primitives. Therefore, high-level Eclipse frameworks such as GEF and GMF won't work on RAP because they rely on custom canvases to draw their complex graphs and figures. Check your project's graphics requirements before migrating it to RAP.
Eclipse is continually working to recreate as much of the SWT functionalities as possible. The New and Noteworthy page of the RAP project provides updates.
RAP has some very specific particularities that strongly differentiate it from RCP. First of all, since RAP applications are exposed by a web server, multiple users can navigate concurrently on a single application. This is a fundamental difference from RCP applications, which are single-user. RAP provides this feature by borrowing the concept of sessions from traditional web applications, keeping all the state information about the application (widgets' statuses, user settings, and so on) inside users' sessions. RAP also offers some specific methods that allow you to deal with session data and register to session events. They are all reachable from the class org.eclipse.rwt.RWT, as shown in the following listing:
// extract the current session id
// store some user-specific data in his own session
// attach a session-listener to be notified whenever a session is destroyed.
// access the HttpServletRequest object