Introduzione a RAP
RAP (Rich Ajax Platform) è un framework che vi permette di sviluppare una applicazione RCP e renderla disponibile in rete semplicemente indirizzando il browser su un dato link.
In questo articolo vedremo come potete sviluppare una applicazione RCP e lanciarla sia come applicazione desktop che come applicazione web . Sì, certo, esattamente lo stesso codice sorgente!
Non ci credete? Provate voi stessi.
Setup dell’IDE per RAP
Il modo piĂ¹ veloce per lavorare con RAP è quello di scaricare la versione Eclipse for RCP and RAP Developers dalla pagina http://www.eclipse.org/downloads
Alternativamente potete aggiungere RAP a qualsiasi altra Eclipse Indigo SR2 (ovvero la versione 3.7.2), semplicemente selezionando Help -> Install New Software… -> scegliere l’update sitd di Indigo e installare Rich Ajax Platform (RAP) Tooling 1.4.2 sotto la categoria Web, XML, Java EE and OSGi Enterprise Development.
Ora dobbiamo effettuare il setup di una RAP target plaftorm. Quindi lanciamo Eclipse e selezioniamo Window -> Preferences -> Plug-in Development -> Target Platform
e premiamo il bottone Add… e poi Next
Diamo un nome alla platform, ad es. RAP_1.4 e premiamo Add… nel primo tab (Locations)
poi selezioniamo Software Site
e poi Next. Quindi aggiungiamo l’Update site RAP 1.4 Runtime
http://download.eclipse.org/rt/rap/1.4/runtime
deselezioniamo il radio button Include required software e premiamo Finish.
questa operazione potrebbe richiedere un po’ di tempo. Al termine questo è quello che dovreste vedere
premere Finish.
Quindi seguiamo la stessa procedura aggiungendo, dall’update site di Indigo http://download.eclipse.org/releases/indigo, la feature EMF RAP Target Components dalla Category EclipseRT Target Platform Components. Dovreste ora vedere quanto segue
La cosa importante da tenere presente qui è che ora avete due target platform: quella RCP e quella RAP. Selezionate quella RAP per questo workspace e premete OK.
Ora lanciate un’altra istanza Eclipse e scegliete un nuovo workspace, che sarĂ usato per lo sviluppo RCP.
Sta diventando chiaro quello che stiamo facendo? Vogliamo avere due differenti workspace, uno per eseguire il lancio RCP (=Desktop) e l’altro per eseguire il lancio RAP (=Web). Ma anche il progetto deve essere diverso? Niente affatto: stessi identici sorgenti!
Dopo aver lanciato Eclipse con il workspace RCP seguiamo uno degli wizard per creare una applicazione RCP: File -> New -> Plug-in Project, diamo un nome al plug-in (es. it.rcpvision.rcprap.application) e selezioniamo Yes alla domanda “Do you want to create a Rich Client Application?“. Poi scegliamo il secondo template “RCP application with a view” e premiamo Finish. Ora lanciamo l’applicazione; vedrete questo
Fin qui niente di nuovo, una cosa che probabilmente fate quasi quotidianamente.
Ora faremo un piccolo cambiamento nelle Dependencies di questo plug-in. Selezioniamo la dependenza da org.eclipse.ui per renderla Opzionale.
Andiamo quindi al tab MANIFEST.MF e aggiungiamo una dipendenza da org.eclipse.rap.ui e rendiamo anch’essa Opzionale.
Se eseguiamo di nuovo l’applicazione otterremo, naturalmente, lo stesso risultato. Abbiamo semplicemente introdotto una doppia dipendenza, alternativa, verso RCP e RAP. A seconda della platform verrĂ sfruttata l’una o l’altra, dallo stesso medesimo codice sorgente.
Ora torniamo all’altra istanza di Eclipse, quella che punta al workspace configurato per RAP, e importiamo lo stesso progetto dal file system.
Poi selezioniamo Run -> Run Configurations… -> RAP Application -> New
Nel primo tab (Main) premiamo il bottone Browse per il campo Entry Point or Application
e selezioniamo la nostra applicazione
Nel secondo folder (Bundles) premiamo Deselect All e aggiungiamo la nostra applicazione (it.rcpvision.rcprap.application) e i seguenti plug-in
com.ibm.icu.base javax.servlet org.eclipse.core.commands org.eclipse.core.contenttype org.eclipse.core.databinding org.eclipse.core.databinding.beans org.eclipse.core.databinding.observable org.eclipse.core.databinding.property org.eclipse.core.expressions org.eclipse.core.jobs org.eclipse.core.runtime org.eclipse.equinox.app org.eclipse.equinox.common org.eclipse.equinox.http.jetty org.eclipse.equinox.http.registry org.eclipse.equinox.http.servlet org.eclipse.equinox.http.servletbridge org.eclipse.equinox.preferences org.eclipse.equinox.registry org.eclipse.equinox.servletbridge org.eclipse.equinox.servletbridge.extensionbundle org.eclipse.help org.eclipse.jdt.junit.runtime org.eclipse.osgi org.eclipse.osgi.services org.eclipse.rap.jface org.eclipse.rap.jface.databinding org.eclipse.rap.junit org.eclipse.rap.junit.runtime org.eclipse.rap.rwt org.eclipse.rap.rwt.q07 org.eclipse.rap.rwt.theme.classic org.eclipse.rap.ui org.eclipse.rap.ui.cheatsheets org.eclipse.rap.ui.forms org.eclipse.rap.ui.views org.eclipse.rap.ui.workbench org.junit org.mortbay.jetty.server org.mortbay.jetty.util
Nota: se non avete intenzione di aggiungerli uno ad uno, potete persistere il lancio (tab Common -> Save as -> Shared file) e poi aprire il lancio stesso come testo e cambiare la seguente linea
con il seguente contenuto
<stringAttribute key=”target_bundles” value=”com.ibm.icu.base@default:default,javax.servlet@default:default,org.eclipse.core.commands@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.core.databinding.beans@default:default,org.eclipse.core.databinding.observable@default:default,org.eclipse.core.databinding.property@default:default,org.eclipse.core.databinding@default:default,org.eclipse.core.expressions@default:default,org.eclipse.core.jobs@default:default,org.eclipse.core.runtime@default:true,org.eclipse.equinox.app@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.http.jetty@default:default,org.eclipse.equinox.http.registry@default:default,org.eclipse.equinox.http.servlet@default:default,org.eclipse.equinox.http.servletbridge@default:default,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.equinox.servletbridge.extensionbundle@default:false,org.eclipse.equinox.servletbridge@default:default,org.eclipse.help@default:default,org.eclipse.jdt.junit.runtime@default:default,org.eclipse.osgi.services@default:default,org.eclipse.osgi@-1:true,org.eclipse.rap.jface.databinding@default:default,org.eclipse.rap.jface@default:default,org.eclipse.rap.junit.runtime@default:default,org.eclipse.rap.junit@default:default,org.eclipse.rap.rwt.q07@default:false,org.eclipse.rap.rwt.theme.classic@default:default,org.eclipse.rap.rwt@default:default,org.eclipse.rap.ui.cheatsheets@default:default,org.eclipse.rap.ui.forms@default:default,org.eclipse.rap.ui.views@default:default,org.eclipse.rap.ui.workbench@default:default,org.eclipse.rap.ui@default:default,org.junit@default:default,org.mortbay.jetty.server@default:default,org.mortbay.jetty.util@default:default”/>
Ok, siamo pronti a partire: eseguite il lancio e dovreste vedere il browser interno aprire la vostra applicazione come applicazione Web!
Potete copiare lo stesso URL su vostro browser preferito dallo stesso pc, ma ovviamente anche da un’altro pc sulla stessa rete, semplicemente sostituendo l’IP (127.0.0.1) con quello che identifica il vostro pc sulla rete.
Buon divertimento con RAP a tutti!
Riconoscimenti
Grazie al Team di RAP e a Hendy Irawan per questo suo prezioso articolo
http://eclipsedriven.blogspot.it/2010/12/eclipse-rap-single-sourcing-awesomeness.html, che ha ispirato la creazione di questo tutorial.
Bundle-ManifestVersion: 2
Bundle-Name: Application
Bundle-SymbolicName: it.rcpvision.rcprap.application; singleton:=true
Bundle-Version: 1.0.0.qualifier
Bundle-Activator: it.rcpvision.rcprap.application.Activator
Require-Bundle: org.eclipse.ui;resolution:=optional,
org.eclipse.rap.ui;resolution:=optional,
org.eclipse.core.runtime
Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: JavaSE-1.6

AFAIK the Entrypoint is not required that you can re-use your application definition.
Works great! ;-)
Thanks for the great information.
The article was very useful, thank you.
Regarding the workspaces:
Is it possible do have RAP & RCP in just one workspace?
AHoi,
Claus
Claus,
yes, you can switch between two (or more) Target Platforms (RAP & RCP) while staying in the same workspace.
Vincenzo