Ho lavorato per circa 6 anni prima sulla piattaforma Divine 4 e successivamente su Fatwire 7.

Qualche tempo fa ho letto con piacere che questa piattaforma di Web Content Management, a mio avviso valida e versatile, è stata comprata da Oracle.
Con la speranza quindi che Fatwire non resti un prodotto enterprise di nicchia così come l’ho conosciuto io lavorando qui a Milano, vorrei fare una panoramica della piattaforma mettendo a disposizione un pò di quella che è la mia esperienza sul tema.

Fatwire è un Web Content Manager (WCM) con una forte connotazione Enterprise. Si presenta come una grossa applicazione web scritta in Java e questo la rende versatile e utilizzabile su svariate piattaforme, application server e database.
Il nucleo centrale del WCM è il ContentServer, la servlet principale che svolge il ruolo di controller e dispatcher degli eventi che avvengono all’interno del portale. Parliamo principalmente di indirizzamenti a pagine specifiche del nostro portale in seguito alla navigazione al suo interno.
Il meccanismo di lookup e redirect delle pagine avviene mediante due tabelle fondamentali del repository che sono la SiteCatalog e la ElementCatalog.
La SiteCatalog è una tabella di lookup a tutti gli effetti e contiene infatti l’informazione sulla pagina da chiamare e altri dati a contorno come ad esempio il tipo di caching che vogliamo utilizzare e gli eventuali parametri che la pagina può gestire. Il dato fondamentale è che la SiteCatalog punta ad un elemento della ElementCatalog che contiene invece tutte le informazioni legate al template di pagina ed alla sua visualizzazione.
La scrittura dei template di pagina all’interno del portale può avvenire in due modalità: XML e JSP. In entrambi i casi, le librerie Core del Content Server offrono un’ampia gamma di TAG Library utilizzabili a piacere per sfruttare al massimo le capacità del prodotto.
All’interno dei template di pagina verranno visualizzati i contenuti seguendo le regole più diverse. Quello che ci occorre sapere è che all’interno del nostro repository la tabella AssetRelationTree contiene tutto quello che è necessario per rintracciare un contenuto e le sue relazioni con altre schede collegate.
Ovviamente il mio scopo non è quello di descrivere in dettaglio le tabelle del repository, quindi mi fermerò qui. Questa rapida digressione e le tre tabelle alle quali abbiamo accennato rappresentano gli elementi fondamentali della componente di front end del nostro sito/portale.

Come ogni prodotto di content management ovviamente abbiamo anche un’interfaccia di redazione, accessibile attraverso delle credenziali, che mi permette di inserire e modificare i contenuti, la struttura e tante altre caratteristiche del nostro portale. Anche questa componente di back end è pilotata dal dispatcher principale che è la nostra servlet ContentServer.
I punti di forza dell’ambiente redazionale di Fatwire sono senza dubbio molteplici ma ne voglio elencare alcuni che ritengo essere i principali:

  • Versioning dei contenuti. Nell’ottica di una redazione numerosa e magari distribuita, abbiamo la possibilità di attivare meccanismi di versionamento, locking e check-out dei contenuti in modo da garantire la massima produttività con il lavoro di ciascun redattore evitando modifiche contmporanee con la relativa perdita di tempo che ne deriverebbe per ritornare ad una versione consistente.
  • Gestione di workflow di contenuto. Per ciascun Asset Type (vedi sotto) ovvero contenuto gestibile dalla redazione, abbiamo la possibilità di configurare uno specifico workflow che va dalla creazione alla sua definitiva pubblicazione, passando per correzioni e revisioni attraverso ruoli o utenti specifici della nostra redazione.
  • Separazione tra ambiente di staging redazionale e ambiente live di pubblicazione. In sostanza ho la possibilità di scrivere i miei contenuti e tenerli all’interno dell’ambiente redazionale fin tanto che non si decida di pubblicarli effettivamente e renderli visibile agli utenti finali. A differenza di altri prodotti con una funzionalità del genere, Fatwire gestisce i due ambienti in modalità completamente separata, quindi a patto di avere due licenze d’uso possiamo avere due installazioni completamente separate e legate tra loro proprio dal processo di pubblicazione che viene configurato una sola volta in fase di installazione.
  • InSite editor. Questo editor visuale permette di modificare i contenuti direttamente dalla pagina di preview utilizzando la tipica “icona matita” che ci trasporta dalla visualizzazione alla modifica del contenuto con un semplice click.

