MokaByte Numero 15 - Gennaio 1998
Foto
 
Java JDK 1.2 in beta 
di
Giovanni Puliti
Analisi delle nuove caratteristiche del JDK in versione preliminare 



 


Dicembre 1997 Sun finalmente rilascia in beta la versione  1.2 del JDK.
In questo articolo andremo brevemente ad elencare le nuove feutures che sono state inserite in questa nuova versione, che dovrebbe essere rilasciata nella versione finale nel secondo quarto del 1998 (anche se ormai è stata rimandata dieverse volte, e non è possibile attualmente fare previsioni su una data precisa). La beta alla quale facciamo riferimento non implementa ancora tutte le caratteristiche che andremo ad elencare, ne al momento della stesura del presente articolo, ho avuto modo di eseguire controlli approfonditi,  per cui  eviterò di  sbilanciarmi in non comprovate valutazioni. Allo stato attuale è posibile scaricare dal sito Sun, sia la documentazione, sia il JDK che comprende sia le librerie sia i vari tool a cui siamo abituati.


Le varie feautures di questa nuova versione del JDK si suddividono in Core Platform e Standard Extensions.

Core Platform
Miglioramenti nella sicurezza: è stato introdotto il concetto di livello di permessi, e di politica di gestione delle operazioni. Ogni volta che una classe viene caricata dal class loader, gli viene affidato un livello di permesso in base alla corrente politica di sicurezza (in pratica un livello preimpostato di default).
In base a tale livello di permesso, tale classe ha un determinato livello di accesso ad ogni risorsa di sistema; per la precisione, finché  non viene specificato il livello di permessi per una certa risorsa, non è possibile nessuna eseguire nessuna operazione su tale risorsa.
Questi due nuovi concetti, politica di sicurezza e livelli di permessi,  permettono alle nuove applicazioni Java di  implementare una gestione della sicurezza a grana fine, configurabile  e flessibile per ogni tipo di situazione.
Oltre ai livelli di sicurezza, è previsto un totale supporto per i certificati elettronici, basati sulla firma elettronica.
Il set di tool per la certificazione comprende il #ikeytool (crea coppie di certificati secondo lo standard X.509v1 e gestisce le chiavi di accesso; chiavi e certificati servono per firmare elettronicamente applet o applicazioni), il #i jarsigner (firma archivi JAR, e verifica  le firme elettroniche degli stessi), ed il #ipolicytool (crea e modifica il file esterno di configurazione della politica di sicurezza).

Swing classes(in JFC)
Swing (MBXXXXX) è un nuovo set di componenti grafici iplementati secondo la 100% Pure Java Program (MBXXXX): tali classi grafiche si basano sul concetto di look and feel componibile (permette di costruire un set di componenti che automaticamente si adattano allo standard del look di ogni sistema opreativo), e su quello di componenti leggeri.  Per maggiori  approfondimenti in proposito si può fare riferimento al corso realizzato da Massimo Carli, iniziato su MBXXXXX.

Java 2D (in JFC)
Java 2D API è un set pe la gestione avanzata di grafica 2D e visualizzazione immagini.  Gestisce linee, archi testo ed immagini in un unico e coerente modello grafico. Sono disponibili alcuni strumenti per la gestione avanzata del colore (conversioni di spazio, gestione dell’alpha channel,  operatori display-oriented  per la gestione delle immagini).

Accessibility (in JFC)
Consiste di una serie di tecniche per migliorare la qualità delle interfacce grafiche per persone portatrici di handicap: si tratta di un meccanismo di comunicazione con le classi grafiche della AWT e della JFC, che permette in automatico di effettuare modifiche

Drag & Drop (in JFC)
E’ supportato finalmente il meccanismo di drag & drop, ma purtroppo a scapito della 100%Pure Java, essendo necessaria l’utilizzazione di metodi nativi, che impediscono di fatto l’indipendenza dalla piattaforma.

