Strumenti di reporting Java: un confronto

1. Panoramica

Quando parliamo di strumenti di reporting , molti software coprono quest'area. Tuttavia, la maggior parte di essi sono piattaforme di Business Intelligence o servizi cloud a tutti gli effetti .

Ma cosa succede se vogliamo solo aggiungere alcune funzionalità di reporting alla nostra applicazione come libreria? Esamineremo qui alcuni strumenti di reporting Java adatti a questo scopo.

Ci concentreremo principalmente su questi strumenti open source:

  • BIRT
  • Jasper Reports
  • Pentaho

Inoltre, analizzeremo brevemente i seguenti strumenti commerciali:

  • FineReport
  • Rapporto Logi (precedentemente JReport )
  • Report Mill

2. Progettazione di report

In questa sezione, esamineremo come possiamo progettare visivamente i rapporti e giocare con i nostri dati. Nota che in questa parte faremo riferimento solo agli strumenti open source.

2.1. Editor visivi

Tutti e tre gli strumenti includono un editor WYSIWIG con funzionalità di anteprima dei report.

BIRT Report Designer e Jaspersoft Studio sono strumenti costruiti su Eclipse RCP. Questo è un buon punto per la maggior parte di noi sviluppatori Java, poiché potremmo avere familiarità con l'ambiente Eclipse. A differenza di quelli, Pentaho Report Designer è invecchiato visivamente male .

Inoltre, c'è un'ulteriore caratteristica interessante su Jaspersoft Studio : possiamo pubblicare i nostri rapporti direttamente sul loro Jasper Reports Server (il sistema di gestione dei rapporti).

2.2. Set di dati

Come con tutti gli strumenti di reporting, possiamo recuperare i set di dati interrogando un'origine dati (vedi sotto). Quindi, possiamo trasformarli in campi di report, creare campi calcolati o utilizzare formule di aggregazione.

Oltre a questo, è interessante confrontare il modo in cui possiamo gestire più set di dati poiché potremmo aver bisogno di più di essi se i nostri dati provengono da query diverse o anche da origini dati diverse :

  • BIRT offre la soluzione più semplice in quanto possiamo avere più set di dati nello stesso rapporto
  • Con Jasper Reports e Pentaho , dobbiamo creare ogni volta un sottoreport separato, il che può essere piuttosto complicato

2.3. Grafici ed elementi visivi

Tutti gli strumenti forniscono elementi semplici come forme e immagini, e anche ogni tipo di grafico: linee , aree , torte , radar , anello , ecc. Tutti supportano anche i campi incrociati.

Tuttavia, Jasper Reports fornisce la più ricca raccolta di elementi visivi . Aggiunge all'elenco precedente mappe , grafici sparkline , piramidi e diagrammi di Gantt .

2.4. Rapporti di stile

Ora confrontiamo il posizionamento e il dimensionamento degli elementi nella pagina:

  • Tutti gli strumenti forniscono il posizionamento dei pixel
  • BIRT e Pentaho forniscono anche un posizionamento simile a HTML (tabella, blocco, inline)
  • Nessuno di loro supporta flexbox simile a CSS o sistema a griglia per controllare la dimensione degli elementi

Inoltre, quando dobbiamo gestire più rapporti, potremmo voler condividere lo stesso tema visivo:

  • Jasper Reports fornisce file di temi con sintassi XML-CSS
  • BIRT può importare fogli di stile CSS nel sistema di progettazione
  • Con Pentaho , possiamo solo aggiungere fogli di stile CSS nell'intestazione della pagina. Quindi è difficile combinarli con il sistema di progettazione interno

3. Rendering di rapporti

Ora che abbiamo visto come progettare i report, confrontiamo come possiamo renderli a livello di codice.

3.1. Installazione

Innanzitutto, notiamo che tutti gli strumenti sono stati progettati per essere facilmente incorporati all'interno di un progetto Java .

Per iniziare, puoi dare un'occhiata ai nostri articoli dedicati su BIRT e Jasper Reports. Per Pentaho, c'è una pagina della guida ed esempi di codice gratuiti.

Successivamente, per ciascuno di questi strumenti, collegheremo il motore di report ai dati della nostra applicazione.

3.2. Fonte di dati

La prima domanda che dovremmo porci è: come possiamo collegare il motore di report all'origine dati del nostro progetto?

  • Jasper Reports : lo aggiungiamo semplicemente come parametro del metodo fillReport
  • La soluzione BIRT per questo è un po 'più complessa: dovremmo modificare il nostro report per impostare gli attributi dell'origine dati come parametri
  • Pentaho ha un grosso svantaggio qui: a meno che non acquistiamo il loro software commerciale PDI , dobbiamo utilizzare un'origine dati JNDI , che è più difficile da configurare

Parlando di origini dati, quali tipi sono supportati?

  • Tutti e tre gli strumenti supportano i tipi più comuni: JDBC , JNDI , POJO , CSV , XML e MongoDB
  • L'API REST è un requisito per i progetti moderni, tuttavia nessuno di essi la supporta in modo nativo
    • con BIRT , dovremmo codificare uno script Groovy
    • Jasper Reports richiede un plug-in gratuito aggiuntivo
    • con Pentaho , dovremmo codificare uno script Groovy o acquisire il software commerciale PDI
  • I file JSON sono supportati nativamente da Jasper Reports e Pentaho , ma BIRT richiederà una libreria parser Java esterna
  • Possiamo trovare l'elenco completo di confronto in questa matrice

3.3. Parametri e personalizzazione del runtime

Poiché abbiamo collegato il nostro report alla nostra origine dati, eseguiamo il rendering di alcuni dati!

