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.

 

 

Manifest-Version: 1.0
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