MokaByte
Numero 15 - Gennaio 1998
|
|||
|
|
||
Giovanni Puliti |
|
||
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 ricerca
nuovi collaboratori.
|
||
|