MokaByte Numero 11 - Settembre 1997
  
BeanBox
 
di
Daniela Ruggeri
Lo studio dei beans presenti nel pacchetto BDK fornito da JavaSoft è di grande utilità nella comprensione dei JavaBeans

 



Abbiamo voluto con questo articolo tenere in considerazione anche chi si avvicina per la prima volta ai JavaBeans. Riteniamo molto utile lo studio dei beans demo forniti da JavaSoft al fine della comprensione dei costituenti fondamentali di questa tecnologia

Introduzione.

Oltre alle API java.beans presenti nel JDK 1.1., JavaSoft ha messo a disposizione del programmatore Java un pacchetto, il Beans Development Kit attualmente alla versione 1.0. (BDK 1.0.). Questo pacchetto contiene oltre alle API java.beans un set di esempi funzionanti di JavaBeans in formato jar e un tool scritto in java (BeanBox) che permette di testare i javabeans e connetterli insieme.

I JavaBeans presenti nel pacchetto sono stati costruiti in modo da far capire le varie funzionalità presenti nel pacchetto java.beans. Essi sono:

Nei prossimi paragrafi spiecheremo più dettagliatamente ognuno di essi.
 

Il JavaBean BeanBox.
 Quando si lancia il file run.com presente nella directory \bdk\beanbox, che permette di lanciare l'applicazione BeanBox, appaiono le finestre presenti in figura 1.
 


Figura 1.

 

Il BeanBox costituisce un tool di sviluppo dove testare i JavaBeans.
La finestra più grande (BeanBox) rappresenta l'ambiente dove accadono le azioni. E qui che vengono testati i JavaBeans. Questa finestra è anche fornito di un menù:

  1. File. Che permette di gestire i file contenenti i beans. In particolare dal suo sottomenù (Save..., Load..., Loadjar...,Clear, Close, Exit) è possibile salvare un'istanza di bean in un file serializzato, caricare un'istanza di bean da un file serializzato o caricare un file jar, pulire la finestra da ogni bean, chiudere o uscire.
  2. Edit. Che con il suo sottomenù (Cut, Copy, Paste, Report..., Events) permette di gestire oltre alle normali operazioni di taglia e incolla e stampa, anche la connessione di eventi di un bean al richiamo di metodi di un altro bean, il richiamo di customizer (Customizer...) e la connessione a proprietà bound (Bind property...) che permette di impostare una prorpietà di un bean (bean ricevente) con la proprietà cambiata di un altro bean (bean sorgente).
  3. View. Che con il suo sottomenù (Disable/Enable Disegne Mode, Hide/Show Invisible Beans) permette di disabilitare o abilitare il disegno GUI, e permette di rendere effettivamente invisibili o no i bean che sono invisibili al momento del run (esempio: il bean che gestisce un timer TickTock).
Poi c'è la finestra degli strumenti (ToolBar) che contiene tutti i javabeans caricati automaticamente al momento dell'avvio dell'applicazione. È possibile prelevare un'istanza di un javabean e posizionarla nella finestra principale con un'operazione di drug and drop con il mouse. Notiamo che alcuni JavaBean possiedono anche un'icona propria.

L'ultima finestra (PropertySheet) è quella delle proprietà, e permette di vedere e cambiare il valore delle proprietà associate al JavaBean che si sta testando. Poiché il BeanBox stesso è un JavaBean, ed è l'unico nella figura ad essere presente e ad essere selezionato, possiamo notare le sue proprietà ossia foreground, background, font e name.

 

I JavaBeans Button.

 Il BDK contiene 3 JavaBeans bottoni:

Tutti questi bottoni possiedono proprietà di tipo Bound che significa che altre entità (classi o javabeans) possono essere avvisati (se opportunamente iscritti alla lista propertyChangeListener) se si verifica un cambiamento del valore di una proprietà.


Figura 2.

 

Il JavaBean Juggler.