Il termine Content Server identifica, in senso più ampio, l’intera gamma dei componenti Core del prodotto che permettono in prima istanza di inserire, caricare e modificare i contenuti quindi la parte CRUD della nostra piattaforma.
In particolare, distinguiamo due blocchi fondamentali:

  • Il CS Direct, che fornisce gli elementi di base relativi ai contenuti, gli Asset Type e gli Asset.
  • Il CS Direct Advantage, che fornisce l’estensione più versatile e flessibile dei contenuti disponibili, le Flex Asset family.

Vediamo di spiegare meglio.
Nella programmazione ad oggetti è abbastanza chiara la distinzione tra “una definizione di classe” e una sua “istanza”. La classe “Docente” definisce e contiene le caratteristiche di un qualunque insegnante (il nome, il cognome, la materia insegnata) mentre l’istanza di classe “unDocente” conterrà nello specifico i dati anagrafici di un particolare docente (Luca, Cianci, Informatica).
Se questa distinzione è chiara allora non dovremmo avere problemi con gli Asset Type.
Un Asset Type definisce e descrive un particolare tipo di contenuto: la news, la FAQ, l’articolo, la foto e altro ancora. Cosa distingue un’articolo da una FAQ? Diciamo che l’articolo contiene un titolo, un abstract, il testo esteso e la capacità di contenere degli allegati, mentre la FAQ contiene soltanto un campo per la domanda e uno per la risposta. Gli Asset Type definiscono quindi il comportamento di un particolare contenuto e con riferimento al nostro precedente esempio sono “le classi” del nostro WCM.
Non me ne vogliano i meno tecnici, ma la mia natura di informatico smanettone ogni tanto salta fuori ed è anche giusto lasciarla libera di esprimersi. Potete comunque ignorare i riferimenti all’Object Oriented e il concetto dovrebbe ugualmente risultare chiaro.
Un Asset rappresenta invece un particolare articolo ad esempio:


Titolo Tutorial Fatwire, lezione 1
Abstract I segreti del WCM di Oracle
Testo Oggi cominciamo una serie di articoli aventi come argomento Fatwire e il Web Content Management in generale.

La definizione degli Asset Type avviene mediante degli appositi file XML che prendono il nome di  File Descriptor e contengono tutte le informazioni necessarie per mappare il nostro contenuto sul database e per renderizzarlo a video all’interno della nostra interfaccia redazionale HTML.
Le Flex family offrono la possibilità di creare Asset Type flessibili che sono la combinazione di singoli elementi o gruppi di elementi e permettono quindi di creare contenuti che, in maniera dinamica, possono assumere “sembianze differenti”.
Pensate ad esempio ad una scheda anagrafica per inserire dei media all’interno di un sito di vendita on-line. Tutti i media che vendo avranno dei campi in comune (lo scaffale, il codice, il nome articolo) ma avranno sicuramente anche degli elementi che li rendono molto diversi tra loro: il codice ISBN per i libri, la casa discografica per i CD e così via.
Se usassimo dei semplici Asset Type dovremmo crearne due differenti: Libro e CompactDisc; sfruttando invece la potenza delle Flex family possiamo definire un unico tipo Media e poi dettagliarne le sue varie caratteristiche. In fase di inserimento del contenuto saremo chiamati a scegliere se creare un Libro o un CompactDisc.
Interfacce, gerarchia di classe e composition vi dicono niente? Se la risposta e no sopravviverete comunque.

Oltre agli Asset Type che abbiamo la possibilità di creare per le nostre specifiche esigenze, ne esistono alcuni predefiniti che offrono alcune funzionalità base:

  • Page. Questo Asset Type rappresenta le pagine del nostro portale. Le pagine possono essere messe in relazione gerarchica tra di loro per costruire l’albero di navigazione, la struttura, del nostro portale. Esistono poi dei componenti della core library che consentono facilmente di interagire con le pagine ed i loro contenuti ad esempio per ottenere rapidamente il percorso di navigazione (breadcrumbs).
  • Template. Questo Asset Type contiene al suo interno il codice, XML o JSP, che lo sviluppatore avrà pensato e realizzato per i nostri scopi.
  • Query. Questo Asset Type può essere alimentato con una semplice query SQL e permette di utilizzare all’interno dei template il risultato dell’interrogazione al database.
  • Collection. Questo Asset Typeè un contenitore, alimentato da una Query, che permette di visualizzare una lista di contenuti omogenei (news, foto, …).
  • Recomandation. Questo Asset Type è l’evoluzione della Collection dato che consente di gestire liste di contenuti non omogenei tra loro.

Penso che come prima panoramica possiamo sicuramente fermarci qui. La prossima volta vedremo eventualmente di capire in soldoni come poter scrivere un template di pagina e ancremo quindi ad analizzare qualche elemento Core della programmazione con Fatwire.