Interfaccia WEB per HCL Domino

E’ POSSIBILE AVERE UN’APPLICAZIONE HCL (ex IBM) DOMINO CON UNA MODERNA INTERFACCIA WEB SENZA DOVER MIGRARE AD UN’ALTRA PIATTAFORMA? LA RISPOSTA E’ SI

HCL ha annunciato il supporto nativo per Node.js, per le nuove release del Server Domino. In attesa di verificare la validità di questo annuncio, esiste già un modo per disegnare un’interfaccia Web moderna ed efficiente per qualsiasi applicazione Domino, senza essere costretti a migrare e riscrivere tutto per un’altra piattaforma; e conservare così tutti i pregi ancora oggi insuperati propri della piattaforma Domino.

Già qualche hanno fa, dopo aver sbattuto la testa contro l’improvvida scelta di IBM di imporre le famigerate XPages per lo sviluppo Web su Domino, abbiamo intrapreso una strada diversa, che oggi possiamo dire con certezza si è rivelata efficace, efficiente e facile da implementare e mantenere.

Tutta la gestione dell’interfaccia utente viene così delegata al servizio HTTP sviluppato su GO.

Il Web server GO fa affidamento per la logica applicativa sul server Domino, dove continuano a risiedere, protetti dalla ben nota sicurezza di alto livello fornita da quest’ultimo, tutti i dati e la directory degli utenti.

Il Server GO fornisce le pagine Web per la visualizzazione e l’interazione con i dati. Ogni qualvolta un operazione richiede l’accesso o la manipolazione dei dati stessi, viene inoltrata una chiamata al Web Service REST adatto, implementato sul server Domino.

In questo modo, si ottengono numerosi vantaggi:

  • separazione chiara e precisa fra l’interfaccia utente e la logica applicativa
  • mantenimento di alti standard di sicurezza
  • totale compatibilità con i dati e la logica preesistente (applicazioni Notes/Domino)
  • flessibilità dell’infrastruttura e facilità di mantenimento

Sviluppare Web Service REST su Domino è piuttosto semplice; ed efficiente. 

In un database .nsf, tipicamente diverso da quello che contiene i dati in modo da separare anche qui questi ultimi dalla logica applicativa, il codice viene scritto in puro JAVA, partendo da una classe che estende CustomServiceBean con un unico metodo da implementare, con la firma: public void renderService(CustomService service, RestServiceEngine engine) throws ServiceException.

I dati in input e output, vengono trasferiti in formato JSON, partendo da un oggetto di tipo JSONObject o JSONArray, secondo necessità. Il formato JSON è perfettamente in grado di descrivere tutti i dati memorizzati nel database, interagendo con le classi del package lotus.domino.

Queste classi, mettono a disposizione tutto ciò che serve per interagire con il database Domino, cercando, aggregando e manipolando i dati secondo le necessità della logica applicativa. Descrivono perfettamente database, viste, collection, documenti; e tutto quanto si può fare con i dati . Né più né meno di ciò che un esperto sviluppatore Domino era abituato a fare quando sviluppava la logica di una tradizionale applicazione per il Client Notes. Con il grande vantaggio, come detto sopra, di tenere separata in maniera nativa questa logica dall’interfaccia utente.

Unica concessione alle XPages, per “attivare” il funzionamento delle classi scritte in questo modo in quanto Web Service REST, creare nel database stesso una XPage e trascinarvi un oggetto di tipo RestService le cui proprietà descrivono il percorso della chiamata REST (pathInfo), il content type (application/json) ed il collegamento alla classe contenente la logica applicativa descritta qui sopra (serviceBean).

Dall’altro lato, il server sviluppato in GO assolve a due compiti: presentare l’interfaccia utente ed organizzare le chiamate alle api REST in funzione delle necessità del momento.

Per fare questo si è costruito in GO un client REST, ovvero un semplice oggetto che include un client HTTP standard con il suo processo di autenticazione (verso la Domino Directory) ed implementa i metodi esposti dal server Domino.

Risultato, un sistema agile e flessibile, che sfrutta appieno i punti di forza del server Domino donando nuova linfa alle applicazioni legacy e permettendo di svilupparne di nuove. Evitando al contempo tutti i risvolti negativi relativi alla gestione Web nativa: pesantezza, rigidità e, soprattutto la confusionaria commistione fra logica applicativa ed interfaccia utente.

Vuoi saperne di più? Contattaci!