Si tratta di un JavaBean consistente in un'animazione che inizia il movimento o lo finisce rispettivamente con i metodi start() e stop().
Questo JavaBean è usato per testare la propagazione dell'evento ActionEvent.
Infatti se si hanno dei componenti bean che non producono alcun effetto visivo del loro lavoro, è possibili connetterli allo start() del Juggler quando lavorano correttamente, per renderlo così evidente ai nostri occhi.
Nella figura 3. ci sono 2 bottoni, uno associato allo start() del Juggler e uno associato allo stop(). Premendo quindi il primo bottone si dà il via all'animazione e premendo il secondo la si ferma. In questo modo si rende evidente ai nostri occhi il corretto funzionamento dell'evento ActionEvent scaturito dai 2 bottoni.


Figura 3.

 

L'esempio è stato realizzato connettendo gli eventi actionPerformed dei due bottoni rispettivamente ai metodi startJuggling e stopJuggling del bean Juggler.

 

Il JavaBean TickTock

Questo bean è importante perché dimostra che un JavaBean può anche fare a meno di un'iterfaccia GUI, cioè può anche essere totalmente invisibile.
Naturalmente poiché la completa invisibilità al momento dello sviluppo risulterebbe estremamente inefficace, in questa fase il javabean è visibile mediante una box con il suo nome, come mostrato nella figura 4.
Il JavaBean TickTock non è altro che un timer, cioè un orologio che scandisce impulsi.
Come un orologio a cristalli liquidi in un ciruito elettronico, si può usare questo Javabean per sincronizzare eventi di qualsiasi natura. Per esempio si può utilizzare per far apparire una piccola label tipo baloon sui bottoni di una barra di strumenti, quando il mouse passa su di essi (evento MOUSE_MOVE); questo bean servirebbe in tal caso a far apparire la label non subito ma dopo un certo numero di secondi.Questo esempio combina due proprietà (intervallo e secondi), l'evento focalizzato e un thread. Notare nella figura 5 nella finestra delle proprietà, appare solo la proprietà intervallo (interval), questo perché il BeanBox permette solo di vedere le proprietà aggiornabili e non quelle di sola lettura come i secondi.
 


Figura 4.

 

 

Il JavaBean ChangeReporter
Questo JavaBean serve a visualizzare i valori delle proprietà appartenenti ad altri bean quando si verifica un cambiamento delle stesse.Il ChangeReporter è un'estensione della classe TextField, e per questo visualizza la proprietà in un campo TextField.Nella figura 5. possiamo notare un ChangeReporter che visualizza il valore della proprietà secondi (second) del JavaBean TickTock, proprietà di sola lettura.
 


Figura 5.

 

La cosa si realizza connettendo l'evento PropertyChange del bean TickTock al metodo reportChange del bean ChangeReporter,

 

Il JavaBean JellyBean
Questo Javabean (Figura 6.) ha un speciale tipo di proprietà cioè la proprietà condizionata (priceInCents). Il suo unico scopo è quello di dimostrare questo tipo di proprietà.
Il suo utilizzo è spiegato più avanti.
 


Figura 6.

 

 

Il JavaBean Voter
Questo JavaBean dimostra come proprietà condizionate dette anche con divieto (vetoable) possano essere prevenute dai cambiamenti.Il JavaBean Voter ha una proprietà VetoAll di tipo logico (Yes o No) mediante la quale è possibile controllare i cambiamenti di altre proprietà condizionate.
Per esempio nella figura 7. è mostrato come il tentativo di cambiare il valore della proprietà priceInCents dal valore predefinito 2 al valore 4 venga impedito dal bean Voter con proprietà VetoAll impostata a True al quale JellyBean è connesso. Se si cambia la proprietà VetoAll da true a false, i cambiamenti della proprietà priceInCents non vengono più impediti
 


Figura 7.

 

