L'applicazione Web Asta è basata su diversi componenti, illustrati nel seguente diagramma. Questo documento non è un'esercitazione per la creazione dell'intera applicazione, ma evidenzia i punti principali dello sviluppo e della progettazione mediante gli strumenti forniti con il workbench, in modo da poter applicare le conoscenze acquisite alle proprie applicazioni Web.
EJB (Enterprise JavaBeans) offre un modo comodo per consentire alle applicazioni Java di accedere ai dati contenuti nei database relazionali. I bean entità possono essere sviluppati mediante BMP (Bean-Managed Persistence) o CMP (Container-Managed Persistence). CMP offre maggiore flessibilità rispetto a BMP perché il contenitore EJB effettua le chiamate specifiche del database, indirizzate dal bean. Per impostazione predefinita, gli strumenti presenti nel workbench Rational generano bean entità mediante CMP. Il bean entità CMP non contiene accesso al codice SQL. Ciò consente di distribuire il bean su altri server J2EE che utilizzano database differenti, senza dover riscrivere il codice.
Esistono diversi approcci per associare oggetti ai database relazionali, ad esempio il metodo dall'alto verso il basso, dal basso verso l'alto e quello centrale. Con un approccio dall'alto verso il basso si parte dagli oggetti esistenti, si definiscono livelli sempre più dettagliati e si progetta il database come passo finale. Con l'approccio dal basso verso l'alto viene utilizzato uno schema di database esistente e vengono quindi progettati i livelli dipendenti, che definiscono gli oggetti. Con l'approccio centrale vengono utilizzati un database esistente e oggetti esistenti, quindi vengono sviluppati i livelli intermedi per associare gli oggetti alle tabelle di database corrispondenti.
Nell'applicazione Asta è stato utilizzato un approccio dal basso verso l'alto per sviluppare gli EJB entità. Il database Derby esisteva inizialmente e conteneva tabelle che corrispondevano esattamente agli EJB necessari. Una volta creata una connessione utilizzando la procedura guidata Connessione al database, è stata utilizzata la procedura guidata Associazione EJB a RDB per creare EJB da associare da una o più tabelle, con alcune eccezioni. Nella seguente figura sono illustrati gli EJB entità utilizzati nell'applicazione Asta, e le relazioni che li collegano.
Ai bean entità nell'applicazione Asta non si accede direttamente dal client remoto. Tutte le richieste e le risposte vengono gestite dalle facade di sessione e i bean vengono utilizzati per accedere ai dati di back-end. Ciò consente l'accesso condiviso dal lato server per la memoria dati persistente. Nella sezione successiva vengono discusse le facade in maniera più approfondita.
Per ulteriori informazioni sull'associazione dei bean entità, consultare l'argomento della guida Generazione di un'associazione dal basso verso l'alto.
La facade di sessione è l'interfaccia tra il cliente e il back-end che fornisce la comunicazione ai componenti SDO (Service Data Object) e, in definitiva, al database. Una facade di sessione è utile quando il client invia le richieste per cui sono necessari numerosi oggetti da eseguire. L'invio delle singole richieste agli oggetti può determinare un aumento del traffico e della latenza di rete. La facade di sessione funge da buffer tra i due punti finali, acquisendo una richiesta generale dal client e inviando quindi richieste specifiche agli oggetti necessari. Ciò riduce il traffico e semplifica lo sviluppo del client.
Raggruppando gli EJB e utilizzando due diverse facade, è possibile aumentare le prestazioni dell'applicazione perché gli utenti accedono solo agli EJB necessari. I bean entità che controllano la funzione del sito Web stesso, ad esempio Categoria, sono controllati dalla facade di sistema.
Gli EJB a cui fa riferimento una facade vengono scelti contemporaneamente, utilizzando la procedura guidata Crea facade bean di sessione, come mostrato nel seguente diagramma. Se necessario, un riferimento a un EJB può essere presente in più facade. Nell'applicazione Asta, ciò non è stato fatto.
È possibile aggiungere ulteriori funzioni aggiungendo metodi alle facade. Ad esempio, nella facade utente, esiste un metodo che restituisce un elenco di utenti e un altro metodo che restituisce un elenco di utenti attivi. Utilizzando questi metodi come esempio, è possibile aggiungere alla facade utente un altro metodo che restituisce un elenco di tutti gli utenti contrassegnati come non attivi.
Ulteriori informazioni sulle facade di sessione possono essere reperite nel documento "Design Patterns: Session Facade" al seguente indirizzo http://java.sun.com./.
La vista Navigazione dello strumento Web Site Designer fornisce una rappresentazione visiva del layout del sito. Mostra le singole pagine e la relativa organizzazione gerarchica ed è utile per gestire il layout e l'organizzazione delle pagine all'interno del sito. Quando si trascinano e si rilasciano le pagine nell'editor, i controlli della navigazione nei modelli di pagina vengono aggiornati automaticamente. Ad esempio, con la struttura di navigazione di Asta mostrata nel seguente diagramma, è possibile modificare l'ordine delle schede di navigazione spostando la pagina Sell prima della pagina Sfoglia. Web Site Designer genera automaticamente le schede nell'ordine corretto su tutte le pagine. Per rendere visibili le modifiche nell'applicazione in esecuzione, salvare nuovamente ogni pagina che utilizza il modello di navigazione.
Oltre alla vista Navigazione appena descritta, Web Site Designer fornisce una vista Dettagli che organizza ulteriori elementi della pagina in una comoda tabella modificabile, come mostrato nella figura successiva. In tal modo viene facilitato l'aggiornamento delle proprietà della pagina, quali titolo, autore ed etichette di navigazione.
Per ulteriori informazioni sull'utilizzo di Web Site Designer per gestire il layout del sito Web, far riferimento all'argomento Creazione della struttura del sito nella guida in linea.
Il workbench viene fornito con un programma di progettazione visiva per lo sviluppo di modelli di pagina, oltre alle pagine stesse.
I modelli di pagina sono porzioni riutilizzabili di codice con cui viene assegnato aspetto e comportamento comuni a più sezioni di un sito Web. Per condividere l'aspetto e la funzionalità, le pagine Web devono semplicemente fare riferimento ai modelli. L'utilizzo di modelli è vantaggioso sia per l'utente, che può navigare nel sito Web con facilità, sia per lo sviluppatore, che deve semplicemente scrivere un codice specifico per un tipo particolare di pagina.
I modelli di pagina, inoltre, consentono una più facile manutenzione del contenuto del sito Web. Le modifiche effettuate al file del modello vengono riflesse automaticamente in ogni pagina che ad esso fa riferimento. Ad esempio, nell'applicazione Web Asta, il modello maintemplate.jtpl fornisce il layout generale delle pagine Asta. Gli elementi di una pagina Web possono essere aggiunti al modello utilizzando la tavolozza in Page Designer, che consente di trascinare e rilasciare elementi sulla pagina Web. Il codice HTML viene generato automaticamente. Il modello Asta in tal modo può essere modificato con facilità, ad esempio per includere data e ora nel piè di pagina.
Inserendo una scheda che richiama il modello invece che la codifica della navigazione, è possibile includere la stessa barra di navigazione in tutte le pagine del sito. L'editor di associazione modelli inserisce in una pagina Web i riferimenti al modello.
I modelli dinamici migliorano ulteriormente questa tecnologia, ad esempio alterando il contenuto della pagina Web basato su ruoli o funzionalità degli utenti, o inserendo specifiche informazioni per gli utenti in una pagina Web. L'esempio Asta utilizza modelli dinamici per fornire collegamenti amministrativi nella barra di navigazione solo per gli utenti che hanno accesso in qualità di amministratori, e per modificare il pulsante da "Accesso" a "Uscita" dopo che l'utente ha effettuato l'accesso regolarmente.
Per ulteriori informazioni sulla creazione di modelli di pagina Web, far riferimento all'argomento della guida Creazione di un modello pagina.
JSF (JavaServer Faces) è una tecnologia che facilita la creazione di interfacce utente per applicazioni Web dinamiche che vengono eseguite su un server di applicazioni. JSF è uno linguaggio standard aperto e utilizza una libreria tag standard JavaServer Faces. Le tag vengono inserite nel codice HTML per creare pagine Web dinamiche.
La struttura JSF gestisce gli stati dell'interfaccia utente in base alle richieste del server e offre un modello di sviluppo semplice per utilizzare eventi dal lato server attivati dal client. Ad esempio, un JSF può avere un comportamento specifico per differenti eventi, ad esempio il clic su un pulsante. Page Designer comprende funzioni integrate, visualizzate nella tavolozza, che è possibile trascinare e rilasciare nella pagina Web. Queste funzioni a trascinamento e rilascio facilitano notevolmente l'utilizzo di JSF, HTML e altri elementi di script. Ciò si rivela particolarmente utile non solo per controllare le funzioni di base di un campo, ad esempio il tipo di valore di un campo di testo (numero intero, carattere alfanumerico), ma anche per impostare regole di convalida. In Page Designer, i controlli JSF possono essere vincolati ai dati SDO associati a ciascuna pagina.
La tavolozza di Page Designer può essere utilizzata per aggiungere ulteriori funzioni alle pagine JSF. Ad esempio, un pulsante "Compra adesso" può essere aggiunto alla pagina di dettagli di un articolo per consentire all'utente di comprare l'articolo al valore impostato dal venditore.
La seguente figura mostra i controlli JSF per la pagina di dettagli di Asta. Il campo inputText per una nuova offerta viene limitato in modo che accetti solo numeri interi con la casella di verifica Solo numeri interi, come mostrato nell'angolo inferiore destro della figura. Il campo inputText prevede ulteriori impostazioni per Convalida, Comportamento e Accessibilità, come definito nelle schede al di sotto di h:inputText nella parte inferiore sinistra della figura. Nella scheda Convalida vengono definite regole di convalida specifiche utilizzando Java. Ad esempio, un input valido per il campo inputText per una nuova offerta è un numero intero diverso da zero, maggiore dell'offerta iniziale e maggiore dell'offerta attuale più uno.
Il seguente codice è stato generato per il campo inputText newbid nella pagina itemdetails dell'applicazione Asta.
<h:inputText styleClass="inputText" id="newbid" required="true" size="14"> <f:convertNumber integerOnly="true" /> <f:validateLongRange minimum="#{pc_Itemdetail.userFacadeLocalGetFindHighestBidResultBean==null ? pc_Itemdetail.userFacadeLocalGetBidItemSDOByKeyResultBean.startingbid : pc_Itemdetail.userFacadeLocalGetFindHighestBidResultBean.currentbid+1}"> </f:validateLongRange> </h:inputText>
Per ulteriori informazioni sullo sviluppo di file JSP, fare riferimento all'argomento della guida relativo a JavaServer Faces.
Il servizio Web è stato sviluppato in parallelo con l'applicazione Web poiché non dipende dall'applicazione Web: il servizio Web rappresenta un altro mezzo per accedere alla logica commerciale, e non include tutte le funzionalità dell'applicazione Web. Per una descrizione più approfondita di questa parte dell'applicazione Asta, consultare la sezione relativa al servizio Web.