Introduzione alla specifica del portlet, parte 1

Con l'emergere di un numero crescente di portali aziendali, vari fornitori hanno creato diverse API per i componenti del portale, chiamati portlet. Questa varietà di interfacce incompatibili genera problemi per i fornitori di applicazioni, i clienti del portale e i fornitori del server del portale. Per superare questi problemi, è stato avviato JSR (Java Specification Request) 168, la specifica portlet, per fornire l'interoperabilità tra portlet e portali.

JSR 168 definisce i portlet come componenti Web basati su Java, gestiti da un contenitore di portlet, che elaborano le richieste e generano contenuto dinamico. I portali utilizzano i portlet come componenti di interfaccia utente collegabili che forniscono un livello di presentazione ai sistemi di informazione.

Gli obiettivi di JSR 168 sono i seguenti:

  • Definire l'ambiente di runtime, o il contenitore del portlet, per i portlet
  • Definire l'API tra il contenitore del portlet e i portlet
  • Fornire meccanismi per archiviare dati temporanei e persistenti per i portlet
  • Fornire un meccanismo che consente ai portlet di includere servlet e JSP (JavaServer Pages)
  • Definire un pacchetto di portlet per consentire una facile distribuzione
  • Consenti la portabilità del portlet binario tra i portali JSR 168
  • Eseguire i portlet JSR 168 come portlet remoti utilizzando il protocollo WSRP (Web Services for Remote Portlets)

Il settore IT ha ampiamente accettato JSR 168. Tutte le principali società nello spazio del portale fanno parte del gruppo di esperti JSR 168: Apache, ATG, BEA, Boeing, Borland, Broadvision, Citrix, EDS, Fujitsu, Hitachi, IBM, Novell, Oracle , SAP, SAS Institute, Sun Microsystems, Sybase, TIBCO e Vignette. La lista dei sostenitori ufficiali è ancora più lunga.

Attualmente, JSR 168 è in revisione pubblica e la versione finale è prevista per settembre 2003.

In questo articolo, definiamo prima portali e portlet, quindi spieghiamo i concetti introdotti da JSR 168, inclusi gli oggetti di base dell'API. Successivamente, ci immergiamo nelle funzioni più avanzate di JSR, come le informazioni sull'utente, la localizzazione e la memorizzazione nella cache. Copriamo quindi i punti di estensione che consentono ai fornitori del portale di estendere la funzionalità attualmente definita nella specifica del portlet. L'articolo si conclude con la descrizione del pacchetto e della distribuzione dell'applicazione portlet.

Leggi l'intera serie sulle specifiche del portlet:

  • Parte 1: bagnati i piedi con i termini e i concetti sottostanti alle specifiche
  • Parte 2: l'implementazione di riferimento dell'API del portlet ne rivela i segreti

Definizioni di base

In questa sezione vengono illustrate le definizioni di base utilizzate nella specifica del portlet, inclusa l'architettura di base di un portale, il contenitore del portlet e una pagina del portale.

Portale

Un portale è un'applicazione basata sul Web che fornisce personalizzazione, single sign-on e aggregazione di contenuti da diverse fonti e ospita il livello di presentazione dei sistemi informativi. L'aggregazione è il processo di integrazione dei contenuti da diverse fonti all'interno di una pagina Web. Un portale può avere funzionalità di personalizzazione sofisticate per fornire contenuti personalizzati agli utenti. Le pagine del portale possono avere diversi set di portlet che creano contenuto per diversi utenti.

La figura 1 illustra l'architettura di base di un portale. L'applicazione Web del portale elabora la richiesta del client, richiama i portlet sulla pagina corrente dell'utente e quindi chiama il contenitore del portlet per recuperare il contenuto di ogni portlet. Il contenitore portlet fornisce l'ambiente di runtime per i portlet e chiama i portlet tramite l'API del portlet. Il contenitore del portlet viene richiamato dal portale tramite l'API Portlet Invoker; il contenitore recupera le informazioni sul portale utilizzando Portlet Provider SPI (Service Provider Interface).

Pagina

La Figura 2 illustra i componenti di base della pagina del portale. La pagina del portale stessa rappresenta un documento di markup completo e aggrega diverse finestre portlet. Oltre ai portlet, la pagina può essere costituita anche da aree di navigazione e banner. Una finestra del portlet è costituita da una barra del titolo con il titolo, le decorazioni e il contenuto prodotto dal portlet. Le decorazioni possono includere pulsanti per modificare lo stato e la modalità della finestra del portlet (spiegheremo questi concetti in seguito).

Portlet

Come accennato in precedenza, un portlet è un componente Web basato su Java che elabora le richieste e genera contenuto dinamico. Il contenuto generato da un portlet è chiamato frammento, una parte di markup (ad esempio, HTML, XHTML o WML (Wireless Markup Language)) che aderisce a determinate regole. Un frammento può essere aggregato con altri frammenti per formare un documento completo, come mostrato nella Figura 3. Il contenuto di un portlet normalmente si aggrega con il contenuto di altri portlet per formare la pagina del portale. Un contenitore di portlet gestisce il ciclo di vita di un portlet.