Questo si realizza connettendo l'evento vetoableChange del bean JellyBean all'esecuzione del metodo vetoableChange del bean Vetor.Il JavaBean Voter ha una proprietà VetoA11 di tipo logico (Yes o No) mediante la quale è possibile controllare i cambiamenti di altre proprietà condizionate. Per esempio nella figura 7. è mostrato come un JavaBean Voter con la proprietà impostata a vero possa impedire i cambiamenti della proprietà priceInCents del JavaBean JellyBean al quale è connesso.

 

Il JavaBean Molecule
Questo JavaBean visualizza una rappresentazione 3-D di una molecola. Si può ruotare la molecola cliccando e trascinando il mouse.Si può ruotare la molecola anche connettendo 2 Bottoni ai metodi rotateX e rotateY del JavaBean. Molecule ha il proprio MoleculeNameEditor come PropertyEditor per la proprietà "moleculeName". Questo PropertyEditor fa scegliere tra 6 differenti semplici molecole da visualizzare nell'area del JavaBean. Le descrizioni delle molecole sono lette da files descrittivi (file con estensioni xyz) che il bean carica come suoi files risorse inizialmente e ogni volta che si cambia molecola con il PropertyEditor.

In figura 8. è mostrato il JavaBean
 


Figura 8.

 

 

Il JavaBean EventMonitor
Questo Bean serve per catturare ogni evento intercettato da un JavaBean.
È in pratica una sorta di monitor di tutti gli eventi che riguardano i JavaBean interessati, e può risultare un ottimo strumento per lo sviluppo e il debug. Per usare EventMonitor bean bisogna
1.connettere un evento dal bean sorgente al metodo initiateEventSourceMonitoring di EventMonitor.
2.provocare il verificarsi dell'evento del bean (per esempio se il bean è un bottone cliccandovi sopra si provoca l'evento MOUSE_CLICK). Non appena il primo evento viene ricevuto dall'EventMonitor, questo si dirige verso il bean sorgente, lo analizza, scopre tutti i diferenti tipi di eventi e per ognuno di essi crea e registra un event listener.
Il risultato è mostrato in figura 9.
 


Figura 9.

 

