{"id":58,"date":"2016-03-15T16:15:09","date_gmt":"2016-03-15T14:15:09","guid":{"rendered":"http:\/\/www.hurmuzov.com\/?p=58"},"modified":"2016-07-20T12:02:25","modified_gmt":"2016-07-20T10:02:25","slug":"javaee-7-jcache-for-jasperreports-compiled-reports","status":"publish","type":"post","link":"https:\/\/www.hurmuzov.com\/?p=58","title":{"rendered":"JavaEE 7 JCache for JasperReport&#8217;s compiled reports"},"content":{"rendered":"<h3>Environment:<\/h3>\n<ul>\n<li>Payara 4.1.1.154 with Hazelcast enabled<\/li>\n<li>addition in pom.xml:<\/li>\n<\/ul>\n<pre>&lt;dependency&gt;\r\n\u00a0\u00a0 &lt;groupId&gt;javax.cache&lt;\/groupId&gt;\r\n\u00a0\u00a0 &lt;artifactId&gt;cache-api&lt;\/artifactId&gt;\r\n\u00a0\u00a0 &lt;version&gt;1.0.0&lt;\/version&gt;\r\n&lt;\/dependency&gt;<\/pre>\n<h3>Implementation:<\/h3>\n<pre>package com.rs.pdfproducer.invoice.control;\r\n\r\nimport com.rs.pdfproducer.PdfProducerException;\r\nimport java.io.ByteArrayInputStream;\r\nimport java.io.File;\r\nimport java.io.IOException;\r\nimport java.nio.file.Files;\r\nimport java.nio.file.Path;\r\nimport java.nio.file.Paths;\r\nimport java.util.logging.Level;\r\nimport java.util.logging.Logger;\r\nimport javax.cache.annotation.CacheDefaults;\r\nimport javax.cache.annotation.CacheKey;\r\nimport javax.cache.annotation.CacheRemoveAll;\r\nimport javax.cache.annotation.CacheResult;\r\nimport javax.inject.Singleton;\r\nimport net.sf.jasperreports.engine.JRException;\r\nimport net.sf.jasperreports.engine.JasperReport;\r\nimport net.sf.jasperreports.engine.Renderable;\r\nimport net.sf.jasperreports.engine.util.JRLoader;\r\nimport net.sf.jasperreports.renderers.BatikRenderer;\r\n\r\n\/**\r\n\u00a0*\r\n\u00a0* @author realsoft\r\n\u00a0*\/\r\n@Singleton\r\n@CacheDefaults(cacheName = \"jasperCache\")\r\npublic class JasperReportProducer {\r\n\r\n\u00a0\u00a0\u00a0 public JasperReport getJasperReport(String fileName) throws PdfProducerException {\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 try {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ByteArrayInputStream bais = new ByteArrayInputStream(getJasperFileContent(fileName));\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 JasperReport report = (JasperReport) JRLoader.loadObject(bais);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return report;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 } catch (JRException ex) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Logger.getLogger(JasperReportProducer.class.getName()).log(Level.SEVERE, null, ex);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 throw new PdfProducerException(\"Error Loading JasperReport File: \" + fileName, ex);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 } catch (IOException ex) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Logger.getLogger(JasperReportProducer.class.getName()).log(Level.SEVERE, null, ex);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return null;\r\n\u00a0\u00a0\u00a0 }\r\n\r\n\u00a0\u00a0\u00a0 @CacheResult\r\n\u00a0\u00a0\u00a0 private byte[] getJasperFileContent(@CacheKey String fileName) throws IOException {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ FOR Test purpose!!! Remove later\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 System.out.println(\"==&gt;Read jasperreport file\");\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Path path = Paths.get(fileName);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return Files.readAllBytes(path);\r\n\u00a0\u00a0\u00a0 }\r\n\r\n}\r\n<\/pre>\n<h3>Usage:<\/h3>\n<pre>\u00a0\u00a0\u00a0 @Inject\r\n\u00a0\u00a0\u00a0 JasperReportProducer reportProducer;\r\n    \r\n    reportAll = reportProducer.getJasperReport(\"all.jasper\");\r\n\r\n\r\n\r\n<\/pre>\n<pre>Comments:\r\nIn the first version @CasheResult was JasperReport class but that caused unexpected problems (missing page numbers of reports, generated from cache). In this version @CasheResult is a simple byte[]. Works perfect.<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Environment: Payara 4.1.1.154 with Hazelcast enabled addition in pom.xml: &lt;dependency&gt; \u00a0\u00a0 &lt;groupId&gt;javax.cache&lt;\/groupId&gt; \u00a0\u00a0 &lt;artifactId&gt;cache-api&lt;\/artifactId&gt; \u00a0\u00a0 &lt;version&gt;1.0.0&lt;\/version&gt; &lt;\/dependency&gt; Implementation: package com.rs.pdfproducer.invoice.control; import com.rs.pdfproducer.PdfProducerException; import java.io.ByteArrayInputStream; import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.logging.Level; import java.util.logging.Logger; import javax.cache.annotation.CacheDefaults; import javax.cache.annotation.CacheKey; import javax.cache.annotation.CacheRemoveAll; import javax.cache.annotation.CacheResult; import javax.inject.Singleton; import net.sf.jasperreports.engine.JRException; import net.sf.jasperreports.engine.JasperReport; import net.sf.jasperreports.engine.Renderable; import [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"footnotes":""},"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/www.hurmuzov.com\/index.php?rest_route=\/wp\/v2\/posts\/58"}],"collection":[{"href":"https:\/\/www.hurmuzov.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hurmuzov.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hurmuzov.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hurmuzov.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=58"}],"version-history":[{"count":5,"href":"https:\/\/www.hurmuzov.com\/index.php?rest_route=\/wp\/v2\/posts\/58\/revisions"}],"predecessor-version":[{"id":65,"href":"https:\/\/www.hurmuzov.com\/index.php?rest_route=\/wp\/v2\/posts\/58\/revisions\/65"}],"wp:attachment":[{"href":"https:\/\/www.hurmuzov.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=58"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hurmuzov.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=58"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hurmuzov.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=58"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}