Application Services (in JFC)
Una serie di servizi utili per lo sviluppo di applicazioni: la #inavigazione da tastiera  permette la sostituzione della pressione di certe combinazioni di tasti per la gestione delle interfacce dotate di eventi mouse-driven. La presenza di una #icoda di eventi multhread permette una più semplice sincronizzazione degli eventi di sorgenti differenti.
É finalmente possibile implementare l’#iundo sugli eventi.
Il modello grafico degli oggetti a dominio limitato (#iBounded Range Model) permette di utilizzare strumenti come gli slider, progress bar, e scroll bar.
I #icursori customizzabili sono finalmente utilizzabili permettendo una maggiore varietà nell’interazione con l’utente.
L’utility #iDebug Graphics permette di monitorare un oggetto dell’interfaccia e controllare il suo ciclo di vita grafico controllando esattamente quando le varie operazioni di disegno vengono effettuate.
Il #irepaint in batch permette l’ottimizzazione del repaint delle varie zone dello schermo: permette ad esempio di definire una determinata zona come obsoleta, e, calcolando l’intersezione con tutte le regioni simili, di ridisegnare solo quello che serve (ad esempio evitando il redraw di una porzione di finestra che deve essere coperto da un altro componente grafico).
Estendendo il modello della gestione degl eventi per delega, è adesso possibile per un qualsiasi oggetto definire una serie di #itarget specificando quali azioni essi sono in grado di suppotare e/o gestire. Equivalentemente per un oggetto è possibile sapere quali sono i target che subiscono le sue azioni.

Extensions Framework
Le #iExtensions Framework permettono il download dinamico e l’installazione di #iestensioni sotto forma di archivi JAR. Una estensione è un gruppo di packages che implementano una particolare API che estende la Core Java Platform API. Le estensioni sono individuate dal formato #ijavax, e sono utilizzabili sia da applet che da applicazioni. Saranno rese disponibili estensioni sia da Sun, sia da JavaSoft, sia da terze parti.

Input Method Framework
Permette a tutti i campi testo di editing di ricevere input valori in formato giapponese, cinese e coreano per mezzo di metodi di input (per mezzo di tali metodi ad esempio l’utente può inserire migliaia di caratteri semplicemente premendo pochi tasti). I componenti possono utilizzare tale  API per supportare l’on-the-spot input style.

Version identification
Una applet o applicazione può identificare la versione del Java Runtime Environment, della VM, o di un class  package.

Potenziamento di  RMI
Il meccanismo di RMI è stato migliorato in modo da permettere a nuovi  servizi: il Remote Object Activation rende possibile il riferimento persistente ad un oggetto e la sua attivazione automatica per mezzo di tale riferimento;  con il  Custom Socket Types  è possibile specificare il socket type che il meccanismo RMI utilizzerà per chiamare un certo oggetto. Utilizzando tale meccanismo ad esempio è possibile utilizzare RMI su un sicuro mezzo di trasporto, come SSL.
Infine la Minor API Enhacements permette di impedire l’esportazione di un oggetto remoto, di ottenere  uno stub da un oggetto, di ottenere un oggetto locare a partire da uno stub, e di esportare un oggetto su una particolare porta.
 

Reference Objects
All’interno di una classe è possibile inserire un riferimento ad un oggetto in modo che esso possa essere manipolato in maniera simile ad un oggetto vero e proprio. Questo meccanismo è molto utile in quanto permette di mantenere un riferimento ad un oggetto senza impedire al garbage collector di eseguire un controllo sulla memoria da lui utilizzata. Permette anche al programma di essere informato quando un determinato riferimento è divenuto soggetto dell’interessamente del Garbage Collector. Tale meccanismo permette, tra le altre cose, di implementare meccanismi di cache sulle quali sono eseguite operazioni di flush solo quando la memoria è piena.

Miglioramenti del Sound System
Il  #iJava Sound sostituisce il precedente motore sonoro, che permette l’esecuzione di file in formato MIDI, oltre a tutti i formati attualmente diffusi come wav, aiff, au. È migliorata la qualità dela riproduzione del suono. Non sono state introdotte nuove API.

Java IDL
Di fatto, aprendo un canale di verso CORBA,  permette l’utilizzazione di tale tecnologia all’interno di applicazioni ed applet.
Questo nuovo supporto permette ad applicazioni distribuite Web-Enabled di invocare in maniera del tutto trasparente operazioni  a servizi remoti di rete, utilizzando lo standard OMG IDL o IIOP. I componenti a runtime possiedono un Java ORB per la computazione distribuita che utilizza la comunicazione IIOP. Il tool #iidltojava permette di creare clienti (stub), e server (skeleton) che possano essere utilizzati con un generico ORB  che sia CORBA compatibile.

Miglioramento delle performance
Attraverso tre strade si è ottenuto in sensibile miglioramento delle performance: #i supporto nativo per la gestione dei thread sul sistema operativo Solaris (permette di aumentare le performance utilizzando il supporto multiprocessore del sistema operativo di Sun, ed in particolare il sistema di skedulazione multiprocessore  dei vari thread)
compressione della memoria per le classi caricate (ad esempio le stringhe costanti ad esempio sono condivise fra classi diverse riducendo lo spazio allocato),
allocazione della memoria, garbage collecting più veloce, e gestione dei monitor (la gestione della memoria è stata molto velocizzata e le pause dovute al garbage collector sono diminuite grazie ad un meccanismo di thread local heap cache).
Le librerie native supportate all’interno del Core Java (es. AWT) sono state totalmente riscritte utilizzando il #iJava Native Interface (JNI): il codice risultante é più performante e non necessita di modifiche per essere eseguito su piattaforme differenti.
Infine  #icompilatori JIT sono stati finalmente inseriti nel JDK standard: il JIT per Solaris è disponibile con la Beta 2, mentre quello per Win32 sarà disponibile solo con la versione finale.

Miglioramenti per il supporto  JAR
E’ stato migliorato il tool da linea di comando per la creazione di file JAR inserendo il supporto per la firma elettronica, sia per creare che per aggiornare archivi. Sono state inserite nuove  API per la lettura/scrittura di file .jar. E’ stato associato ai file jar il meccanismo di definizione della politica di sicurezza di una applicazione.

Infine sono stati aggiunti miglioramenti  al supporto JNI, Reflection Java Virtual Machine Debugging, e JDBC, ma non si hanno molte notizie precise in merito.
 
 

Standard Extensions
Dopo aver visto la parte core di Java, resterebbe da analizzare la parte delle estensioni: purtroppo in questo caso le notizie sono ancora molto vaghe: sicuramente al momento della pubblicazione di questo articolo, saranno disponibili maggiorin informazioni, per cui rimando in seguito l’analisi di tali caratteristiche.
 
 

In conclusione
Anche se effettivamente è presto per poter azzardare giudizi o valutazioni, mi limiterò ad esprimere alcune considerazioni su quello che viene proposto (tralasciando che in genere fra il dire ed il fare, c’è di mezzo “ed il”):  sicuramente due sono  le feautures più importanti introdotte con questa nuova versione: la prima riguarda l’introduzione di una politica della sicurezza  variabile e funzione di precise impostazioni di sistema: grazie a meccanismi quali I  livelli di sicurezza, e della firma elettronica, è possibile finalmente dare un po’ più potere (nel caso si sia sicuri di quello che si stà facendo), alle applicazioni Java, e sopratutto alle applet. Anche se una applet spesso se ben progettata non necessita di grosse libertà d’azione (ad esempio utilizzando un ben congegnato sistema Client Server a 3 strati), in effetti in certi casi maggiore libertà d’azione permette di risolvere più velocemente certi problemi.
Anche se credo che inizialmente ci potranno essere alcuni errori di valutazione delle modalità di progettazione delle applicazioni, quando questo nuovo metodo di lavoro sarà assimilato nella maniera corretta,  sicuramente Java ne trarrà grossi benefici.
L’altra cosa che credo giocherà un grosso ruolo nel decretare il prossimo successo di Java, sarà la serie di modifiche che dovrebbero aumentare le prestazioni della VM e delle applicazioni in genere; personalmente non ho mai creduto che il fatto che Java fosse un linguaggio lento, potesse  influire più di tanto sul suo successo e diffusione. Questo per due motivi: il primo  concettuale e l’altro tecnologico.
Concettualmente credo che nessuno si rivolga verso Java se ricerca una tecnologia veloce monopiattaforma, per risolvere  probleami real time.  I vantaggi che invece il linguaggio e la tecnologia offrono sono ben altri e non devono essere messi in secondo piano da valutazioni sulle prestazioni o da confronti con tecnologie differenti.
Dal puto di vista tecnologico la modularità di Java non impedisce affatto, ma anzi incoraggia la continua evoluzione di quelle parti #I-lente che rallentano le prestazioni globali: non vi è nessuna limitazione alla realizzazione di garbage collectors sempre più efficienti o di compilazioni sempre più ottimizzate (concettualemte la compilazione di Java equivale al processo preelaborativo utilizzato da un compilatore C, per cui non è diversa o peggiore: l’introduzione di JIT, magari threadizzati o eseguiti in parallelo, super ottimizzati, potrebbe un giorno diminuire di molto il gap fra Java ed altri linguaggi).
A questo punto non mi resta che rimandar l’appuntamento a quando avremo in mano qualcosa di più solido fra le mani.
Intanto invito chi fosse interessato, a scrivermi per vedere di mettere su un piccolo gruppo di beta tester.
 
 
 
 


MokaByte Web  1998 - www.mokabyte.it

MokaByte ricerca nuovi collaboratori. 
Chi volesse mettersi in contatto con noi può farlo scrivendo a mokainfo@mokabyte.it