In questo esempio il bean EventMonitor appena ricevuto l'evento actionPerformed di un bean OurButton e l'evento propertyChange di un bean TickTock si registra a tutte le liste ascoltatrici che interessano i beans (nella figura per ogni lista viene visualizzata la dicitura "Listening to:" seguita dalle informazioni sulla stessa). Dopo di che EventMonitor intercetta tutti gli eventi che interessano i bean non appena si verificano (nella figura per ogni evento intercettato viene visualizzata la dicitura numero"Source:" con numero = progressivo evento, seguita dalle informazioni sull'evento).

 

 

Il JavaBean TransitionalBean

Questo JavaBean è un esempio di bean che non fa uso di nessun metodo del JDK 1.1. (e nessun metodo del package java.beans) e che quindi può tranquillamente essere stato sviluppato in un ambiente puro java 1.0.2.
 

 

Il JavaBean BridgeTester.

 Il BridgeTester è un bean di test che supporta una gran quantità di tipi di proprietà.


Figura 10.

 

Il JavaBean JDBC SELECT.

Questo bean si connette ad uno specifico database attraverso un JDBC URL , esegue un’istruzione SQL SELECT e visualizza il risultato in una tabella a video. Bisogna avere un accesso JDBC ad un database SQL (come Oracle or Microsoft SQL Server) per usare questo bean.
Poiché il bean JDBC SELECT è piuttosto complesso da configurare, esso è accompagnato da un proprio customizer che aiuta a configurarlo.
Dopo aver trascinato il bean nella apposita finestra del BeanBox si possono impostare direttamente le proprietà che permettono di far funzionare il bean. Se invece si ritiene opportuno utilizzare il customizer di aiuto, selezionare il menù Edit/Customize....
A questo punto appare una finestra che richiede l'URL del database, il nome di un login e la password. Dopo di che si può usare il customizer per vedere le tabelle del database (selezionare "User tables" o "All Tables").
Il customizer allora mostra le varie colonne della tabella scelta in modo che sia possibile scegliere quelle che verranno visualizzate nel bean. Dopo aver scelto le colonne, il bean viene aggiornato con il contenuto di queste colonne corrispondente all'opportuna istruzione SQL SELECT.
In figura 11 è mostrato un esempio del bean. Un bottone OurButton è stato connesso attraverso l’evento actionPerformed al metodo Update del bean JDBC SELECT.
Cliccando sul bottone si fa partire la select impostata tra le proprietà. Il risultato della query è mostrato nella finestra del bean.
 


Figura 11.

 

 

Il JavaBean SorterBean.

Il SorterBean è un’applet serializzata che può girare come un bean . Essa è creata dal programma java SorterBeanWriter.java. Cliccando sul bean si fa partire il sort. E’ possibile impostare 3 tipi di algoritmo di sort nella proprietà algorithm :BubbleSort, Qsort e BidirBubbleSort. Il bean è mostrato in figura 12.
 


Figura 12.

 

 

Il JavaBean QuoteMonitor.

Questo bean usa Java Remote Method Invocation (RMI) per contattare un server quote remoto e visualizzare i valori di un reale o immaginario magazzino.
Per effettuare una prova locale posizionarsi sotto la directory bdk\demo e se il sistema operativo è Windows digitare il comando "start nmake -f quote.mk run", se invece è Unix digitare "gnumake -f quote.mk run &".
 
 
 

Conclusione.
Riassumiamo ciò che in particolare lo studio di questi beans permette di imparare:

  1. Personalizzazione. Analizzando i beans (ExplicitButton, EventMonitor, JellyBean, Juggler, ecc.) che hanno un programma descrittivo associato di nome <nome bean>BeanInfo.java, i beans che hanno un proprio customizer (OurButton, JDBC SELECT) e i beans con un propertyEditor (Molecule).
  2. Serializzazione. Analizzando il programma associato al bean OurButton (OurButtonWriter) che permette di ottenere un'istanza serializzata del bean.
  3. Gestione Proprietà. Analizzando proprietà semplici, bound (OurButton, ExplicitButton, ecc.) e con condizione (JellyBean).
  4. Gestione Eventi. Imparando a connettere i bean tra di loro (Evento riguardante un bean sorgente connesso al metodo di un altro bean, equivale a dire che il secondo bean si è registrato alla lista ascoltatrice del bean sorgente), si prende dimestichezza con la nuova gestione di eventi a delega.
  5. Introspezione. Analizzando il tool BeanBox, che permette di visualizzare eventi, metodi, proprietà e varie altre caratteristiche dei beans.
  6. Altro. Non dimentichiamo che ci sono anche due bean che trattano rispettivamente JDBC (JDBC SELECT) e RMI (QuoteMonitor) che anche se non sono caratteristiche dei beans, permettono di sperimentare queste due teconologie nella logica a componenti software scritti una volta e riutilizzabili ovunque.
Ritengo quindi di consigliare lo studio di questi beans soprattutto a chi si avvicina per la prima volta a questo argomento, al fine di far comprendere l'importanza di questa tecnologia che è ancora in fase sperimentale ma che si suppone avrà un notevole sviluppo, specialmente con la realizzazione con i prossimi due modelli di specifiche Glasgow (che permetterà un avvicinamento del mondo COM al mondo JavaBeans, e permetterà una più facile creazione e gestione dei beans) e Edinburgh (di cui non si sa ancora molto ma che sembra che migliorerà ancora l'interfaccia utente attraverso l'utilizzo di tecnologie di Composite GUI, e migliorerà il meccanismo di persistenza).
   
 

MokaByte rivista web su Java

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