Bei der Verwendung von Subreports in JasperReports ist in den meisten Fällen die Datenquelle im Hauptreport und im Subreport dieselbe Datenquelle, weshalb mit $P{REPORT_CONNECTION} die Verbindung übergeben wird.

blog_md_subreport

 

Interessanter, wenn auch seltener, sind die Subreports, die andere Datenquellen einbinden. So kann Datenfusion im Reporting auf Basis der Quellsysteme ohne zusätzliche Datenextraktionen realisiert werden.

 

JNDI als Datenquelle

Innerhalb des Jasperreports Servers sollte grundsätzlich mittels JNDI auf Datenbanken zugegriffen werden. Dies kann in einer Connection-Expression wie folgt erreicht werden:

((javax.sql.DataSource)(new javax.naming.InitialContext())
 .lookup("java:comp/env/jdbc/sugarcrm")).getConnection()

Diese Lösung hat den Nachteil, dass die Verbindungseinstellungen nicht über das Repository von Jaspersoft verwaltet werden.

Die JNDI-Verbindungseinstellungen können mit folgendem Code-Fragment ermittelt werden:

((com.jaspersoft.jasperserver.api.metadata.jasperreports.domain
  .JndiJdbcReportDataSource)
 (com.jaspersoft.jasperserver.api.engine.jasperreports.util
  .RepositoryUtil.getThreadRepositoryContext().getRepository())
 .getResource(null,"/analysis/datasources/SugarCRMDataSourceJNDI")).getJndiName()

 

Im Gesamtbild ergbit sich daraus folgender Ausdruck für die Connection-Expression:

((javax.sql.DataSource)(new javax.naming.InitialContext())
 .lookup("java:comp/env/" + 
  ((com.jaspersoft.jasperserver.api.metadata.jasperreports.domain
    .JndiJdbcReportDataSource)
   (com.jaspersoft.jasperserver.api.engine.jasperreports.util
    .RepositoryUtil.getThreadRepositoryContext().getRepository())
   .getResource(null, "/analysis/datasources/SugarCRMDataSourceJNDI"))
  .getJndiName())).getConnection()

 

MongoDB

Neben relationalen Datenquellen (JDBC/JNDI) können auch Key-Value-Stores und Datenquellen aus dem Bereich von NoSQL angebunden werden. Der folgende Screenshot zeigt dies am Beispiel von MongoDB:

blog_md_subreport-mongo

 

new com.jaspersoft.mongodb.connection.MongoDbConnection(“mongodb://127.0.0.1:27017/xxx”, “username”, “password”)

TIBCO.Jaspersoft stellt mit Version 6.2 Treiber für u.a. MongoDB und Hadoop Spark bereit.

 

Domain

Domains können mittels “Virtual Datasource” mehrere unterschiedliche Datenquellen einbeziehen. Dies wird mit JBoss TEIID realisiert. Damit können alle Vorteile von Domains (z.B. row-based und column-based security) auch auf heterogenen Datenquellen realisiert werden.