Uno sguardo a quanto successo nell‘anno appena passato e ai possibili sviluppi per il 2014 per quanto riguarda la piattaforma Java e le tecnologie che le ruotano intorno. Alcune novità sembrano davvero interessanti.
L’evoluzione di Java
Anche se, come spiegato nell’editoriale del numero scorso, abbiamo tolto la parola “Java” dal payoff di MokaByte, chiaramente continuiamo a occuparci anche di Java, vista la storia di questa rivista e l’importanza che questo linguaggio riveste nell’ambito dello sviluppo di applicazioni affidabili e robuste specie per il mondo Enterprise.
In ottemperanza a quella discutibile tradizione che vuole nell’inizio dell’anno un momento in cui si riflette sull’anno precedente e si fanno buoni propositi per l’anno successivo, abbiamo voluto raccogliere in questo articolo una serie di considerazioni relative alla direzione che presumibilmente Java e le tecnologie che gli stanno intorno prenderanno in quest’anno, sulla base di considerazioni relative a quanto avvenuto da poco.
Sia chiaro che non stiamo qui a fare degli “oroscopi”, ci mancherebbe altro… ma ci interessa continuare quel tipo di riflessione che, in maniera molto più approfondita, era stata fatta già a partire dai primi mesi del 2012 nella serie di articoli intitolata “L’evoluzione di Java: verso Java 8” [1], nella quale si analizzava la storia del linguaggio di programmazione e della piattaforma Java, si illustravano le novità della versione 7, e si prospettavano i cambiamenti e le potenzialità da attendersi per la versione 8. Da quella serie, con opportuni aggiornamenti e numerosi approfondimenti, l’autore, il nostro Luca Vetti Tagliati, aveva tratto un manualetto “Verso Java 8. Appunti per lo sviluppatore in Java SE 7”, pubblicato in formato eBook e scaricabile dal nostro sito [2]. In questo articolo quindi, in modo rapido e schematico, tenteremo di riassumere quelle che ci sembrano le tematiche principali inerenti Java e dintorni che in questi e nei prossimi mesi dovrebbero risultare piuttosto “calde”.
Le aree tematiche
Gli aspetti che tratteremo possono essere a grandi linee fatti rientrare in cinque grandi tematiche:
- Java e la sua evoluzione in direzione della versione 8;
- i linguaggi alternativi;
- gli application server;
- la persistenza e i database;
- IoT: “the internet of things”.
Verso Java 8, finalmente?
Lo sviluppo e il rilascio delle nuove versioni di Java ha subìto, come noto, intoppi, ritardi e rinvii. Ciò è stato dovuto, prima ancora che a ragioni tecniche, al cambiamento organizzativo avvenuto in seguito all’entrata in campo di Oracle che ha un po’ stravolto il sistema per anni utilizzato da Sun Microsystem, con la fondamentale importanza data alla comunità degli sviluppatori, peraltro sempre molto propositiva e disponibile.
Nell’ultimo anno però, a poco a poco, il nuovo sistema organizzativo è andato abbastanza a regime ma questo non ha significato un intensificarsi dei rilasci di nuove versioni visto che la versione 8 di Java è stata più volte ritardata, sebbene sia adesso ufficialmente prevista per inizi marzo del 2014, quindi tra meno di tre mesi.
A onor del vero va anche detto che Oracle si è molto impegnata nel risolvere numerosi bug presenti in Java, con il suo programma di Critical Patch Update (CPU) volto alla rimozione delle numerose criticità ancora presenti [3], che si è concentrato inizialmente sulle applet. Nello scorso ottobre, poi, un aggiornamento piuttosto corposo ha interessato ben 51 vulnerabilità lato client, sebbene questo abbia comunque comportato qualche problema ad esempio al browser Firefox dove è adesso necessario esplicitamente autorizzare il plugin Java al funzionamento. Tutta questa attenzione al tema della sicurezza, anche con la scelta per alcuni discutibile di continuare a investire tempo e risorse sulle applet, ha causato lo slittamento di Java 8 al prossimo marzo, sperando a questo punto che non ci siano ulteriori ritardi.
Cosa ci sarà in Java 8
Come bene illustrato nell’eBook citato [2], una delle caratteristiche fondamentali di Java 8 saranno le cosiddette closures ossia le funzioni Lambda: non a caso, per poterla sviluppare al meglio, tale funzionalità è stata fatta slittare dalla release 7 a quella attesa per marzo 2014. La svolta in senso “funzionale” di Java è attesa con grande interesse e rappresenterà uno dei punti fondamentali del futuro sviluppo del linguaggio, visto che in effetti è un cambiamento significativo. Sarebbe però avventato aspettarsi una spinta molto forte in tal senso, poiche’, come messo in luce da Luca Vetti Tagliati prima nei suoi articoli e poi nell’eBook, ci sono dei limiti e dei vincoli insiti in Java, dovuti in particolar modo alla necessità della retrocompatibilità che resta uno dei pilastri del linguaggio di Oracle. Quindi non ci si deve aspettare una trasformazione di Java in Scala, ma è anche giusto attendersi che il Project Lambda rimanga al centro dei lavori e della successiva evoluzione del linguaggio.
Cosa non ci sarà in Java 8
Come ormai è noto, l’altro grosso elemento che dovrebbe “rivoluzionare” Java è rappresentato da Jigsaw, ossia il progetto di modularizzazione di Java. Nonostante ci si stia lavorando ormai da diversi anni, questa importante caratteristica è slittata prima dalla versione 7 alla 8 e poi alla 9. Ma non si tratta solo di ritardi, poiche’ quello che è accaduto nella seconda metà dell’anno appena concluso è stata una vera e propria “ripartenza” del progetto. Con una comunicazione stringata ma molto chiara [4] del capo architetto, si è ufficializzata la decisione di ripartire da capo con una nuova versione del sistema di modularizzazione di Java, con un nuovo prototipo che si distaccherà nettamente dal primo tentativo, nonostante una piccola parte del codice potrà anche essere riutilizzata: ma l’intenzione è di “ripulire” e semplificare un po’ tutto il progetto, rivedendo, laddove sia necessario, molte delle decisioni già assunte riguardo il design generale e le particolari implementazioni.
Se da un lato questa scelta drastica, che in sostanza butta via gran parte del lavoro fatto fin qui, sembra preannunciare ulteriori ritardi nell’inclusione di Jigsaw nella versione di Java che uscirà presumibilmente tra un paio di anni, dall’altro, invece, potrebbe paradossalmente rappresentare un fattore di velocizzazione, poiche’ non c’è peggior fattore di ritardo dell’accanirsi a fare cose nel modo sbagliato.
Staremo a vedere, e nel frattempo, sulla base di quanto avvenuto nel 2013, attendiamo con fiducia i primi di marzo e Java 8, visto che dovrebbero essere previste anche delle librerie JNI collegate staticamente [5] le quali potrebbero rappresentare la chiave di volta per risolvere alcuni problemi e aprire alla possibilità di avere JVM complete su dispositivi iOS.
Linguaggi “alternativi”
Nel titolo dell’articolo abbiamo volutamente usato la parola “intorno”, visto che non ci volevamo occupare esclusivamente di Java in senso stretto, ma anche di altri argomenti ad esso legati, seppur in modo più o meno stretto. Uno degli aspetti importanti da tener presenti è appunto quello dei linguaggi “alternativi” o “collaterali” a Java. Di sicuro, la “svolta” di Java con il progetto Lambda della versione 8 contribuirà a mantenere alto l’interesse intorno ai linguaggi funzionali, ma non solo. Dobbiamo comunque realisticamente pensare che si tratterà di tematiche importanti ma un po’ sottotraccia: anche la misura in cui Java 8 sarà adottato nel 2014 è tutta da valutare e non sarà certamente enorme.
Linguaggi per la JVM
Dopo la grande fortuna di Scala negli anni passati che l’ha portato a essere adottato da alcuni importanti realtà dei social media (Twitter e Linkedin) e dell’editoria (The Guardian), quest’anno ci sono state anche delle polemiche, peraltro molto garbate e sensate, innescate da Rod Johnson, l’inventore del framework Spring, che oramai ha abbracciato l’uso di Scala in maniera molto convinta [6]. In breve, a fronte del riconoscimento dell’eleganza e della potenza di Scala, Johnson ha però fatto presente che la comunità dei sostenitori di Scala ha troppe volte un atteggiamento “di superiorità” che può risultare arrogante, invitando tutti a un bagno di “pragmatismo”, come è avvenuto nel corso dell’evoluzione del linguaggio Java. La conclusione è che da qui a 5 anni, Scala avrà raggiunto un importante posto nell’ambito dei linguaggi più usati, ma non potrà sostituire Java o C++: dovrà mantenere le sue caratteristiche, ma dovrà anche confrontarsi con alcuni aspetti “istituzionali” ai quali deve far fronte ogni linguaggio maturo che si rispetti (maggiore organizzazione della comunità, rilasci regolari piuttosto che ricerca spasmodica di nuove funzioni e così via).
Nei mesi appena trascorsi, dopo un paio di anni di sperimentazione, si è affacciato definitivamente sulla scena il linguaggio Ceylon [7], alla sua versione 1.0, con la versione 1.1 prevista per la prima metà del 2014. Si tratta di un linguaggio imperativo, orientato agli oggetti, a tipizzazione statica, con ereditarietà singola grazie all’uso di interfacce. In teoria le similarità con Java sono tante, e il nome di una grande isola dell’Asia meridionale (produttrice di tè quando Giava produceva caffè) non è scelto a caso: va comunque detto che in Ceylon non è consentito l’overload degli operatori, sebbene sia consentito loro un comportamento polimorfico. Queste caratteristiche, unite al fatto che il progetto supportato da Red Hat è diretto da Gavin King, il “padre” di Hibernate, rende Ceylon un argomento da tenere d’occhio con attenzione, per valutare i suoi sviluppi nell’anno futuro, soprattutto in termini di miglioramento delle prestazioni e di iniziale adozione.
Rimanendo nell’ecosistema JVM, un’altra tecnologia da tenere d’occhio è Vert.x [8]. Si tratta di una piattaforma applicativa event-driven, sviluppata in seno alla Eclipse Foundation, concettualmente simile a quello che Node.js è per JavaScript, o Twisted è per Python: è quindi un application framework “poliglotta” nel senso che i componenti dell’applicazione possono essere scritti in Java, Groovy, Ruby, JavaScript o Python (presto anche in Clojure e Scala) ma poi girano grazie a Vert.x nella JVM. Si tratta di una alternativa concettuale ai classici servlet container: da molti Vert.x è considerata una delle tecnologie più promettenti dei prossimi mesi (siamo adesso alla versione stabile 2.0.2) specie per le ottime prestazioni in termini di leggerezza e scalabilità che sembra garantire, ma solo l’effettiva adozione di questa piattaforma applicativa nel prossimo anno ci dirà se davvero si tratta dell’ennesima promessa o di una realtà destinata a durare e a imporsi.
Application server: controversie e decisioni significative
Altro ambito in cui il 2013 non ha fatto mancare movimento è stato quello degli application server; JBoss e Glassfish hanno vissuto vicende alterne alcune delle quali anche un po’ inattese.
Cominciamo proprio da Glassfish, la cui versione supportata commercialmente da parte di Oracle (Oracle GlassFish Server) è stata ufficialmente dismessa lo scorso novembre.
“Oracle raccomanda che gli attuali clienti della versione commerciale di Oracle GlassFish Server comincino a pianificare il passaggio a Oracle WebLogic Server, che rappresenta un naturale percorso di migrazione in termini tecnici e di licenza” [9]. Decisione del resto logica, visto che avere due application server commerciali in una medesima azienda è un po’ un controsenso.
Nonostante da più parti, anche dall’interno di Oracle, ci si sia subito dopo affrettati a specificare che ciò che l’azienda avrebbe semplicemente interrotto il supporto commerciale all’application server Glassfish e che il progetto open source Glassfish sarebbe continuato, in molti anche tra i più esperti [10] hanno serenamente preso atto del fatto che Glassfish si avvia a una netta riduzione di importanza, anche se non necessariamente a una scomparsa definitiva.
Di questa situazione sembra avvantaggiarsi naturalmente JBoss che appare consolidarsi come prodotto principale in questa categoria aiutato in tal senso anche da una scelta piuttosto inattesa effettuata nel marzo 2013 da Red Hat a riguardo di JBoss: la decisione di rendere disponibili i binari della versione commerciale della loro Enterprise Application Platform a tutti gli sviluppatori all’interno della comunità, riducendo di fatto in maniera drastica le distanze tra la versione commerciale e quella sviluppata dalla comunità, che fin qui avevano avuto build separate [11]. Nelle parole dei responsabili, fatto salvo il supporto dato a chi acquista la licenza, il risultato è che tutti possono sperimentare il prodotto sia che abbiano tale contratto sia che non abbiano sottoscritto tale “abbonamento”.
Persistenza e database: l’affermazione del paradigma non relazionale
Non è sfuggito a nessuno, neanche ai meno attenti, che l’anno passato sia stato quello dell’affermazione del paradigma noSQL nel mondo dei database. L’avanzamento è avvenuto non solo e non tanto a livello tecnologico, per la maturità delle soluzioni, ma si è concretizzato più che altro nell’adozione da parte di numerose realtà aziendali, piccole e grandi, dei database noSQL. Del teorema di Brewer e del paradosso CAP (consistenza, disponibilità, tolleranza alle partizioni) si è discusso approfonditamente in una serie su queste pagine [12].
Ebbene, pur senza stare troppo ad approfondire, MongoDB e Cassandra sono ormai entrati stabilmente nelle prime 10 posizioni dei database più utilizzati [13], iniziando a insidiare il dominio incontrastato dei database relazionali.
Di fatto, nei prossimi anni, assisteremo a una progressiva sempre maggiore adozione di database noSQL da parte delle aziende, pur ricordandoci che, al momento attuale, il dominio di Oracle resta incontrastato: ma sarà l’aumento sempre costante dei contenuti generati dagli utenti a costringere all’adozione di queste soluzioni da parte di quelle realtà che necessiteranno di analizzare e gestire tali dati.
In ogni caso non ci dobbiamo attendere una sorta di battaglia esclusiva tra l’uno e l’altro paradigma dei DB, poiche’ ci sarà invece una coesistenza, spesso in ambienti eterogenei, di soluzioni basate sia sul paradigma noSQL che sul modello relazionale. E a proposito di relazionale, non va dimenticato che uno dei casi dell’anno è stato l’avvento di MariaDB, realizzato dal creatore stesso di MySQL [14], ed entrato stabilmente in casa Google per sostituire, almeno in parte, proprio MySQL, e in casa Red Hat, come database di default nella distribuzione enterprise [15].
The Internet of Things: è arrivato veramente il momento di IoT?
Per concludere, affrontiamo brevemente uno di quei temi ricorrenti, che come in ogni vero pronostico che si rispetti, sfuggono in realtà a una precisa previsione. Ormai da qualche anno il tema dell’Internet delle cose (IoT, “Internet of Things”) sembra essere pronto a esplodere, e di fatto, con la grande diffusione dei dispositivi mobile e la sempre maggiore pervasività di certi gadget elettronici, il momento sembra maturo.
Se pensiamo a Java nei suoi inizi, con l’insistenza sul collegamento ai dispositivi elettronici (vi ricordate Jini?) e la sua forse utopica pretesa di girare su tanti dispositivi in modo platform-independent proprio grazie alla sua leggerezza, si può affermare che l’idea IoT fosse già presente nelle primissime incarnazioni del linguaggio.
Ebbene, il tema IoT è stato centrale nel JavaOne del 2013 [16], in diversi interventi. Il fatto che i dispositivi di diversa tipologia (smartphone e tablet, gadget, sistemi embedded in automobili, elettrodomestici etc.) connessi tra di loro siano sempre di più e divengano sempre più potenti e più economici mette gli sviluppatori Java di fronte a numerose sfide, molte delle quali sono anche legate al tema della sicurezza. Occorre ragionare in prospettiva, perche’ da qui al 2020 l’Internet of Things sarà sempre più una realtà, considerato oltretutto che adesso si può già contare su una infrastruttura cloud relativamente matura, che consentirà da un lato l’archiviazione dei dati, e dall’altro la loro elaborazione in tempi veloci.
Su queste tematiche, sembra proprio che Oracle voglia investire e impegnarsi, anche in virtù delle collaborazioni con grossi attori del mercato hardware, che hanno tutto l’interesse a favorire l’affermazione di questo modello. Oracle infatti individua in Java un sorta di piattaforma unificatrice per Internet of Things, un “equipaggiamento” per standardizzare i molteplici aspetti di IoT: i dispositivi sono sempre più potenti e Java SE può girare su tutto questo hardware.
Conclusioni
Con questa carrellata riassuntiva degli eventi più significativi dell’anno appena trascorso e le tendenze ipotizzabili per l’anno nuovo, abbiamo voluto mettere in luce come anche per Java, e per ciò che gli gira intorno, sia in atto una sorta di “rinascenza” che potrà riservare alcuni scatti in avanti dopo un periodo di relativa calma. Staremo a vedere e continueremo a seguire l’evoluzione della situazione.
Riferimenti
[1] Luca Vetti Tagliati, “L’evoluzione di Java: verso Java 8” (tutta la serie in 8 parti)
https://www.mokabyte.it/cms/article.run?articleId=UYD-5F3-9MO-VGH_7f000001_5290188_f2bc5f1d
[2] Luca Vetti Tagliati, “Verso Java 8. Appunti per lo sviluppatore in Java SE 7”, ebook
https://www.mokabyte.it/cms/article.run?articleId=DDF-NV9-NAF-RK8_7f000001_26089272_667eb4ff
[3] Critical Patch Update per la rimozione delle numerose criticità
http://www.oracle.com/technetwork/topics/security/cpuoct2013-1899837.html#AppendixJAVA
[4] Mark Reinhold, “Jigsaw prototype, take 2”
http://mail.openjdk.java.net/pipermail/jigsaw-dev/2013-August/003328.html
[5] JEP 178: librerie JNI collegate staticamente
http://openjdk.java.net/jeps/178
[6] Rod Johnson, “Scala in 2018”, keynote del giugno 2013
http://parleys.com/play/51c1ffe7e4b0d38b54f46231/chapter67/about
[7] Il linguaggio Ceylon, sito ufficiale
[8] La piattaforma applicativa Vert.x, sito ufficiale
[9] John Clingan, “Java EE and GlassFish Server Roadmap Update”
https://blogs.oracle.com/theaquarium/entry/java_ee_and_glassfish_server
[10] Markus Eisele, “R.I.P. GlassFish – Thanks for all the fish”
[11] Mark Little, “EAP binaries available for all developers”
[12] Luca Vetti Tagliati, “ll teorema CAP… in Brewer – I parte: Il teorema CAP (Consistency, Availability, Partition tolerance)”, e articoli seguenti nella serie
https://www.mokabyte.it/cms/article.run?articleId=4FI-FRM-HJB-RTZ_7f000001_11885319_d2be079e
[13] DB Engines, la classifica dei database
http://db-engines.com/en/ranking
[14] MariaDB
[15] MariaDB diventa il database di default di Linux Red Had Enterprise edition
[16] Timothy Beneke – Tori Wieldt, “JavaOne 2013 Review: Java Takes on the Internet of Things
http://www.oracle.com/technetwork/articles/java/afterglow2013-2030343.html