Sample Reference - Schema Reference - Configuration Reference - API (Javadoc)
|
|
|
|
JasperReports - BeanShell Sample (version 4.0.1) | |
|
|
|
Main Features in This Sample | |
| Using the BeanShell Scripting Language for Report Expressions (BeanShell Report Compiler) |
|
|
Secondary Features | |
Report Compilers |
|
|
||||||||
top | |||||||||
|
|||||||||
Using the BeanShell Scripting Language for Report Expressions (BeanShell Report Compiler) | Documented by Sanda Zaharia | ||||||||
|
|||||||||
| Description / Goal |
| How to use BeanShell scripting for report expressions. | ||||||
| Since |
| 0.6.6 | ||||||
| Other Samples |
|
|
||||||
|
|||||||||
|
The BeanShell Report Compiler
In the beginning JasperReports relied on the JDK 1.2-compatible report compiler. Then the JDK 1.3-compatible report compiler was introduced, then the Jikes and JDT-based ones. Both JDK 1.2 and JDK 1.3-based compiler implementations were slow and problematic when compiling reports on-the-fly, especially in a web environment, because they worked only with files on disk and required temporary working directories to store generated Java source files and corresponding class files during the report-compilation process. This is why a new implementation was added based on the BeanShell library for runtime expression evaluation. BeanShell does not produce Java bytecode and can work with in-memory scripts interpreted at runtime. Working with the JRBshCompiler simplified a lot applications deployment, but the expression evaluation process was slower than before, generating a noticeable loss in performance. The later addition of the JDT-based report compiler made the whole process both faster and simpler to deploy, as it does not require files on disk and its performance is comparable to the Jikes-based compiler performance. Therefore, the JRBshCompiler implementation is shipped with the JasperReports library for historical reasons only. The BeanShell Sample The main purpose of this sample is to show how the BeanShell compiler implementation works. Useful information about various compiler implementations can be found here. In order to compile a report, the engine needs to know which is the report expressions language and which compiler implementation to use. If a BeanShell report compilation is expected, one has to set the language attribute to bsh in the report JRXML file,
and the default compiler implementation for the BeanShell language in the /src/jasperreports.properties file:
net.sf.jasperreports.compiler.bsh=net.sf.jasperreports.compilers.JRBshCompiler
In the report template are included specific BeanShell expressions. Having two numbers, 3 and 5, the report will output first their values, and then their calculated sum. The two numbers are declared as follows:
<parameter name="A" class="java.lang.Double">
The next two expressions in the report template read values from parameters declared above and store them in two text fields. <textFieldExpression class="java.lang.Double"><![CDATA[$P{A}]]></textFieldExpression>
<textFieldExpression class="java.lang.Double"><![CDATA[$P{B}]]></textFieldExpression>
Next, the A + B sum is calculated: <textFieldExpression class="java.lang.Double"><![CDATA[new Double($P{A}.doubleValue() + $P{B}.doubleValue())]]></textFieldExpression>
Running the Sample Running the sample requires the Apache Ant library. Make sure that ant is already installed on your system (version 1.5 or later).
In a command prompt/terminal window set the current folder to demo/samples/beanshell within the JasperReports source project and run the > ant test view command.
It will generate all supported document types containing the sample report in the demo/samples/beanshell/build/reports directory.
Then the report will open in the JasperReports internal viewer. |
||||||||
|
|
© 2001-2010 Jaspersoft Corporation www.jaspersoft.com |