Introduzione
Dopo
il primo articolo introduttivo al mondo della Televisione
Digitale Terrestre[1] vediamo di approfondire come si
costruiscono le applicazioni interattive nello standard
MHP, le Xlet.
Una Xlet è una particolare applicazione Java
concepita per essere scaricata ed eseguita su decoder
interattivi nei quali un software specifico, l'Application
Manager, è in grado di controllarne il ciclo
di vita. Come vedremo le similitudini con le Applet,
dove l'application manager è rappresentato dal
browser sono molteplici.
Come
costruire una Xlet
Per
iniziare a costruire una Xlet occorre innanzitutto capire
cosa viene fornito da Sun nelle API Java TV[3]. Infatti
è proprio in queste librerie che vengono definite
le due interfacce fondamentali da utilizzare:
- javax.tv.xlet.Xlet
che definisce i seguenti metodi:
public
void initXlet(XletContext ctx);
public void startXlet();
public void pauseXlet();
public void destroyXlet(boolean unconditional);
- javax.tv.xlet.XletContext
che definisce i seguenti metodi:
public
void notifyDestroyed();
public void notifyPaused();
public java.lang.Object getXletProperty(java.lang.String
key);
public void resumeRequest();
Entrambe
le interfacce servono per interagire con l'application
manager in merito al ciclo di vita e al contesto in
cui la Xlet viene eseguita.
La classe principale di ogni Xlet deve sempre implementare
javax.tv.xlet.Xlet per poter essere eseguita sui decoder
interattivi MHP.
Il
ciclo di vita di una Xlet
Come
mostrato in Figura 1 il ciclo di vita di una Xlet è
caratterizzato da 4 stati:
- Loaded:
in questo stato la Xlet è stata creata ma non
inizializzata, se durante questa fase viene rilevata
un eccezione allora si passa direttamente nello stato
Destroyed. Da notare che la Xlet si può trovare
in questo stato solo una volta durante tutto il suo
ciclo di vita.
- Paused:
la Xlet è inizializzata e può trovarsi
in questo stato sia dopo che il metodo initXlet(XletContext)
è ritornato con successo dallo stato Loaded
oppure dopo che il metodo pauseXlet() è ritornato
con successo dallo stato Active. In entrambi i casi
in questo stato la Xlet dovrebbe limitare al massimo
l'utilizzo delle risorse condivise e soprattutto non
impegnare la GUI televisiva.
- Active:
in questo stato la Xlet è attiva e utilizza
le risorse necessarie per fornire i suoi servizi,
se dotata di GUI allora dovrebbe essere l'unica registrata
per ricevere gli eventi del telecomando.
- Destroyed:
in questo stato la Xlet deve rilasciare tutte le risorse
in uso per predisporsi alla terminazione.
Figura 1 - ciclo di vita di una Xlet
Una
sequenza tipica di questo ciclo potrebbe essere:
- L'
application manager crea una nuova istanza di una
Xlet chiamando il suo costruttore(stato LOADED).
- La
Xlet usa il context passatogli dall'application manager
nel metodo initXlet(XletContext) e si inizializza(stato
PAUSED).
- L'application
manager chiama il metodo startXlet() e la Xlet inizia
ad utilizzare le risorse necessarie per fornire i
servizi per cui è stata costruita(stato ACTIVE).
- L'application
manager chiama il metodo destroyXlet(true) e la Xlet
rilascia le risorse, dopodichè viene terminata(stato
DESTROYED).
Il primo esempio: HelloXlet.java
import
javax.tv.xlet.Xlet;
import javax.tv.xlet.XletContext;
import javax.tv.xlet.XletStateChangeException;
public
class HelloXlet implements Xlet{
// L'XletContext è un oggetto usato
dalla Xlet per accedere
// alle properties del suo environment e
per comunicare con
// l'application manager che glielo ha passato
nella fase
// di inizializzazione.
private XletContext context;
private
boolean alreadyActive = false;
//
Il costruttore tipicamente viene lasciato vuoto visto
che tutte le
// inizializzazioni dovrebbero stare nel
metodo initXlet()
public HelloXlet () {}
//
In questo metodo vengono fatte tutte le inizializzazioni,
// se in questa fase qualcosa fallisse verrebbe
lanciata un
// eccezione.
public void initXlet(XletContext context)
throws XletStateChangeException{
// si memorizza il context passato
dall'Application Manager
this.context = context;
System.out.println(this.getClass().getName()+"
: Inizializzazione avvenuta!");
}
// Con questo metodo la Xlet è avviata
e vengono richieste
// le risorse necessarie come ad esempio
lo schermo TV o
// gli eventi del telecomando
public void startXlet() throws XletStateChangeException{
// controlliamo se la Xlet era
già stata messa in stato Active
// precedentemente
if (alreadyActive) {
System.out.println(this.getClass().getName()+"
: Hello Again TV World! ");
}else {
System.out.println(this.getClass().getName()+"
: Hello TV World");
alreadyActive =
true;
}
}
//
Con questo metodo la Xlet viene messa in pausa e dovrebbe
// rilasciare tutte le risorse utilizzate
public void pauseXlet(){
System.out.println(this.getClass().getName()+"
: Xlet in pausa!");
//
notifichiamo al Context l'avvenuta pausa della Xlet
context.notifyPaused();
}
//
Con questo metodo la Xlet viene terminata, tramite il
// parametro boolean la Xlet ha la facoltà
di accettare
// tale richiesta; nel caso non accettasse
di
// terminare dovrebbe lanciare un eccezione.
public void destroyXlet(boolean unconditional)
throws XletStateChangeException {
if (unconditional) {
System.out.println(this.getClass().getName()+"
: la Xlet è stata terminata!");
}else {
System.out.println(this.getClass().getName()+
"
: la Xlet ha accettato di essere terminata!");
}
//
notifichiamo al Context l'avvenuta terminazione della
Xlet
context.notifyDestroyed();
}
}
Conclusioni
L'esempio
proposto e quelli che seguiranno come tutte le vostre
future Xlet possono essere eseguite su un ottimo software
open source, XletView[4], che vi permette di emulare
su PC un middleware MHP.
Nel
prossimo articolo approfondiremo maggiormente le potenzialità
delle Xlet, analizzando funzionalità più
complesse come la gestione della grafica interattiva,gli
eventi del telecomando e l'utilizzo del canale di ritorno.
Bibliografia
e risorse
[1] E. Brunelli - "Televisione Digitale Interattiva:
Lo standard MHP", Mokabyte, aprile 2004, http://www.mokabyte.it/2004/04/jtdi-1.htm
[2] Multimedia Home Platform - www.mhp.org
[3] Java TV - http://java.sun.com/products/javatv/
[4] XletView - http://sourceforge.net/projects/xletview/
Emanuele
Brunelli è laureato in Scienze dell'Informazione
all'Università di Bologna. Da circa 2 anni si
occupa della progettazione e dello sviluppo di applicazioni
Java per la Televisione Digitale Terrestre. Le sue conoscenze
comprendono Analisi e Design con UML oltre che progettazione
e sviluppo in ambiente Java.
|