alessandro.scotti@it.ibm.com luca.lazzaro@it.ibm.com
Nuovi modi di fare software DOBBIAMO COLLABORARE! E ADESSO COME FACCIO AD ACCONTENTARE TUTTI?!? SOLO UN PROCESSO AGILE MI PUO AIUTARE! VOGLIO WEB 2.0, AJAX, REST... DEVO ANDARE SUL NUOVO WEB... E IN FRETTA!
La formula WOA
Processi agili Processi di sviluppo agili
Collaborazione
Nuovi approcci allo sviluppo software Massima efficienza nello scrivere codice Disaccoppiamento tra le parti del sistema Riuso, assemblaggio rapido di componenti pronti Flessibilità e adattamento ai cambiamenti Collaborazione, comunità di utenti e sviluppatori Rational Team Concert
Project Zero
Cos è? Nuovo processo di sviluppo guidato dalla comunità (Community-Driven Commercial Development): Utenti coinvolti fin dall inizio Libero accesso a binari, sorgenti e documentazione Frequenti milestone e rilasci Disponibile ora anche in versione commerciale: WebSphere smash
Cos è? Project Zero si propone come una piattaforma agile per lo sviluppo e l esecuzione di applicazioni Web. Come? In una parola: semplificando.
Struttura di un applicazione Non c è un punto di ingresso predefinito Tutto il comportamento del sistema è modellato come insieme di eventi L applicazione si limita a gestire gli eventi a cui è interessata
Gestione di un evento Runtime Zero/WebSphere smash HTTP request requestbegin GET PUT POST... requestend HTTP response Handler Handler Handler Applicazione
Global context Gli event hander non hanno stato Tutti i dati e lo stato dell applicazione vengono memorizzati fuori da essa, in una struttura chiamata global context
Global context Il global context è formato da diverse zone Ogni zona ha una diversa visibilità e un diverso lifecycle Si possono aggiungere a piacere altre zone definite dall utente
Global context Zona Visibilità Lifecycle Config Application Tutte le richieste, tutti gli utenti Tutte le richieste, tutti gli utenti dell applicazione Caricamento da file Stesso lifecycle dell applicazione, non persistente User Request Tutte le richieste per un utente (simile a sessione HTTP) Tutti gli event handler che si trovano sul percorso di gestione di una singola richiesta Finché l utente è autenticato e in sessione Durata della singola richiesta
Struttura delle directory Convention over configuration Nella maggior parte dei casi non c è bisogno di configurare nulla, si ottiene il comportamento atteso semplicemente creando script e template al posto giusto, e rispettando le convenzioni sui nomi
Struttura delle directory app/resources REST app/scripts Codice di supporto app/views Presentazione public Home del sito web
Struttura delle directory app/resources/people.groovy http://.../resources/people http://.../resources/people/identifier
Struttura delle directory Le richieste HTTP sono automaticamente tradotte e reindirizzate alla corrispondente funzione HTTP URI Action Handler GET.../people List onlist() POST.../people Create oncreate() GET.../people/id Retrieve onretrieve() PUT.../people/id Update onupdate() DELETE.../people/id Delete ondelete()
Componenti e directory virtuali L applicazione dichiara di dipendere da componenti esterni (per es. Dojo) Le dipendenze vengono automaticamente risolte, i componenti scaricati e copiati localmente I componenti vengono automaticamente integrati e resi visibili anche nella struttura dell applicazione
Linguaggi supportati Java è il linguaggio di sistema Si possono scrivere applicazioni anche in Groovy e PHP Dojo è il toolkit JavaScript di riferimento per la parte che gira sul browser (ma non è obbligatorio)
Linguaggi supportati Linguaggio di script particolarmente adatto allo sviluppo di applicazioni Web Zero include un interprete PHP 5.2 scritto interamente in Java http://www.php.net/
Linguaggi supportati Linguaggio dinamico e agile per la piattaforma Java Facile da imparare per chi conosce Java Supporta i template http://groovy.codehaus.org/
Quale linguaggio???
Scegliere ed integrare linguaggi Il team va considerato nella scelta. Sfruttare al meglio gli skill è sempre un obiettivo primario!
Scegliere ed integrare linguaggi Performance Manutenibilità Dev tools Velocità di sviluppo
Scegliere ed integrare linguaggi Requisiti del cliente...
Java per il backend Usami dove il lavoro è più duro!
PHP per il frontend Ma io voglio fa l artista, che è sto codice!
Esempio per una Applicazione Facebook
Ed ora... azione!!!
Come usare un oggetto Java $date = new Java("java.util.Date", 70, 9, 4); var_dump($date->tostring()); $map = new Java("java.util.HashMap"); $map->put("when", $date); echo $map->get("when")->tostring()."\n"; $system = new JavaClass("java.lang.System"); echo "OS: ".$system->getproperty("os.name")."\n"; $math = new JavaClass("java.lang.Math"); echo "PI: ".$math->pi."\n";
Importare classi Java java_import("java.lang.integer", NULL, FALSE); $signature = new JavaSignature(JAVA_STRING); $value = new Integer($signature, "1234567890"); var_dump(integer::parseint($signature, "1234567890")); java_import("java.util.date"); $date = new Date(70, 9, 4);
Iterare su oggetti Java $list = new Java("java.util.ArrayList"); $list->add("hello World!"); $list->add(false); $list->add(1234567890); foreach ($list as $key => $value) { } echo $key." ".$value."\n";
Estendere classi <?php java_import("java.io.file"); class SuperFile extends File { function SuperFile($signature, $path) { parent:: construct($signature, $path); } function isthiscool() { return TRUE; // Way cool } }?>
Accesso a membri $date->time $date->gettime(), $date.time $buffer->length = 5; $buffer->setlength(5)
WOA in PHP e Java
Servizi REST con Zero e PHP <approot>/app/resources/employees.php <?php class Employees { function onlist() { [..] GET /resources/employees => Employees::onList() POST /resources/employees => Employees::onCreate() zput('/request/view', 'JSON'); zput('/request/json/output', $employeerecords); render_view(); } function oncreate() { }?>
Runtime Runtime
Runtime Due semplici passi per installare: unzip run
Runtime Ogni istanza di runtime supporta una singola applicazione: l applicazione gira in un processo dedicato
Runtime Basato su un core piccolo, veloce e portabile: gira su qualunque JVM J2SE 5.0+ 12 MB con Groovy altri 18 MB per PHP (con molte estensioni) include il supporto per HTTP avvio in 1 secondo
Grazie per aver partecipato!
Link
Riferimenti Rational Team Concert http://www.ibm.com/software/awdtools/rtc/ Rational Quality Manager http://www.ibm.com/software/awdtools/rqm/standard/ Project Zero e WebSphere smash http://www.projectzero.org/ http://www.ibm.com/software/webservers/smash/
Crediti e attribuzioni Internet Map Author: Matt Brit URL: http://commons.wikimedia.org/wiki/image:internet_map_1024.jpg License: http://creativecommons.org/licenses/by/2.5/ Ferrari Author: Rickydavid URL: http://www.flickr.com/photos/cuppini/1742120912/ License: http://creativecommons.org/licenses/by-nc-nd/2.0/deed.en_gb Vulcania Cone (France) Author: Slawojar URL: http://commons.wikimedia.org/wiki/image:vulcania_cone.jpg License: http://en.wikipedia.org/wiki/gnu_free_documentation_license
Crediti e attribuzioni Earth map Author: jimht at shaw dot ca, modified by Rodrigocd URL: http://commons.wikimedia.org/wiki/file:earthmap1000x500compac.jpg License: I, the copyright holder of this work, hereby release it into the public domain. This applies worldwide. An acrobat performing in the contortion act Author: StuSeeger URL: http://commons.wikimedia.org/wiki/file:an_acrobat_performing_in_the_contortion_act_of_cirque _du_soleil%27s_nouvelle_exp%c3%a9rience,_1994.jpg License: http://creativecommons.org/licenses/by/2.0/deed.en JavaScript: The Definitive Guide, 5th Edition Author: ZackyMa URL: http://www.flickr.com/photos/marchbox/159923040/ License: http://creativecommons.org/licenses/by-nc-sa/2.0/deed.en_gb
Crediti e attribuzioni php-logo-php-721782 Author: betacontinua URL: http://www.flickr.com/photos/betacontinua/2551029543/ License: http://creativecommons.org/licenses/by-nc-sa/2.0/deed.en_gb Database Author: Tim Morgan URL: http://www.flickr.com/photos/timothymorgan/75294154/ License: http://creativecommons.org/licenses/by/2.0/deed.en_gb JavaScript: IMG_3179 Author: zugaldia URL: http://www.flickr.com/photos/azugaldia/3805285759/ License: http://creativecommons.org/licenses/by/2.0/deed.en_gb
Crediti e attribuzioni Happy New Creative Year Author: pierofix URL: http://www.flickr.com/photos/pierofix/3175723715 License: http://creativecommons.org/licenses/by-nc-sa/2.0/deed.en_gb Sarah laboring... Author: colorblindpicaso URL: http://www.flickr.com/photos/colorblindpicaso/3399410617/ License: http://creativecommons.org/licenses/by-nc/2.0/deed.en_gb Men, Hard at Work Author: The Rocketeer URL: http://www.flickr.com/photos/kt/98235403/ License: http://creativecommons.org/licenses/by-nc-nd/2.0/deed.en_gb
Crediti e attribuzioni The old mainframe Author: Carrick URL: http://www.flickr.com/photos/carrick/61952845/ License: http://creativecommons.org/licenses/by-nc-sa/2.0/deed.en_gb Duke blocks Author: http://duke.kenai.com/ URL: http://duke.kenai.com/web/duke_blocks.gif License: BSD license Zine Study XIV: [language] Author: ShawnEcono URL: http://www.flickr.com/photos/shawnecono/149172094/ License: http://creativecommons.org/licenses/by-nc-sa/2.0/deed.en_gb
Crediti e attribuzioni Alfa Romeo Engine Author: File upload bot from Flickr URL: http://commons.wikimedia.org/wiki/image:alfa_romeo_engine.jpg_%28185131792%29.jpg License: http://creativecommons.org/licenses/by/2.0/ * Author: txkun URL: http://www.flickr.com/photos/txkun/3461370089/ License: http://creativecommons.org/licenses/by-nc-nd/2.0/deed.en_gb distinzione Author: luca.sartoni URL: http://www.flickr.com/photos/lucasartoni/2923869671/in/photostream License: http://creativecommons.org/licenses/by-sa/2.0/deed.en_gb
Crediti e attribuzioni Mac user Author: ntr23 URL: http://www.flickr.com/photos/ntr23/730371240/ License: http://creativecommons.org/licenses/by-nc-sa/2.0/deed.en_gb
Backup slides
Web Oriented Architecture
Idee e tecnologie chiave
Gestione di un evento Runtime Zero/WebSphere smash HTTP request Applicazione
Gestione di un evento Runtime Zero/WebSphere smash HTTP request requestbegin Handler Applicazione
Gestione di un evento Runtime Zero/WebSphere smash HTTP request GET/PUT/POST/DELETE Handler Applicazione
Gestione di un evento Runtime Zero/WebSphere smash HTTP request requestend Handler Applicazione
Gestione di un evento Runtime Zero/WebSphere smash HTTP request HTTP response Applicazione
Cos è? Project Zero è una finestra aperta sulle tecnologie, i processi di sviluppo, il codice e gli sviluppatori di WebSphere smash, ovvero la corrispondente versione commerciale. http://www.projectzero.org/ http://www.ibm.com/software/webservers/smash/
Come? Project Zero è basato su un architettura ad eventi e adotta lo stile REST anche nel proprio modello di programmazione. Ok... ma in pratica?!? Vediamo qualche esempio...
Linguaggi supportati Toolkit DHTML scritto in JavaScript Supporta tutti i browser più importanti Ampia libreria di widget e componenti http://dojotoolkit.org/