I client Web interagiscono con i portlet tramite un paradigma di richiesta / risposta implementato dal portale. Di solito, gli utenti interagiscono con il contenuto prodotto dai portlet, ad esempio seguendo i collegamenti o inviando moduli, con il risultato che le azioni del portlet vengono ricevute dal portale, che quindi inoltrano ai portlet presi di mira dalle interazioni dell'utente.

Il contenuto generato da un portlet può variare da un utente all'altro a seconda della configurazione utente del portlet.

Contenitore portlet

Un contenitore di portlet esegue i portlet e fornisce loro l'ambiente di runtime richiesto. Un contenitore di portlet contiene i portlet e ne gestisce i cicli di vita. Fornisce inoltre meccanismi di archiviazione persistenti per le preferenze del portlet. Un contenitore portlet riceve richieste dal portale per eseguire richieste sui portlet ospitati da esso. Un contenitore di portlet non è responsabile dell'aggregazione del contenuto prodotto dai portlet; il portale stesso gestisce l'aggregazione.

Un portale e un contenitore portlet possono essere creati insieme come un singolo componente di una suite di applicazioni o come due componenti separati di un'applicazione del portale.

Concetti

Questa sezione spiega i concetti di programmazione di base in JSR 168, come il ciclo di vita di un portlet, l'interfaccia, le modalità e gli stati della finestra, nonché l'accesso alla sessione, l'accesso alla memoria persistente e come includere servlet e pagine JSP.

Ciclo di vita del portlet

Il ciclo di vita di un portlet di base di un portlet JSR 168 è:

  • Init: inizializza il portlet e mette in servizio il portlet
  • Gestisci le richieste: elabora diversi tipi di richieste di azione e rendering
  • Distruggi: mette il portlet fuori servizio

Il contenitore del portlet gestisce il ciclo di vita del portlet e chiama i metodi corrispondenti sull'interfaccia del portlet.

Interfaccia portlet

Ogni portlet deve implementare l'interfaccia del portlet o estendere una classe che implementa l'interfaccia del portlet. L'interfaccia del portlet è costituita dai seguenti metodi:

  • init(PortletConfig config):per inizializzare il portlet. Questo metodo viene chiamato solo una volta dopo aver creato un'istanza del portlet. Questo metodo può essere utilizzato per creare oggetti / risorse costosi utilizzati dal portlet.
  • processAction(ActionRequest request, ActionResponse response):per notificare al portlet che l'utente ha attivato un'azione su questo portlet. Viene attivata solo un'azione per richiesta del client. In un'azione, un portlet può eseguire un reindirizzamento, modificare la modalità del portlet o lo stato della finestra, modificare il proprio stato persistente o impostare i parametri di rendering.
  • render(RenderRequest request, RenderResponse response):per generare il markup. Per ogni portlet sulla pagina corrente, viene chiamato il metodo di rendering e il portlet può produrre markup che può dipendere dalla modalità del portlet o dallo stato della finestra, dai parametri di rendering, dagli attributi della richiesta, dallo stato persistente, dai dati di sessione o dai dati di backend.
  • destroy():per indicare al portlet la fine del ciclo di vita. Questo metodo consente al portlet di liberare risorse e aggiornare i dati persistenti che appartengono a questo portlet.

Modalità portlet

Una modalità portlet indica la funzione eseguita da un portlet. Di solito, i portlet eseguono attività diverse e creano contenuto diverso a seconda delle funzioni che svolgono attualmente. Una modalità portlet avvisa il portlet quale attività deve eseguire e quale contenuto deve generare. Quando si richiama un portlet, il contenitore del portlet fornisce la modalità portlet corrente al portlet. I portlet possono modificare a livello di programmazione la loro modalità durante l'elaborazione di una richiesta di azione.

JSR 168 suddivide le modalità portlet in tre categorie:

  1. Modalità richieste: ogni portale deve supportare le modalità Modifica, Guida e Visualizza. Un portlet deve supportare almeno la modalità di visualizzazione utilizzata per eseguire il rendering del markup per una pagina. La modalità Modifica viene utilizzata per modificare le impostazioni per utente per personalizzare il markup del portlet e la modalità Guida viene utilizzata per visualizzare una schermata della guida.
  2. Modalità personalizzate opzionali: sono le modalità che un portale può supportare; mentre in una modalità facoltativa, un portlet potrebbe non essere chiamato. Le modalità opzionali includono la modalità Informazioni per visualizzare un messaggio "informazioni su"; la modalità Config per consentire agli amministratori di configurare il portlet; Modalità Edit_defaults per consentire a un amministratore di preimpostare i valori della modalità Modifica; la modalità Anteprima per mostrare l'anteprima del portlet; e la modalità Stampa per eseguire il rendering di una vista che può essere stampata facilmente.
  3. Modalità specifiche del fornitore del portale: queste modalità non sono definite nella specifica e sono quindi specifiche del fornitore.