La cosa importante ora è come recuperare i dati dei nostri utenti finali. Per fare ciò, possiamo passare parametri al metodo di rendering. Questi parametri avrebbero dovuto essere definiti quando abbiamo progettato il report, non in fase di runtime. Ma cosa possiamo fare se, ad esempio, il nostro set di dati si basa su query diverse a seconda del contesto dell'utente finale?

Con Pentaho e Jasper Reports , semplicemente non è possibile farlo , poiché il file di report è binario e non c'è Java SDK per modificarli. In confronto, i report BIRT sono file XML semplici . Inoltre, possiamo utilizzare un'API Java per modificarli, quindi è molto facile personalizzare tutto in fase di esecuzione.

3.4. Formati di output e client Javascript

Per fortuna, la maggior parte dei formati comuni sono supportati da tutti gli strumenti: HTML, PDF, Excel, CSV, testo normale e RTF . Al giorno d'oggi, potremmo anche chiederci come possiamo integrare il risultato del report direttamente nelle nostre pagine web. Tuttavia, non menzioneremo l'inclusione approssimativa di un visualizzatore PDF.

  • La soluzione migliore è utilizzare i client Javascript per visualizzare i report direttamente in un elemento HTML. Per BIRT, il client Javascript è Actuate JSAPI e per Jasper Reports , dovremmo usare JRIO.js
  • Pentaho non fornisce nient'altro che l'integrazione iFrame. Questa soluzione funziona ma può presentare gravi inconvenienti

3.5. Strumenti di rendering autonomi

Oltre a integrare il nostro report in una pagina web, potremmo anche essere interessati ad avere un server di rendering pronto all'uso. Ogni strumento fornisce la propria soluzione:

  • BIRT Viewer è un esempio di applicazione web leggero per eseguirereport BIRT su richiesta. È open source ma non include funzionalità di gestione dei report
  • per Pentaho e Jasper Report , ci sono solo pacchetti software commerciali

4. Stato e attività dei progetti

Innanzitutto, una parola sulle licenze. BIRT è sotto EPL , Jasper Reports sotto LGPLv3 e Pentaho sotto LGPLv2.1 . Pertanto, possiamo incorporare tutte queste librerie nei nostri prodotti, anche se sono commerciali.

Quindi, possiamo chiederci come vengono mantenuti questi progetti open source e se la comunità è ancora attiva:

  • Jasper Reports dispone di un repository ben mantenuto, con un'attività media stabile da parte del suo editor TIBCO Software
  • Il repository BIRT rimane mantenuto, ma la sua attività è molto bassa dal 2015 quando OpenText ha acquisito il suo editor Actuate
  • Allo stesso modo, l' attività dei repository Pentaho è molto bassa dall'acquisizione di Hitachi-Vantara nel 2015

Possiamo confermarlo utilizzando le tendenze di Stackoverflow. La popolarità più bassa è per BIRT e Pentaho, ma è moderata per Jasper Reports .

Tutti e tre gli strumenti di reporting Java sono diminuiti di popolarità negli ultimi 5 anni, sebbene per ora rimangano stabili. Possiamo spiegarlo con l'emergere delle offerte Cloud e Javascript.

5. Strumenti di reporting Java commerciali

Oltre alle soluzioni open source, ci sono anche alcune opzioni commerciali disponibili che vale la pena menzionare.

5.1. Ottimo rapporto

Fine Report è stato inizialmente progettato per essere eseguito come server autonomo. Fortunatamente, siamo in grado di includerlo come parte del nostro progetto se vogliamo usarlo. Dobbiamo copiare manualmente tutti i JAR e le risorse nel nostro WAR, come descritto nella loro procedura.

Dopo aver fatto ciò, possiamo vedere lo strumento Piattaforma decisionale disponibile come URL nel nostro progetto. Da questo URL, possiamo eseguire rapporti direttamente nella visualizzazione Web fornita, un iFrame o utilizzando il loro client Javascript. Tuttavia, non possiamo generare rapporti a livello di programmazione.

Un altro enorme limite è il runtime di destinazione. La versione 10 supporta solo Java 8 e Tomcat 8.x.

5.2. Rapporto Logi (precedentemente JReport)

Come Fine Report, Logi Report è stato progettato per essere eseguito come server autonomo, ma possiamo integrarlo come parte del nostro progetto WAR esistente. Pertanto, dovremo affrontare la stessa limitazione di Fine Report : non possiamo generare rapporti in modo programmatico .

A differenza di Fine Report. tuttavia, Logi Report supporta quasi tutti i contenitori servlet e Java 8-13.

5.3. ReportMill Reporting

Infine , vale la pena menzionare ReportMill perché possiamo incorporarlo senza problemi in ogni applicazione Java . Inoltre, come BIRT , è molto flessibile: possiamo personalizzare i report in fase di esecuzione in quanto sono semplici file XML .

Tuttavia, possiamo vedere subito che ReportMill è invecchiato e ha anche un set di funzionalità scadente rispetto alle altre soluzioni.

6. Conclusione

In questo articolo, abbiamo esaminato alcuni dei più noti strumenti di reporting Java e confrontato le loro caratteristiche.

In conclusione, possiamo scegliere uno di questi Java Reporting Tools a seconda dei nostri requisiti:

Sceglieremo BIRT :

  • Per una semplice libreria in sostituzione di una soluzione casalinga esistente
  • Per la sua massima flessibilità e l'alto potenziale di personalizzazione

Sceglieremo Jasper Reports :

  • Se abbiamo bisogno di una libreria di report compatibile con un sistema di gestione dei report completo
  • Se vogliamo scommettere sulla migliore evoluzione e supporto a lungo termine