Java-rapportagetools: een vergelijking

1. Overzicht

Als we erover praten Rapportagetools, dekt veel software dit gebied. De meeste zijn echter volwaardig Business Intelligence-platforms of Cloud diensten.

Maar wat gebeurt er als we alleen enkele rapportagefuncties als bibliotheek aan onze applicatie willen toevoegen? We zullen hier wat bespreken Java-rapportagetools zeer geschikt voor dit doel.

We zullen ons voornamelijk richten op deze open-source tools:

  • VOGEL
  • Jasper rapporteert
  • Pentaho

Daarnaast analyseren we kort de volgende commerciële tools:

  • FineReport
  • Logi-rapport (voorheen JReport)
  • Verslag Mill

2. Rapporten ontwerpen

In dit gedeelte bekijken we hoe we rapporten visueel kunnen ontwerpen en met onze gegevens kunnen spelen. Merk op dat we in dit deel alleen verwijzen naar open-source tools.

2.1. Visuele editors

Alle drie de tools bevatten een WYSIWIG-editor met mogelijkheden voor het bekijken van rapporten.

BIRT-rapportontwerper en Jaspersoft Studio zijn tools gebouwd op Eclipse RCP. Dit is een goed punt voor de meeste van ons Java-ontwikkelaars, omdat we misschien bekend zijn met de Eclipse-omgeving. In tegenstelling tot die, Pentaho Report Designer is visueel slecht verouderd.

Er is ook een extra interessante functie over Jaspersoft Studio: we kunnen onze rapporten rechtstreeks op hun Jasper rapporteert server (het rapportbeheersysteem).

2.2. Datasets

Zoals met alle rapportagetools, kunnen we datasets ophalen door een databron (zie hieronder). Vervolgens kunnen we ze omzetten in rapportvelden, berekende velden maken of aggregatieformules gebruiken.

Daarnaast is het interessant om te vergelijken hoe we meerdere datasets kunnen beheren omdat we er mogelijk meerdere nodig hebben als onze gegevens afkomstig zijn van verschillende zoekopdrachten of zelfs verschillend data bronnen:

  • VOGEL biedt de gemakkelijkste oplossing omdat we meerdere datasets in hetzelfde rapport kunnen hebben
  • Met Jasper meldt en Pentahomoeten we elke keer een apart subrapport maken, wat best lastig kan zijn

2.3. Grafieken en visuele elementen

Alle tools bieden eenvoudige elementen zoals vormen en afbeeldingen, en ook elke kaartsmaak: lijnen, gebieden, taarten, radar, ring, enz. Ze ondersteunen allemaal ook kruistabellen.

Echter, Jasper rapporteert biedt de rijkste collectie visuele elementen. Het draagt ​​bij aan de bovenstaande lijst kaarten, sparklines, piramides, en Gantt-diagrammen.

2.4. Stijlrapporten

Laten we nu de positionering en grootte van elementen op de pagina vergelijken:

  • Alle tools bieden pixelpositionering
  • VOGEL en Pentaho biedt ook HTML-achtige positionering (tafel, blok, inline)
  • Geen van hen ondersteunt CSS-achtige flexbox of grid-systeem om de grootte van de elementen te regelen

Als we meerdere rapporten moeten beheren, willen we misschien hetzelfde visuele thema delen:

  • Jasper meldt biedt themabestanden met XML-CSS-syntaxis
  • VOGEL kan CSS-stylesheets in het ontwerpsysteem importeren
  • Met Pentaho, kunnen we alleen CSS-stylesheets toevoegen in de paginakoptekst. Het is dus moeilijk om ze te combineren met het interne ontwerpsysteem

3. Rapporten weergeven

Nu we hebben gezien hoe we rapporten kunnen ontwerpen, gaan we eens kijken hoe we ze programmatisch kunnen weergeven.

3.1. Installatie

Laten we eerst dat opmerken alle tools zijn zo ontworpen dat ze gemakkelijk in een Java-project kunnen worden ingesloten.

Om aan de slag te gaan, kun je onze speciale artikelen over BIRT en Jasper Reports bekijken. Voor Pentaho is er een helppagina en gratis codevoorbeelden.

Vervolgens zullen we voor elk van deze tools de rapportengine verbinden met onze applicatiegegevens.

3.2. Databron

De eerste vraag die we ons moeten stellen is: hoe kunnen we de rapportengine verbinden met onze projectdatabron?

  • Jasper rapporteert: we voegen het gewoon toe als een parameter van de fillReport methode
  • VOGEL oplossing hiervoor is een beetje ingewikkelder: we moeten ons rapport aanpassen om de gegevensbronattributen als parameters in te stellen
  • Pentaho heeft een groot nadeel hier: tenzij we hun kopen PDI commerciële software, we moeten een JNDI-gegevensbron gebruiken, die moeilijker op te zetten is

Over databronnen gesproken, welke typen worden ondersteund?

  • Alle drie de tools ondersteunen de meest voorkomende typen: JDBC, JNDI, POJO's, CSV, XML en MongoDB
  • REST API is een vereiste voor moderne projecten, maar geen van hen ondersteunt het native
    • met VOGEL, moeten we een Groovy script
    • Jasper rapporteert vereist een extra gratis plug-in
    • met Pentaho, moeten we een Groovy script of verkrijg het PDI commerciële software
  • JSON-bestanden worden standaard ondersteund door Jasper rapporteert en Pentaho, maar VOGEL vereist een externe Java-parserbibliotheek
  • In deze matrix vinden we de volledige vergelijkingslijst

3.3. Parameters en aanpassing van de runtime

Omdat we ons rapport hebben verbonden met onze gegevensbron, laten we wat gegevens weergeven!

Het belangrijkste is nu hoe we onze eindgebruikersgegevens kunnen ophalen. Om dit te doen, kunnen we parameters doorgeven aan de weergavemethode. Deze parameters hadden moeten zijn gedefinieerd toen we het rapport ontwierpen, niet tijdens runtime. Maar wat kunnen we doen als onze dataset bijvoorbeeld gebaseerd is op verschillende queries, afhankelijk van de context van de eindgebruiker?

Met Pentaho en Jasper meldt, is het gewoon niet mogelijk om dat te doen, aangezien het rapportbestand binair is en er geen Java SDK is om ze te wijzigen. Ter vergelijking, VOGEL rapporten zijn gewone XML-bestanden. Bovendien kunnen we een Java API gebruiken om ze aan te passen, dus het is heel gemakkelijk om alles tijdens runtime aan te passen.

3.4. Uitvoerformaten en Javascript-clients

Gelukkig worden de meeste gangbare formaten ondersteund door alle tools: HTML, PDF, Excel, CSV, platte tekst, en RTF. Tegenwoordig kunnen we ons ook afvragen hoe we het rapportresultaat rechtstreeks in onze webpagina's kunnen integreren. We zullen de ruwe opname van een PDF-visualizer echter niet noemen.

  • De beste oplossing is om te gebruiken Javascript clients om rapporten rechtstreeks in een HTML-element weer te geven. Voor BIRT, de Javascript-client is Activeer JSAPI en voor Jasper meldt, we zouden moeten gebruiken JRIO.js
  • Pentaho biedt niets anders dan iFrame-integratie. Deze oplossing werkt, maar kan ernstige nadelen hebben

3.5. Zelfstandige rendertools

Naast het integreren van ons rapport in een webpagina, zijn we wellicht ook geïnteresseerd in een kant-en-klare rendering-server. Elke tool biedt zijn eigen oplossing:

  • BIRT-kijkeris een lichtgewicht webapplicatie sample om uit te voeren VOGEL rapporten op aanvraag. Het is open-source, maar bevat geen functies voor rapportbeheer
  • voor Pentaho en Jasper-rapport, zijn er alleen commerciële softwarepakketten

4. Projectstatus en activiteit

Allereerst een woord over licenties. VOGEL is onder EPL, Jasper meldt onder LGPLv3, en Pentaho onder LGPLv2.1. Zo kunnen we al deze bibliotheken in onze eigen producten integreren, zelfs als ze commercieel zijn.

Vervolgens kunnen we ons afvragen hoe deze open source-projecten worden onderhouden en of de community nog actief is:

  • Jasper meldt heeft een goed onderhouden repository, met een stabiele mediumactiviteit door zijn redacteur TIBCO Software
  • VOGEL repository blijft gehandhaafd, maar het is activiteit is erg laag sinds 2015 toen OpenText zijn editor Actuate overnam
  • Evenzo Pentaho repository-activiteit is erg laag sinds de overname van Hitachi-Vantara in 2015

We kunnen dit bevestigen met Stackoverflow-trends. De laagste populariteit is voor VOGEL en Pentaho, maar is matig voor Jasper meldt.

Alle drie Java-rapportagetools zijn de afgelopen 5 jaar in populariteit afgenomen hoewel voorlopig stabiel blijven. Dit kunnen we verklaren door de opkomst van de Cloud en Javascript aanbiedingen.

5. Commerciële Java-rapportagetools

Naast de open source-oplossingen zijn er ook enkele commerciële opties beschikbaar die het vermelden waard zijn.

5.1. Fijn rapport

Fijn rapport is oorspronkelijk ontworpen om te worden uitgevoerd als een zelfstandige server. Gelukkig kunnen we het opnemen als onderdeel van ons project als we het willen gebruiken. We moeten alle JAR's en bronnen handmatig naar onze WAR kopiëren, zoals beschreven in hun procedure.

Nadat we dit hebben gedaan, kunnen we het Besluitvormingsplatform tool beschikbaar als URL in ons project. Vanaf deze URL kunnen we rapporten rechtstreeks in de verstrekte webweergave uitvoeren, een iFrame, of met behulp van hun Javascript-client. We kunnen echter geen rapporten programmatisch genereren.

Een andere enorme beperking is de beoogde looptijd. Versie 10 ondersteunt alleen Java 8 en Tomcat 8.x.

5.2. Logi Report (voorheen JReport)

Net als Fine Report is Logi Report ontworpen om te worden uitgevoerd als een zelfstandige server, maar we kunnen het integreren als onderdeel van ons bestaande WAR-project. We zullen dus met dezelfde beperking worden geconfronteerd als bij Fijn rapport: we kunnen geen rapporten programmatisch genereren.

In tegenstelling tot Fine Report. Logi Report ondersteunt echter bijna alle servletcontainers en Java 8 tot 13.

5.3. ReportMill Rapportage

Tenslotte, ReportMill is het vermelden waard omdat we kunnen het probleemloos in elke Java-applicatie integreren. Net als BIRT, het is erg flexibel: we kunnen rapporten tijdens runtime aanpassen, aangezien het gewone XML-bestanden zijn.

We kunnen echter meteen zien dat ReportMill verouderd is en ook een slechte set functies heeft in vergelijking met de andere oplossingen.

6. Conclusie

In dit artikel hebben we enkele van de meest bekende Java-rapportagetools doorgenomen en hun functies vergeleken.

Tot slot kunnen we een van deze Java Reporting Tools kiezen, afhankelijk van onze vereisten:

We kiezen voor BIRT:

  • Voor een eenvoudige bibliotheek naar vervang een bestaande zelfgemaakte oplossing
  • Voor zijn grootste flexibiliteit en groot aanpassingspotentieel

We kiezen voor Jasper Reports:

  • Als we een rapportagebibliotheek nodig hebben die compatibel is met een volwaardig rapportbeheersysteem
  • Als we willen wedden op de beste evolutie en ondersteuning op lange termijn