Mokabyte

Dal 1996, architetture, metodologie, sviluppo software

  • Argomenti
    • Programmazione & Linguaggi
      • Java
      • DataBase & elaborazione dei dati
      • Frameworks & Tools
      • Processi di sviluppo
    • Architetture dei sistemi
      • Sicurezza informatica
      • DevOps
    • Project Management
      • Organizzazione aziendale
      • HR
      • Soft skills
    • Lean/Agile
      • Scrum
      • Teoria della complessità
      • Apprendimento & Serious Gaming
    • Internet & Digital
      • Cultura & Società
      • Conferenze & Reportage
      • Marketing & eCommerce
    • Hardware & Tecnologia
      • Intelligenza artificiale
      • UX design & Grafica
  • Ultimo numero
  • Archivio
    • Archivio dal 2006 ad oggi
    • Il primo sito web – 1996-2005
  • Chi siamo
  • Ventennale
  • Libri
  • Contatti
Menu
  • Argomenti
    • Programmazione & Linguaggi
      • Java
      • DataBase & elaborazione dei dati
      • Frameworks & Tools
      • Processi di sviluppo
    • Architetture dei sistemi
      • Sicurezza informatica
      • DevOps
    • Project Management
      • Organizzazione aziendale
      • HR
      • Soft skills
    • Lean/Agile
      • Scrum
      • Teoria della complessità
      • Apprendimento & Serious Gaming
    • Internet & Digital
      • Cultura & Società
      • Conferenze & Reportage
      • Marketing & eCommerce
    • Hardware & Tecnologia
      • Intelligenza artificiale
      • UX design & Grafica
  • Ultimo numero
  • Archivio
    • Archivio dal 2006 ad oggi
    • Il primo sito web – 1996-2005
  • Chi siamo
  • Ventennale
  • Libri
  • Contatti
Cerca
Chiudi

Nel numero:

108 giugno
, anno 2006

JFreeChart: una libreria Open Source per la generazione dinamica di grafici

II parte: un esempio completo di applicazione web

Guglielmo Iozzia

Guglielmo Iozzia

Guglielmo Iozzia si è Laureato nel 1999 in Ingegneria Elettronica (indirizzo Biomedico) presso l‘Università di Bologna. Ha progettato e realizzato un software diagnostico per la predizione dell‘andamento della pressione intracranica in pazienti in terapia intensiva neurochirurgica. Frequenta il mondo Java dall‘inizio del 2000. Dopo numerose esperienze presso un‘azienda di Bologna del settore IT (fino all‘aprile del 2006), e per qualche mese in una analoga società di Roma, ha scelto la libera professione, lavorando per RAI Net fino ai primi mesi del 2008. In seguito è diventato Senior IT Consultant per la FAO (Food and Agriculture Organization of the United Nations). In ambito FAO ha dedicato quasi tutto il 2012 al progetto GRMS (Global Resources Management System) in qualità di "Web Services and cross-environmental integration specialist". Da luglio 2013 si è trasferito a Dublino, dove ricopre il ruolo di SVT Automation Engineer per IBM Ireland.

MokaByte

JFreeChart: una libreria Open Source per la generazione dinamica di grafici

II parte: un esempio completo di applicazione web

Guglielmo Iozzia

Guglielmo Iozzia

  • Questo articolo parla di: Java, Programmazione & Linguaggi, UX design & Grafica

Secondo di due articoli sulla descrizione delle API di JFreeChart, una libreria Java Open Source che consente la generazione dinamica di grafici a partire da una fonte dati e di esportarli nei formati PNG e JPEG, anche da Servlet. In questa seconda parte analizziamo la realizzazione di una applicazione web che fa uso delle API di JFreeChart per generare un grafico a runtime e che recupera i dati per popolare il grafico da un database via JDBC.

Introduzione

Nel precedente articolo sono state illustrate le caratteristiche principali di JFreeChart ed e‘ stato mostrato un esempio di applicazione Java standalone che utilizzava le API di tale libreria per la generazione di un grafico a partire da un set di dati. Come già  anticipato, JFreeChart può essere utilizzato in Java anche in ambito web. In questa seconda parte dell‘articolo viene quindi descritta un‘applicazione di esempio di questo tipo.

Base dati dell‘applicazione

L‘applicazione descritta in questo articolo genererà , in una Servlet, un output di tipo PNG di un Time Series Chart contenente due curve.
A differenza dell‘esempio della prima parte dell‘articolo, i dati con cui verrà  popolato il grafico verranno recuperati da un database. Quello, molto semplice, utilizzato per l‘esempio e‘ un database MySQL chiamato jfreechart e costituito da una sola tabella, xydata:

CREATE TABLE xydata (id INT NOT NULL AUTO_INCREMENT, refmonth INT, refyear INT, yvalue1 DECIMAL(6,2), yvalue2 DECIMAL(6,2), PRIMARY KEY (id));

I campi della tabella hanno il seguente significato:

  • id = id della tabella;
  • refmonth = mese;
  • refyear = anno; insieme a refmonth viene utilizzato per costruire l‘asse delle ascisse;
  • yvalue1 = valori della prima fra le due curve disegnate nel grafico;
  • yvalue2 = valori della seconda fra le due curve disegnate nel grafico.

La Servlet, chiamata ChartTestServlet, estende javax.servlet.http.HttpServlet. Nel metodo doPost viene invocato il metodo che si occupa della generazione del grafico:

public void doPost( HttpServletRequest request, HttpServletResponse response )throws ServletException, IOException {// Invoca il metodo della classe che genera il GraficoChartMaker lChartMaker = new ChartMaker();JFreeChart lChart = lChartMaker.createChart();

Quindi viene eseguito il rendering del grafico impostando il content type dell‘output della Servlet a image/png e sfruttando il metodo writeChartAsPNG della classe com.jrefinery.chart.ChartUtilities:

// Rendering del grafico in PNGif ( lChart != null ) {response.setContentType( "image/png" );OutputStream out = response.getOutputStream();            ChartRenderingInfo lInfo = new ChartRenderingInfo( new StandardEntityCollection() );ChartUtilities.writeChartAsPNG( out, lChart, 640, 480, lInfo );            out.flush();out.close();}

com.jrefinery.chart.ChartUtilities è la classe JFreeChart che prevede i metodi per il rendering dei grafici nei formati previsti dalla libreria. Il metodo createChart() della classe ChartMaker si occupa della generazione del grafico vera e propria. Tale metodo recupera i dati dalla tabella xydata del database applicativo:

DataRetriever lDataRetriever = new DataRetriever();lDataset = lDataRetriever.getData( "SELECT * FROM xydata" );

e quindi costruisce il grafico in maniera analoga a quanto visto nell‘esempio della prima parte dell‘articolo:

if ( lDataset != null ){lChart = ChartFactory.createTimeSeriesChart("Mokabyte Time Series Example","Date","Valori",lDataset,true,true,false);// Imposta il colore di sfondolChart.setBackgroundPaint( Color.yellow );// Impostazione delle proprietà  del diagrammaXYPlot lXYPlot = (XYPlot)lChart.getPlot();lXYPlot.setBackgroundPaint( Color.lightGray );lXYPlot.setDomainGridlinePaint( Color.white );lXYPlot.setRangeGridlinePaint( Color.white );lXYPlot.setDomainCrosshairVisible( true );lXYPlot.setRangeCrosshairVisible( true ); // Impostazione dell‘asse delle ascisse DateAxis lXYAxis = (DateAxis)lXYPlot.getDomainAxis(); lXYAxis.setDateFormatOverride( new SimpleDateFormat( "MMM-yyyy" ) );}

La classe DataRetriever e‘ quella che si occupa della connessione al database e del recupero dei dati necessari. La connessione avviene tramite driver JDBC MySQL. Il metodo DataRetriever.exeSelect esegue la SELECT sulla tabella xydata e popola l‘istanza di com.jrefinery.data.XYDataset da restituire alla classe ChartMaker per la generazione del grafico:

public XYDataset exeSelect( String pStrSQLSelect ){TimeSeriesCollection lDataset = new TimeSeriesCollection();try{TimeSeries lTimeSeries1 = new TimeSeries( "MokaByte Index", Month.class );TimeSeries lTimeSeries2 = new TimeSeries( "MokaCode Index", Month.class );stmt = conn.createStatement();rs = stmt.executeQuery(pStrSQLSelect);while (rs.next()){lTimeSeries1.add( new Month( rs.getInt( "refmonth" ), rs.getInt( "refyear" ) ), rs.getFloat( "yvalue1" ) );lTimeSeries2.add( new Month( rs.getInt( "refmonth" ),  rs.getInt( "refyear" ) ),  rs.getFloat( "yvalue2" ) );}rs.close();lDataset.addSeries( lTimeSeries1 );lDataset.addSeries( lTimeSeries2 );}catch(SQLException se){System.out.println( "exeSelect(): Impossible eseguire la SELECT" );}return lDataset;}

Esecuzione dell‘applicazione

Per poter essere eseguita, l‘applicazione di esempio necessita di essere installata all‘interno di un Servlet container, quale Jakarta Tomcat. Una volta effettuato il deploy dell‘applicazione e riavviato Tomcat, invocando, da Browser, l‘URL:

http://127.0.0.1:8080/JFreeChartExample2/ChartTestServlet

la Servlet produrrà  un output di questo tipo:

L‘esempio completo è allegato all‘articolo e può essere scaricato dal menu in alto a sinistra

Per generare grafici diversi dai Times Series chart i passi da compiere sono analoghi a quelli di questo esempio.

Conclusioni

In questa seconda parte e‘ stato mostrato che, indipendentemente dal tipo di applicazione Java, la generazione di grafici in maniera dinamica tramite JFreeChart prevede sempre la stessa sequenza di operazioni. Dai due esempi spiegati in questi due articoli si evince che la libreria ben si presta per essere integrata facilmente in applicazioni Java che necessitano della generazione di grafici a runtime anche molto complesse. Inoltre, il grado di personalizzazione dei grafici e‘ molto elevato.

Riferimenti

[1]
David Gilbert “The JFreeChart Class Library – Installation Guide”
http://www.jfree.org/jfreechart/index.php

Facebook
Twitter
LinkedIn
Guglielmo Iozzia

Guglielmo Iozzia

Guglielmo Iozzia si è Laureato nel 1999 in Ingegneria Elettronica (indirizzo Biomedico) presso l‘Università di Bologna. Ha progettato e realizzato un software diagnostico per la predizione dell‘andamento della pressione intracranica in pazienti in terapia intensiva neurochirurgica. Frequenta il mondo Java dall‘inizio del 2000. Dopo numerose esperienze presso un‘azienda di Bologna del settore IT (fino all‘aprile del 2006), e per qualche mese in una analoga società di Roma, ha scelto la libera professione, lavorando per RAI Net fino ai primi mesi del 2008. In seguito è diventato Senior IT Consultant per la FAO (Food and Agriculture Organization of the United Nations). In ambito FAO ha dedicato quasi tutto il 2012 al progetto GRMS (Global Resources Management System) in qualità di "Web Services and cross-environmental integration specialist". Da luglio 2013 si è trasferito a Dublino, dove ricopre il ruolo di SVT Automation Engineer per IBM Ireland.

Guglielmo Iozzia

Guglielmo Iozzia

Guglielmo Iozzia si è Laureato nel 1999 in Ingegneria Elettronica (indirizzo Biomedico) presso l‘Università di Bologna. Ha progettato e realizzato un software diagnostico per la predizione dell‘andamento della pressione intracranica in pazienti in terapia intensiva neurochirurgica. Frequenta il mondo Java dall‘inizio del 2000. Dopo numerose esperienze presso un‘azienda di Bologna del settore IT (fino all‘aprile del 2006), e per qualche mese in una analoga società di Roma, ha scelto la libera professione, lavorando per RAI Net fino ai primi mesi del 2008. In seguito è diventato Senior IT Consultant per la FAO (Food and Agriculture Organization of the United Nations). In ambito FAO ha dedicato quasi tutto il 2012 al progetto GRMS (Global Resources Management System) in qualità di "Web Services and cross-environmental integration specialist". Da luglio 2013 si è trasferito a Dublino, dove ricopre il ruolo di SVT Automation Engineer per IBM Ireland.
Tutti gli articoli
Nello stesso numero
Loading...

Architetture e tecniche di progettazione EJB

VII parte: ottimizzazione CMP

Sviluppare Applicazioni AJAX

II parte: realizzare applicazioni AJAX utilizzando il progetto Open Source Sarissa

AJAX ci porterà le Servlet Asincrone?

Proposto un nuovo modello per la Servlet API

Offshore

I parte: le metodologie agili e i progetti offshore

SOA: Dalla teoria alla pratica

IX parte: Esempio (I)

AJAX, Java e Rich Internet Applications

Interfacce grafiche ricche basate su Javascript/XML vs. approcci ‘pure Java‘

Nella stessa serie
Loading...

JFreeChart: una libreria Open Source per la generazione dinamica di grafici

I parte: introduzione al framework

Mokabyte

MokaByte è una rivista online nata nel 1996, dedicata alla comunità degli sviluppatori java.
La rivista tratta di vari argomenti, tra cui architetture enterprise e integrazione, metodologie di sviluppo lean/agile e aspetti sociali e culturali del web.

Imola Informatica

MokaByte è un marchio registrato da:
Imola Informatica S.P.A.
Via Selice 66/a 40026 Imola (BO)
C.F. e Iscriz. Registro imprese BO 03351570373
P.I. 00614381200
Cap. Soc. euro 100.000,00 i.v.

Privacy | Cookie Policy

Contatti

Contattaci tramite la nostra pagina contatti, oppure scrivendo a redazione@mokabyte.it

Seguici sui social

Facebook Linkedin Rss
Imola Informatica
Mokabyte