Stati della finestra

Lo stato di una finestra indica la quantità di spazio della pagina del portale che verrà assegnata al contenuto generato da un portlet. Quando si richiama un portlet, il contenitore del portlet fornisce lo stato corrente della finestra al portlet. Il portlet può utilizzare lo stato della finestra per decidere la quantità di informazioni da visualizzare. I portlet possono modificare a livello di programmazione lo stato della finestra durante l'elaborazione di una richiesta di azione.

JSR 168 definisce i seguenti stati della finestra:

  • Normale: indica che un portlet può condividere la pagina con altri portlet. Questo è lo stato della finestra predefinito.
  • Ingrandito: indica che un portlet può essere l'unico portlet sulla pagina del portale o che il portlet dispone di più spazio rispetto ad altri portlet nella pagina del portale e può quindi produrre un contenuto più ricco rispetto al normale stato della finestra.
  • Ridotto a icona: indica che il portlet deve eseguire solo il rendering dell'output minimo o nessun output.

Oltre a questi stati della finestra, JSR 168 consente al portale di definire gli stati della finestra specifici del fornitore.

Un portlet può essere chiamato in uno qualsiasi di questi tre stati della finestra, ma è libero di produrre lo stesso markup per tutti e tre gli stati.

Negozio persistente

Il portlet può memorizzare dati persistenti per un utente specifico utilizzando l' PortletPreferencesoggetto. Le preferenze possono essere lette e scritte nella fase di azione e lette nella fase di rendering. La modalità preferita per scrivere le preferenze è la modalità Modifica, che fornisce all'utente una schermata di personalizzazione. Le preferenze possono essere stringhe o valori di array di stringhe associati a una chiave di tipo stringa. Le preferenze possono essere preimpostate con valori predefiniti nel descrittore di distribuzione.

Le preferenze e la definizione del portlet nel descrittore di distribuzione definiscono insieme un portlet, a volte chiamato entità portlet.

Sessioni

Il concetto di sessione di JSR 168 è basato su quello HttpSessiondefinito per le applicazioni Web. Poiché le applicazioni portlet sono applicazioni Web, utilizzano la stessa sessione dei servlet. Per consentire ai portlet di memorizzare dati temporanei privati ​​in un portlet, l'ambito della sessione predefinito è l' ambito del portlet . In questo ambito, il portlet può memorizzare le informazioni necessarie tra le richieste utente e specifiche per un'entità portlet. Gli attributi memorizzati con questo ambito sono prefissati nella sessione dal contenitore del portlet per evitare che due portlet (o due entità della stessa definizione di portlet) sovrascrivano le impostazioni l'uno dell'altro.

Oltre all'ambito della sessione del portlet, JSR 168 supporta l' ambito della sessione dell'applicazione Web . In questo ambito, ogni componente dell'applicazione Web può accedere alle informazioni. Le informazioni possono essere utilizzate per condividere lo stato transitorio tra diversi componenti della stessa applicazione Web (ad esempio, tra portlet o tra un portlet e un servlet).

Compresi servlet / pagine JSP

Per supportare il pattern Model-View-Controller, il portlet deve essere in grado di includere contenuto generato da servlet e pagine JSP. In questo modo, il portlet può agire come controller, riempire un bean di dati e includere una pagina JSP per eseguire il rendering dell'output.

In JSR 168, il meccanismo di inclusione per servlet e pagine JSP è lo stesso per l'API servlet. Tramite il contesto del portlet, un dispatcher di richieste viene recuperato per un determinato percorso; il include()metodo viene quindi chiamato su questo oggetto request-dispatcher:

PortletRequestDispatcher rd = getPortletContext (). GetRequestDispatcher (editJSP); rd.include (portletRequest, portletResponse);

Allineamento con WSRP

WSRP aggrega il contenuto prodotto da portlet in esecuzione su macchine remote che utilizzano diversi ambienti di programmazione, come J2EE (Java 2 Platform, Enterprise Edition) e .Net. I servizi WSRP sono servizi Web orientati alla presentazione e rivolti all'utente che si collegano e giocano con portali o altre applicazioni. Consentono alle aziende di fornire contenuti o applicazioni senza richiedere alcun adattamento manuale del contenuto o specifico dell'applicazione tramite l'utilizzo di portali; portali possono facilmente aggregare servizi WSRP senza sforzi di programmazione.

Il gruppo di esperti JSR 168 ha allineato attentamente i concetti tra JSR 168 e WSRP. Il seguente elenco riassume quanto i concetti principali sono stati allineati tra entrambi gli standard: