Wednesday, November 28, 2007

BIRT Survey

From time to time the BIRT team conducts surveys in order to obtain feedback from the community regarding Eclipse BIRT. The BIRT team is now running a survey that is designed to understand areas of the product that need improving from the point of usability. If you would like to share your opinions on the usability of BIRT , please take ten minutes to fill out this survey. The link to the survey is here.

Thursday, November 08, 2007

Example Repository

I have set up a Subversion version control repository with a number of BIRT examples at:

You can use the Subclipse plug-in to get anonymous read access to the repository.

Some interesting examples:

birt_api_example Contains Design and Runtime examples for building and running BIRT reports
birt_runtime_lib Holds all of the libraries and plug-ins required by the API example

callstack_runtime Simple ODA example with extensive logging

google_runtime ODA example that attaches to Google Spread-Sheets

Monday, October 15, 2007

2.2.1 Memory Woes

Show of hands, how many of you have upgraded to version 2.2.1 of BIRT? Okay, now how many of you have had memory issues? Based on my experience and the messages on the newsgroup, it seems like almost everyone that has moved to 2.2.1 through installation of the new All-In-One build is having this problem. Fortunately, there is an easy fix. The problem is related to a change in the Eclipse.ini file. This is a bug on the entire platform and affects all of the Eclipse products, not just BIRT. To fix open the Eclipse.ini file in your ECLIPSE_HOME directory. Find the line with


Replace that line with

That should solve the problem. The platform team is tracking this bug here. They are trying to make a decision
to release a new version of the platform or not. The BIRT team is also tracking the issue here.

Depending on what the platform team does with a new release, we may create a new 2.2.1a build of BIRT so that
this problem does not continue to exist.

Updated: It has come to my attention that there could be a couple of issues.
First) -XX:MaxPermSize=256m has to be the last line in the eclipse.ini
Second) There is only a single dash before the XX:MaxPermSize

Here is the complete eclipse.ini that I am using on my system. I have bumped the memory numbers a bit since I have plenty of RAM on my system.

-showsplash org.eclipse.platform


Monday, October 08, 2007

Introducing BIRT Exchange

I referenced in an earlier post, but I thought I'd take the opportunity to formally introduce it.

It's a new site, sponsored by Actuate, that provides a variety of content on Eclipse BIRT and the related products and services Actuate has built on top of the open source project.

I particularly like two features of the site. The first is the DevX area, which is a repository of content about BIRT, including sample reports, code, tips and tricks and links to articles and blogs, both on the site and elsewhere. Anyone can access content or add to the repository. Think of it as a sort of just for BIRT.

The second is the Eclipse BIRT newsgroup mirror, which includes all the posts from the site, but enables you to read and search them using a web-based forum package. I find it a lot easier to locate answers to questions that may have already been addressed using the forum interface.

Next time you're searching for information on a particular BIRT issue or question, keep in mind BIRT Exchange as another good resource.

Thursday, October 04, 2007

EclipseCon 2008 Call For Participation

EclipseCon 2008 is six months away, and it is time to start submitting proposals for talks. I am on the Program Committee and have been given the task of recruiting for the reporting track. This year, I want to have the best possible talks about reporting in the Eclipse environment possible.

There are three types of talks and reporting has been allocated 11 hours of presentation time. Thats a lot of content to come up with, so I need your help. We really want to see members of the BIRT community submitting proposals for talks.

The reporting category is described as:

Topics that show using Eclipse tools and frameworks for business intelligence and reporting applications. In particular, this category is focused on applications of BIRT project components. We are interested in report development, BIRT integration, using the BIRT extension points, and integration of the BIRT Chart components. Preference will be given to presentations that reflect real world experience.

The reporting category has been given 12 slots as shown below:
- 3 Tutorials (2 hours)

- 4 Long Talks (1 hour)
- 5 Short Talks (10 minutes)

Proposals for talks are done through the EclipseCon 2008 submission process.

We are actively recruiting for high quality talks for all three slots. Our goal is to get as much community involvement as possible. You may say, "Whats in it for me". First, you have a chance to receive recognition for all of the great things that you have done with BIRT. Second, the Tutorials and Long Talks allow you to go to the conference for free. Each short talk is worth a 20% discount on your registration.

What are we looking for? We have two goals: First show off as much of the BIRT technology as possible and second show off the actual implementations of BIRT that you are all doing. In terms of the first goal, we have drawn up some broad objectives on the types of talks we would like to see, so any community submitted talks that will help us achieve those goals will have a strong chance of acceptance.

If you have ideas for talks that are not in the objectives, feel free to submit them. We will give careful consideration to all reporting proposals. The presentations are not limited to BIRT, but have to in some way involve Reporting and Eclipse.

The deadline for submissions is the November 19, so please make your submissions as soon as possible.

The BIRT PMC Objectives for EclipseCon talks:

Tutorials (3 allocated two hours each)
* Basic
* Integration / Report Engine
* Integration / Design Engine
* Extension (Data Extension to be covered under Data Tools)
* Charting

Long Talks (4 allocated one hour each)
* Introduction to BIRT
* Customer Success Story
* Advanced BIRT Report Dev (DataCube/Pivot, Expressions, Event Handlers, Libs, and CSS)
* Charting
* Integration (Report Engine / Design Engine)

Short Talks (1 hour – 5 talks allocated ten minutes each)
* Features Hour
o Parameters & Script
o Charts
o Re-Use (Libs & Styles)
o Layout
o Features Q&A

* Customer Hour
o Four stories from our customers on how they used BIRT. (ten minutes each)
o Followed by a joint Q&A with the four customers and one team member.
o customer Q&A

Monday, October 01, 2007

BIRT Web Service ODA

In the August edition of Eclipse Magazine ( Virgil Dodson and I wrote an article on the use of the Web Service ODA that is new with BIRT 2.2. One option that we discussed was the use of a custom connection class, which allows the developer the option of specifying a class that will be called which will be responsible for retrieving the web service data. In BIRT 2.2 this feature was initially disabled. With the release of BIRT 2.2.1 this week this feature in now enabled. In addition the driver has been improved by adding a driver class path property to locate your custom connection class.

A custom driver class must implement one method named connect. This method should accept two parameters, which contain the connection properties and application context. This class should instantiate another class that implements an executeQuery Method and a close method. The executeQuery method should accept the queryText (SOAP Request), parameter values and data set properties as parameters. In the example from the article this connection class simply opened a FileInputStream which contained a SOAP response and returned the data.

To use this feature, you will still need to provide a SOAP endpoint or a WSDL document when configuring the Data Source. Although the WSDL document can reference methods that may never be called in your custom class, essentially making it a dummy WSDL. In the example you will note that the SOAP request is never used.

An example report and source code using this feature can be found here.

Virgil has also made improvements to the example since it was published , adding pagination and hyperlink controls for navigation which he included in his BIRT Exchange post.

By the way, if you're not familar with it, BIRT Exchange is a community site for BIRT developers that enables you to share code samples, report designs, technical articles, as well as tips and tricks. To read more about the site take a look at this blog.

Wednesday, September 19, 2007

2.2 BIRT Tag Library: Building a Custom Parameter Page

The Web Viewer now contains a tag library that can be used to customize the behavior of the Viewer. This tag library can be deployed by either deploying the viewer as normal or by using the new BIRT Web Deployment project wizard. In addition, if you desire to have BIRT deployed in one context and include the tag library in a separate context this can be done by copying the birt.tld file to your WEB-INF\tlds directory and copying coreapi.jar, modelapi,jar, viewerservlets.jar, engineapi.jar, and from the Viewer libs directory to the new context/web-inf/lib directory. Add the following reference to your web.xml.


The following tags are now available:


The parameterPage tag can be used to construct your own parameter page before calling the BIRT Viewer. In addition to calling the Viewer several attributes are provided to customize the Viewer appearance and functionality.

For example the following JSP code will present the user with a set of text boxes to enter the two parameters required for the report. The pattern attribute specifies the Servlet mapping to be used and can be set to frameset, run or preview.

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
<%@ taglib uri="/birt.tld" prefix="birt" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "">
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

<birt:parameterPage id="birtParmPage" reportDesign="TopNPercent.rptdesign"
name="my form"
title="My Viewer Tag"
<input type="Text" name="Top Count">
<input type="Text" name="Top Percentage">
<input type="Submit" value="Run Report">

If you wish the BIRT Engine to return the HTML it generates for the parameter you can use the paramDef tag in conjunction with the parameterPage tag.

The following code will call the BIRT engine to populate each level of a cascade.

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
<%@ taglib uri="/birt.tld" prefix="birt" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "">
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<style type="text/css">
.class1 { background-color:#ff0000; color: #ffffff; }

Parameter Page 1

Cascading Parameter1: <birt:paramDef id="5" name="Country" />
Cascading Parameter2: <birt:paramDef id="6" name="City"/>
Cascading Parameter3: <birt:paramDef id="7" name="Customer" cssClass="class1"/>
<input type="submit" name="submit" value="Sumbit form"/>

This code will produce the following output. Notice that the third level is also being customized by using a style.


Download the 2.2 build and try out the new tag library.

Monday, July 30, 2007

BIRT Live Day in Las Vegas

Actuate is hosting the first BIRT Live Day on August 15th in Las Vegas. The event consists of 11 technical sessions divided into two tracks on developing with BIRT and deploying BIRT. I'll be giving a session on "Deploying the BIRT Engine." Some of the other topics include integrating BIRT with the Google Web Toolkit, Internationalizing and Localizing reports and End User Interactivity with BIRT - just to give you a flavor. It's part of Actuate's International User Conference, but you can register just for BIRT Live Day if you want for $150.

Full Agenda and Registration details are here.

Thursday, July 19, 2007

Styles Revisited

Its been a while, but after some family commitments, I am finally back at it with BIRT. In April of 2006, I created a post discussing how Styles could be used within BIRT. With the release of 2.2, it is time to revisit CSS Styles in BIRT. The biggest change is that you can now link to a CSS style sheet, the styles do not need to be imported into the report. This is a HUGE improvement.

To take advantage of this feature you go to the outline view, right click on styles and get the following dialog.

The new option allows you to "Use CSS File". When you select this file a dialog that enables you to select a file.

Once you have attached the CSS file, you will then have access to any of the classes in the CSS file to use as styles within your report. But this is just the beginning. All of the major objects and positions within a BIRT report have a default style associated with them. By modifying the default style settings you can change the look of your report without having to set any styles manually.

The best place to start with the pre-defined styles is to start with the visual objects that make up the report the controls. Each control type has a default style associated with it.
  • text
  • label
  • text
  • data
  • image
  • text-data

So adding the following entry in your style sheet will change the default behavior of all text controls to be orange.
color: orange;

In reality, one should be very careful with how many changes are made to the lowest level styles. Changing a property for a basic control style, will change the style for all instance of that control, unless the control specifically over-rides the property. So if you want all of your text to be orange, by all means modify the base control classes. If on the other hand, you want to modify report style by position within the report, then read on. In other words, if you want the header for all of your tables to look one way and the detail to look another, BIRT provides default classes that control that behavior.

Before moving into the full array of BIRT default classes, I want to expose the CSS properties that BIRT supports. The following table documents the properties and the default property values that BIRT uses.

CSS Property Values | Default | Inherit
background-attachment scroll | fixed | inherit

<color>| transparent | inherit
background-image <uri> | none | inherit
background-position [ [ <percentage> | <length> | left | center | right ] [ <percentage> | <length> | top | center | bottom ]? ] | [ [ left | center | right ] || [ top | center | bottom ] ] | inherit
background-repeat repeat | repeat-x | repeat-y | no-repeat | inherit
border-top-color , border-right-color , border-bottom-color , border-left-color <color> | transparent | inherit
border-top-style , border-right-style , border-bottom-style , border-left-style <border-style> | inherit
border-top-width , border-right-width , border-bottom-width , border-left-width <border-width> | inherit
color <color> | inherit
display inline | block | list-item | run-in | inline-block | table | inline-table | table-row-group | table-header-group | table-footer-group | table-row | table-column-group | table-column | table-cell | table-caption | none | inherit
font-family [[ <family-name> | <generic-family> ] [, <family-name> | <generic-family>]* ] | inherit
font-size <absolute-size> | <relative-size> |<length> | <percentage>| inherit
font-style normal | italic | oblique | inherit
font-variant normal | small-caps |inherit
font-weight normal | bold | bolder | lighter | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 | inherit
letter-spacing normal | <length> | inherit
line-height normal |<number> | <length> | <percentage> | inherit
margin-right , margin-left <margin-width> | inherit
margin-top , margin-bottom <margin-width> | inherit
orphans <integer> | inherit
padding-top , padding-right , padding-bottom , padding-left <padding-width> | inherit
page-break-after auto | always | avoid | left | right | inherit
page-break-before auto | always | avoid | left | right | inherit
page-break-inside avoid | auto | inherit
text-indent <length> | <percentage> | inherit
text-align left | right | center | justify | inherit
text-decoration none | [ underline || overline || line-through || blink ] | inherit
text-transform capitalize | uppercase | lowercase | none | inherit
white-space normal | pre | nowrap | pre-wrap | pre-line | inherit
widows <integer> | inherit
word-spacing normal | <length>|inherit
vertical-align baseline | sub | super | top | text-top | middle | bottom | text-bottom | <percentage> | <length> | inherit

Most of you are probably familiar with the standard HTML cascade:

A td element will inherit from either the table or the row if it has not defined its own value. If you do specify a property value for the td selector, than it will over-ride the values set at both the row and table levels.

BIRT uses its own cascade precedence. Since each of the major objects and functional positions is assigned a default style. The next table shows the precedence used for the BIRT default styles.














. . .



. . .











. . .




. . .

. . .

So if you want to change the font-family for all of the controls within your report, then you can use the following within your CSS document.

font-family: sans-serif;

If you want the tables in the report to use italics and a serif font, then you would add:
font-family: sans-serif;

font-style: italics;
font-family: serif;

As you can see, you can control the behavior for headers, detail sections, and footers for list and tables. In addition, each of the group headings can use its own style up to 9 levels deep. In the previous article, I provided a CSS document that was setup to take advantage of this feature. Unfortunately, the Default Style Names have changed between 2.1 and 2.2. I have revised the style-sheet to work with the new default style names.

.report {
font-family : sans-serif;
font-size : medium;
font-weight : bold;
color : #FFFFE0;
.table-group-header-1 {

background : #0B285B;
border-bottom : double;
border-top : solid;
border-top-width : thin;
border-color : #FFF8DC;
.table-group-header-2 {
background : #13449B;
border-bottom : double;
border-top : solid;
border-top-width : thin;
border-color : #FFF8DC;
font-size : small;
.table-header {
background : #6495ED;
border-bottom : double;
border-top : solid;
border-top-width : thin;
border-color : #483D8B;
.table-detail {
background : #F0F8FF;
font-size : small;
font-weight : bold;
color : #4682B4;
.table-footer {
background : #6495ED;
border-top : double;
border-bottom : solid;
border-bottom-width : thin;
border-color : #483D8B;
font-size : x-small;

I am hopeful that in the next edition, I can take a look at adding a bit of code to the report that will do more to automatically assign styles to reports, even if you are using custom styles. I will let you know when I get it done.

Friday, June 29, 2007

BIRT 2.2 Released

In conjunction with Eclipse’s Europa release BIRT 2.2 is now available. This release represents a significant improvement in features and functionality, including over 200 enhancements. Some of the more significant features include a new Cross Table element, that when constructed with the new data cubes technology allows the creation of dynamic tables with support for column and row aggregation, new emitters for XLS, PPT, DOC, and postscript formats, a new web service data access driver, improved charting with the addition of six new chart types, new web deployment wizards, and tag libraries for the BIRT web viewer and charting engine.

To read more about the new and improved features in BIRT 2.2 take a look at the New and Notable- BIRT 2.2

Monday, June 04, 2007

BIRT Release Candidate 0 New and Notable

With this release of BIRT many new features have been added. The Dynamic Cross Table element is now available as well as a new Web Service ODA. These features and many others are described in the New and Notable for BIRT 2.2 RC0. As part of documenting these features we have dropped a couple new examples into the wiki. For example:

Crosstab Example.

This example is available
here and is an example of using the new BIRT Cube technology in conjunction with the new Cross Table Element. In previous versions of BIRT cross tables could be created, but the number of vertical columns had to be known beforehand. This is no longer necessary, as this example illustrates.

Be sure to download the latest Release Candidate of BIRT and give the new features a try.

Tuesday, May 15, 2007

JFire and BIRT

JFire is a comprehensive Open Source ERP solution that uses BIRT for reporting. A couple of weeks ago at the Eclipse Forum Europe conference, I had the opportunity to look at what they are doing with BIRT. Not only do they include BIRT designs, they have gone as far as to include a customized version of the designer within their product. Alex Bieber demonstrated some of these customizations, including a workflow parameter entry builder and a customized editor for creating resource files for BIRT.

Below is a screenshot of the parameter workflow builder.

This feature effectively collects parameters in a cascaded fashion and ultimately passes the final value onto a BIRT report for generation. As displayed in the screenshot above, this builder is available as a new tab on the modified BIRT designer.

To read more on these customizations, go to the JFire site or checkout the JFire wiki entries for these features.

JFireReporting Parameter Acquisition

JFireReporting Localisation

Thursday, May 03, 2007

2nd Annual Open Source BI Survey

A survey is being conducted which I thought may be of interest to BIRT report developers. The results will provide valuable insights into awareness and trends in Open Source software adoption and usage, and as a participant you have the opportunity to ensure your opinions and experiences are included in the analyses. This survey is now in its second year so comparative results will also give some key insights into how perceptions, trends and adoption levels have changed in that period.

In return for taking part, you will receive a summary of the results from the full study. You will also have a chance of receiving one of five $100 Amazon vouchers. This survey will take about 5 minutes of your time. To get started, click here.

Monday, April 30, 2007

News on iText

The BIRT team just got word that the iText component has finished the intellectual property review process at the Eclipse Foundation. This means that you will now be able to download BIRT in one step and not have to add any additional controls.

Thanks go out to the Eclipse Foundation IP review team that have diligently worked through all of the code in the iText component helping us to make sure that the code was clean. A big thanks also goes out to the
iText team team that have worked through all of these issues.

The next releases of BIRT 2.1.3 and 2.2 RC0 will have the appropriate iText version bundled into the download.

Friday, April 27, 2007

BIRT Notes: April 27, 2007

Once again the primary focus has been on the new CrossTab. At the PMC, it was noted that the CrossTab should be in pretty good shape by the RC0 build mid-May.

The PMC also discussed supporting BIRT on additional OS platforms. Specifically Windows Vista and Mac OS-X were discussed. One of the goals for the 2.2.1 release will be to provide testing and validation guidelines so that we can have "Community Certified" Reference Platforms.

It looks like we are getting down to the last items in the iText IP review process. The foundation IP reviewers found a couple of remaining issues which have been fixed in the latest build of BIRT. If you are pulling BIRT from head, you will need to get iText 1.5.1 which is available at:

Here is the list of notable changes:

- ParamDef tag for WebTools
can help user to create report parameter and generate html code.

- Fix Hyperlinks to internal bookmark in excel emitter.

- Parameter Sort Issue (under Show Report Parameters) - 165025
1.On parameter dialog, when defing dynamic parameter place combos to let user choosing sort key and sort direction, place a check box to let user setting if allow duplicate values.
2.Redesign the layout of parameter dialog, keep the dialog not growing bigger while placing sort related controls.

- Support more than eight colors in the Palette
Rollback the change to update() method in Platte to keep backward compatibility and add new method shift() to support 32 colors in palette.

- Add Tube/Cone/Pyramid as chart Types Bugzilla: 181711

- Add a switch to determine whether to clean viewer image folder when session expires Bugzilla Bug 183919
Add a new URL parameter named __clean to indicate whether clean session temp files. Default value is true.

- Optimized transaction usage in model api to improve performance

- Change report item data binding to be named based
Make report item share data binding by the name. If the data binding reference property is set, it takes high priority than local values. Column bindings, filters, sorts, parameter bindings can be shared among report items by data binding reference.

- Use Default Values in cascading parameter group Bugzilla Bug 178682
When retrieve and show the cascading parameter value list, focus on the default value.

- Data engine changes to support result set sharing
A field needCache is added to Dte query definition show weather the result iterator need to be cached. If need cahce the data will be saved in temporary file before the result iterator is closed. The saved result iterator can be loaded by queryResultID.

Monday, April 23, 2007

Article on Sguil and BIRT

David Bianco is President of Vorant Network Security, which offer security training and consulting specializing in Network Security Monitoring and Incident Response. He blogs about Sguil, Snort, NSM, and other programming topics here.

His most recent article is about the use of BIRT to report on Sguild data, the actual description is on the Vorant wiki here. The wiki entry contains info on Tomcat setup, BIRT web viewer setup, and the the actual reports.

Thanks for sharing your experience combining Sguil and BIRT.

Tuesday, April 17, 2007

BIRT Notes: April 14, 2007

The new and notable for the M6 release includes for all of the new features in the new M6 build has been published on the BIRT web site. The work detailed here are for work that is done after the M6 release.

The number one focus for the development team continues to be the Cross-Tab control. In the M6 release, the cross-tab features are in place but they are definitely not ready for prime time usage. The RC0 build should have most of the major issues worked out from the cross-tab. In addition, new M6 features such as the Excel and Word emitter are marked as prototype since this is their first release.

Here is a list of some of the more significant development efforts for the week of April 7 - 14:

- Change CSStyleSheet API to make it easier to use:

- Bugzilla Bug (s) Resolved: Bug 179300
Added a new extension point IScriptableObjectClassInfo so that other report item plug-in developers can provide their extension for report item scripting UI. Meanwhile, provided adapters in api.metadata for UI aggregation feature and provided adapters in api.scripts for scripting UI.

- Chart UI Cleanup Categories: Bug 178725

1. Remove Category Series entry in FormatChart--Series page (except Pie chart).

2. Remove FormatChart--CategorySeries page for Meter chart.

- Fixes to the Report Engine Logging
Log Configuration was not used within the Report Engine.

- Allow sort bars in charts by Y value: Bug 170308

Support to specify sorting from properties pane for chart

- Chart Engine API Improvement
In DataProcessor, grouping for series is different according to series type. Now use extension IDataSetProcessor to avoid hardcoded data processing.

- BIRT Update Site
As of one of Europa M6 requirements, BIRT is using signed and pack200 update jars for update site now. Due to platform bug 163421 which was fixed only in Eclipse M6, you need to switch Eclipse M6 platform to use update site.

- Page Emitter Framework: Bug 180846
This is a new framework for page based emitters. Under this framework, algorithm of computing position is reused and emitters needn't to compute the absolute position by itself. Instead, it only needs to provide algorithm about how to create new pages and how to render items at specified position in a page.

- BIRT / Data Tools Downloads: Bugs 182051, 147419

Remove all DTP features/plugins from birt-framework/birt-framework-SDK zip files. Create new download package birt-dtp-integration which contains DTP bundles BIRT needs.

- Dynamic Parameters: Bugs 177439

Allow developer to select a default value for dynamic parameters.

- Model Simple API:

The chart and report engines are providing a new simple API for scripting. This code is being integrated into both the engines and the Model API.

BIRT Milestone 6 New and Notable

The New and Notable for Milestone 6 is now available. This milestone contains a fairly extensive list of new features, including Viewer improvements such as exporting the report to additional formats, TOC styling and server side printing. The new prototype XLS emitter is also available and we are looking for your feedback. To read about these features take a look at the New and Notable for Milestone 6.

To download Milestone 6 click here.

Friday, April 06, 2007

BIRT Notes: April 6 2007

You may have noticed that last weeks update was posted today. In the future, I am going to try and do this every week on Friday or Saturday. For this week, you get the special bonus of two weekly update in one week.

This weeks activities were primarily focused on fixes and enhancements to the CrossTab control which should be in the M6 build and to fixing any blocker bugs that would prevent the M6 build. I expect to see the M6 release candidate any time now and hopefully we will have a release for Monday.

Since I don't have a lot about new features to report, I thought I would provide some information about how I am compiling this list. Many of the committers for this project work for Actuate, I don't. We sometimes get questions about are communication channel, with the assumption being that most communication is done through private channels. The truth is that we work very hard to keep the BIRT development process as open as possible in accordance with the Eclipse Foundation guidelines. All of the information used to put this weekly status comes through the open channels. If you are interested in a complete description of the communication process please have a look at the this post on the BIRT home.

When ever one of the BIRT committers checks in code to one of the CVS repositories they send an email to the BIRT-DEV mail list. This week was a relatively quiet week with only 94 items entered over the last seven days. All of the developers use a standard template for the mail list. At the bottom of this post, I pick on one of our committers, Wei Wang, and show one of his submissions.

I scan the daily commits every day and can quickly see what the developers have been working on. Typically, must bug fixes do not make it into the weekly update. Those fixes that implement a major feature will also reference the BIRT Project Specification (BPS) and the bugs that are attached to it. Typically those are the issues that make it into the list. Now we all know that sometimes the developers are more interested in writing code rather than writing documentation about the code (not me of course), so in some cases I refer to the Bugzilla entry. Typically the BIRT committers do a really good job of describing their latest contribution to the project.

There are two other places that I get information about the project. First, the weekly Project Management Committee (PMC) meeting happens every Monday. At the PMC, we cover the most significant project issues and get a weekly status on the development efforts. The final place that I pick up information about the project is on the BIRT newsgroup. The BIRT newsgroup is a really great place to see how BIRT is being used and to get feedback on the project. Thanks to all of the awesome community members who have used the BIRT newsgroup.

If anyone has ideas on how I can improve this process, let me know.

- Summary:
Fix Bugzilla Bug 177695 --- Error occurs in JUnit test of in daily build 20070315

- Bugzilla Bug (s) Resolved:

- Description:
Fix Bugzilla Bug 177695 --- Error occurs in JUnit test of in daily build 20070315

- Tests Description :
Unit Test

- Notes to Build Team:

- Notes to Developers:

- Notes to QA:

- Notes to Documentation:

- Files Edited:

- Files Added:

- Files Deleted

- Wei Wang
Actuate Software(Shanghai) Co.,Ltd

BIRT Notes: March 31 2007

Howdy All,

I have been following the Aptana project and have noticed that they run a weekly update on their development efforts. I found this very useful, then it occurred as I was scanning the daily BIRT dev mailer that maybe we should do the same thing for the BIRT project. So what you are reading is the first week of an experiment where Jason Weathersby and I wrap up the weeks activities for the BIRT project.

This is still a bit of a work in progress, the amount of information that makes it in is still somewhat open. Basically, what I do is scan all the topics from the weekly PMC meeting, and read all of the birt-dev mail notes. If I see something interesting, I throw it in the list. I have not included the names of the committers that did the work, I will try to do that next week.

If you have any thoughts or comments, please let us know.

BIRT Notes: March 31, 2007

Support for Apple OS X
The PMC has started the process of providing support for OS X as one of our certified platforms. At this time we are looking for an appropriate partner(s) that will be able to perform testing on the Mac. We are in the process of identifying the specifics for the testing and in discussion with a couple of possible contributors. At this point, it appears that the major stumbling block will be the amount of manual testing that is required as part of the BIRT test procedure.

Process Pages Community member Daniel John Debrunner has been raising some interesting questions about the BIRT development process. We have provided documentation on the BIRT web site that outlines our development process so that it is more open to the rest of the community. Our goal is to build the BIRT product in the most open way that we can, hopefully our process allows the community visibility and access to the inner workings of the project. Please have a look and provide comments or questions.
BIRT Wiki - New Examples / Categories
As outlined in the previous post on this site, a significant amount of work has happened on the BIRT Wiki site, particularly in the examples area.

BIRT M6 Build
The M6 build is scheduled for next week. A lot of great new features have made it into the product and the developers are working on closing out approximately 70 open bugs over the next week. The most significant additions to the M6 build will be the addition of the CrossTab and the new Word and Excel emitters. The BIRT crosstab will be in the M6 build, but it is truly not ready for prime time yet, our target is to have the CrossTab ready for comments by the RC0 build, if you are interested have a look in the M6 build.

The following represent a list of Bugzilla fixes that represent a significant change in functionality.

  • New feature to allow row level filtering in the XPath mapping expression. (175347)
  • Add Export Report and Print report on the server functions in the Web Viewer. (175636, 158748). To turn off Print Server Side function, please set BIRT_VIEWER_PRINT_SERVERSIDE setting in web.xml to OFF.

  • Add “Report and Chart Design” view in core.ui. (BPS79, 173238)

  • Add support for the application of styles in the table of contents (numerous)
  • Support Date/Time data type in BIRT report engine. (177693)
  • Supports "isRequired" property on parameter dialog, drop the allownull and allowblank properties. If isRequired isn't checked, allow user to set null value to parameter. (156012)

  • Improved Log Support 147863 Add getLogger/setLogger to:
  • Chart Simple API (BPS66, 159514, 177282)
  • Improved Fit to Page for PostScript and PDF emitters
  • First version of incremental caching of BIRT data engine. In this version we do not support idea of persistent caching. We only support session based caching.

Thursday, March 29, 2007

BIRT Wiki Page Updates

The BIRT Wiki Page has been updated today. We have changed the top level page and added Wiki Categories to the BIRT pages. More importantly, we have opened up a new section for Community Example contributions. Have you ever done something in BIRT that you think other people would be interested in? Well now we have a place for you to put your code.

The full process is explained on the BIRT Examples page. I just wanted to highlight a couple of facts.

  • You need to login to the Wiki to make edits.
  • User logins are tied to your Bugzilla account.
  • Please use the template for any new pages which is shown here.
  • Make sure the title of your article includes the word (BIRT) at the end of the title.
  • Please apply the proper category tag at the bottom of the page.
  • Do not include slashes '/' or '' in the title. Wiki structure is flat, slashes imply a level of hierarchy that does not exist.

The proper Category tags are as follows:
For examples about how to create reports use:
[[Category:BIRT Example]]
[[Category:BIRT Example Report]]

For examples about how to integrate BIRT with other products:
[[Category:BIRT Example]]
[[Category:BIRT Example Integration]]

For examples about how to create BIRT extensions:
[[Category:BIRT Example]]
[[Category:BIRT Example Extension]]

Finally, only make contributions to the Wiki that meet the Eclipse contribution guidelines.

"You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see Project:Copyrights for details). DO NOT SUBMIT COPYRIGHTED WORK WITHOUT PERMISSION!"

Friday, March 23, 2007

Google Co-Op To Search For BIRT

Many of you know that I love all things Google. A couple of weeks ago I read about the public release of Google Co-Op. In a nut-shell I can create custom made searches that look only in the domains that I specify, or at least favor those domains. This means that my search is more likely to return BIRT specific information.

As an example, go to a standard google search page and type in the term "Driver Bridge". I get at least ten pages of data and virtually all of it is not related to BIRT. Now do the same on the BIRT custom search on the right hand side bar of this blog. The search returns only the three items about the BIRT driver bridge. (I only search the sites that I have specified).

But wait theres more:
- Google Co-Op supports collaboration. If anyone is interested in adding additional sites to the BIRT search, let me know and I will let you collaborate and add your own sites.

Give it a try and let me know what you think.

NOTE: You will not see this functionality getting added to the main BIRT web site. The terms of use for Google Co-Op are written in a way that the Eclipse Foundation would open itself up to significant liability if the foundation hosts the search. We went through the legal review process with the Eclipse Foundation, there is no way this is going to get added to the Eclipse Foundation site. Yes, I have thrown down the gauntlet there, I would love it if someone can figure out a way to prove me wrong. Google Terms of Service is here.

Wednesday, March 21, 2007

Google Summer of Code - OpenMRS Project

Justin Miranda posted to the BIRT Newsgroup announcing this project yesterday and this looks like a very good cause and opportunity.

He will be mentoring a project that integrates open source reporting tools into OpenMRS. OpenMRS is a successful open-source project that provides an electronic medical record system for developing countries.

More information can be found on his blog.
Have a look.

BIRT/Actuate Webinar

Just wanted to place a reminder that Virgil Dodson and I will be doing a webinar next week on Eclipse BIRT and how Actuate is extending the technology.

We will be discussing the Designer, the APIs and the deployment options that are available. Hope you can join us.

For more information click

Sunday, March 11, 2007

BIRT Milestone 5 New and Notable

The New and Notable for milestone 5 is now available. This milestone contains many improvements to the Charting Package and the example Web Viewer. Additionally PostScript output is now supported.

As part of compiling the new features, I designed a report that would make use of the script tag within a Text element. This report executes every 10 seconds and alters what is rendered based on some check boxes within the report.

Each check box is built similar to the following code implemented in a Text element.

<form name="cbform">
<input type="checkbox" name="mycheckbox" <VALUE-OF>if( params["hideOfficeCodeLabel"].value){
}</VALUE-OF>>Hide Office Code</input>

The check box is linked to a report parameter, which in turn is tied to the visibility property of a column in the report.

The report contains a script function called reloadPage, which builds a new
URL based on the check boxes and reruns the report every ten seconds. This function was created in the first Text element of the report.

<form name="input" onSubmit="return reloadPage();">

<script type="text/javascript">

function reloadPage() {
var temp = new String(location.href);
var targetURL = new String();
var altchart = "1";

if( temp.indexOf("&altchart=1") != -1){
altchart = "2";
altchart = "1";
if(temp.indexOf("__overwrite=") != -1 ){
targetURL = temp.substring(0, temp.indexOf("&__overwrite") -1);
targetURL = temp;

targetURL += "&__overwrite=true";
targetURL += "&hideOfficeCodeLabel=" + document.cbform.mycheckbox.checked;
targetURL += "&hideCityLabel=" + document.cbform2.mycheckbox.checked;
targetURL += "&hideStateLabel=" + document.cbform3.mycheckbox.checked;
targetURL += "&hideCountryLabel=" + document.cbform4.mycheckbox.checked;
targetURL += "&altchart=" + altchart;


return false;
timer=setTimeout('reloadPage()', 10000);


Finally a chart was added to the report which displays Product Line or Product details based on the altchart parameter set in the reload script. This was accomplished by using the DE API within the beforeFactory script to swap the chart data set as shown below.

graph = reportContext.getReportRunnable().designHandle.getDesignHandle().findElement("Chart1");
var request = reportContext.getHttpServletRequest();
if( request.getParameter("altchart")){
altchart = request.getParameter("altchart").toString();
if( altchart == "2" ){
graph.setProperty( "dataSet", "graph2" );
graph.setProperty( "dataSet", "graph1" );


This report can be downloaded here.

Friday, February 16, 2007

Using the BIRT Source Build

In the previous post, I mentioned that I have been doing a fair amount of extension development in preperation for the conference. In the past, I have always pulled all of the BIRT source from CVS when I did extension or integration work. The ability to step through the source code in the calling methods proved to be really helpful. The only problem was the amount of work required to pull and compile a source build. Between DataTools and BIRT there are more than 100 Eclipse projects, not including any of the test projects. That is a lot of download/configuration.

For this latest round of development, I decided to use the source builds from BIRT and DataTools to see how well it worked. The answer is it worked really well. So I thought I would provide a quick HowTo in case you are interested in using BIRT in this way.

I wanted to work with the BIRT M5 Release, which has not been officially release but is scheduled to be the 20070209 build. To get to this build I went to the BIRT/downloads and selected the Recent Builds Page from the More Downloads section. Then I select the build that I want to download 2.2.0-N20070209. From this page I get the
- All-In-One and the BIRT SDK build. I first unzip the All-In-One and then I unzip the BIRT SDK build over the top of the All-In-One.

Typically this would be the place where I would go out and create a launch icon with the appropriate memory triggers. It turns out that the M5 build uses the eclipse.ini to setup various command line options. Using eclipse.ini will set the MaxPermSize vmarg which will make your Eclipse installation run significantly faster. You can continue to use your command line args, but it seems to be easier to just use the eclipse.ini. I have a lot of memory on my workstation so I use:


Normally I test that the SDK is working by opening the Eclipse instance and type <CTRL><SHIFT><T> and enter ReportEngine. If when you select the ReportEngine it shows source code, then you have an SDK build of BIRT. So everything is good to go right? Well almost, you still need to get the SDK build from the DataTools project.

BIRT 2.2 is using the DTP 1.0 build. If you get the dtp-sdk_1.0 build and install it over your current Eclipse installation, then you are ready to go.

The only piece missing from the puzzle is the ReportEngine code. It turns out that the libraries and code that is distributed with the RunTime libraries does not include source. Unfortunately the packaging of the files in the RunTime libraries is different (similar) from the Eclipse distributions. I have submitted a Bugzilla entry to have a SDK version of the RunTime distribution created. Once I have that, it will be far easier to support multiple versions of BIRT without having to have check outs from each.


Wednesday, February 14, 2007

Emitter Extension Enhancement - BIRT 2.2

I have been working with the new M5 release of BIRT 2.2 for a presentation on extensions at EclipseCon next month. One of the extension points that I will be featuring is the Emitter extension. The M5 release of BIRT has made a significant enhancement to the emitter extension that I wanted to cover in brief today.

In the past emitters were relatively straight-forward: you create a class that extends that either a) implements IContentEmitter or b) extends ContentEmitterAdapter. Within that class you place code to write to an output (stream, file, etc.) and then you visit the various ReportItem components writing the value of the component and any additional information required by your emitter (HTML, PDF, RTF...) It is not an easy task, but it is relatively straight-forward.

The problem would come up when it came time to use your new emitter. It turns out that the ReportEngine code that created and invoked the emitter needed to be modified/patched to add your emitter. This required changing the base Eclipse code and the addition of some new classes. Then this code needed to be re-distributed to the appropriate locations. Not difficult stuff, but not particularly clean. It just made it more difficult for people to use your emitter. So rather than focusing on your emitter code, you had to worry about writing HOW TO IMPLEMENT documentation. Ewwww documentation....

In BIRT 2.2, starting with the M5 build, new emitter plugin extension gets picked up and used automatically. All you have to do is make sure your jar file is in the plugins directory of either the WebViewer (WEB-INF/platform/plugins) or the ReportEngine (/plugins).

I hope to have a demo of this functionality up on either this site or the BIRT Eclipse site some time after the conference.


Monday, February 05, 2007

EclispeCon Recommended Tracks

EclipseCon is one month away. If you have not registered, now is the time to take care of it at the EclipseCon site. The quality and diversity of this years talks is truly amazing. There really is something for everyone. In the world of reporting, you have four tutorials, five long talks, two demos and three short tutorials to choose from. I have created my recommended track list, which you can review on the EclipseCon site here. Or you can just read on.

NOTE: I will be a the Actuate Booth for most of the day on Tuesday and Wednesday between sessions. Drop on by and say hi.

Monday - Tutorial day
New To BIRT? Then the all day tutorial Building Reports with BIRT will provide a great intro to BIRT.

Advanced BIRT? If you have been working with BIRT for a while and are looking to get into some deeper details of the BIRT framework, there are four excellent tutorials.
08:00 - 10:00 Open Data Access - Extension framework for adding Custom Data Sources
10:30 - 1230 Eclipse Chart Engine API and Integration
13:00 - 14:00 Extending BIRT
14:20 - 16:30 Report Integration - The BIRT API's

09:00 Scott Adams Keynote This should be really good.
10:10 What's New For BIRT 2.2 Jason Weathersby introduces all of the great new features in this summers 2.2 release.
11:10 Extending WTP Using Project Facets or panel Eclipse RCP: Experiences along the way no, its not BIRT but both of these look good to me.
13:30 BIRT: Introduction to the Eclipse Business Intelligence & Reporting Tools Project Paul Clenahan provides an intro to the whole BIRT project.
14:30 Experiences of a DTP Adopter DTP is like a sister project to BIRT, this presentation from an Oracle developer promises to be interesting.
15:30 Building the 100 Bundle Application This OSGi presentation should be very interesting to anyone using Eclipse component based development.
16:30 RCP with Eclipse, Mozilla and OpenOffice: the giant mashup The idea of combining Eclipse projects to make something that is larger than the sum of its parts is a favorite topic of mine.

09:00 Robert Lefkowitz Keynote
If you don't know rOml, here is a comment from his OSCON key note. "This was a fantastic keynote. He started with a tomato and eventually wound his way around a discussion of the quantification of open source. It was hillarious and interested…fantastic."
10:10 How to Easily Integrate BIRT Reports into your Web Application Rima Kanguri takes you through the WTP BIRT project, a new feature for 2.2
11:10 Charting with Eclipse BIRT David Michoneau provides an overview of his two hour tutorial on charting.
13:30 What sucks about Eclipse normally, I am not a big fan of panels, but this looks fun.
14:30 RAP - Eclipse style development for the web Using RCP to build web apps, this I have to see.
15:30 Following the Data: Eclipse Data Tools Platform Another panel
16:30 UI Testing in the Real World: Myths and Realities A third panel, maybe I do like panels.

9:00 Herbert Thompson Keynote
10:10 Integrating Java Code with Eclipse BIRT Peter Ivmark the project lead for scripting takes you through BIRT script / java interaction.
11:10 Dynamic BIRT Reporting John Ward and I show how to make add dynamic features to your BIRT reports.
13:30 Migrating a Visual Studio Product to Eclipse This is a talk by the Business Object developer tasked with migrating from Visual Studio to Eclipse.
14:30 STP Components - Using and Extending the SOA Tools Platform Project Is there a way to leverage STP to deliver BIRT as an SOA?
15:30 Eclipse Community Project Spot Light Where is Eclipse headed, here is your to see what the PMC leads see in the future.

Thursday, February 01, 2007

Eclipse BIRT 2.2 Webinar

Just wanted to drop a reminder that we will be doing a BIRT Webinar next week.
We will cover creating and deploying a BIRT Report. In addition we will be discussing and demonstrating some of the the 2.2 Features. For more information check out Eclipse Webinars.

Friday, January 19, 2007

BIRT 2.2 Milestone 4 Features

The BIRT Team released milestone 4 of the BIRT 2.2 release a this week.
The project is proceeding well. In this milestone we now have a BIRT tag library that allows embedding the BIRT Viewer in an existing web application complete with the ability to create a custom requestor page. This feature along with the BIRT Web Project should help with deployment of BIRT reports.

BIRT now leverages the WTP XML editor to display the XML for a report design within the Designer perspective. It is nice to see project cross-pollination in action.

The Word Emitter is now available for review. It is still early, but this project is shaping up well. Download the M4 release and have a look. Remember M4 requires the Eclipse 3.3 stack, which has a minimum requirement of Java 1.5.

To read more about the Milestone 4 release, read the
New and Notable.

Tuesday, January 16, 2007

BIRT Connection Pooling Continued

Since writing a post on using a supplied connection with BIRT, many changes have occurred in the BIRT Project. Specifically connection pooling has been addressed with a JNDI property. This property can be set when using a JDBC data source.

To see how this can be used with Tomcat, see the

If this does not meet your needs, the Data Tools project now supplies an extension point that can be used to alter the behavior of the standard BIRT JDBC driver. This extension point named org.eclipse.datatools.connectivity.oda.consumer.driverBridge can be implemented to intercept calls made to the JDBC driver and override the standard ODA calls like getConnection. If a user did not wish to use JNDI for connection pooling, but wanted to supply a connection through another means, this could be implemented using this extension point.

The driverTye and bridgeId attributes must be supplied for the extension point. The driverType specifies the ODA driver to which the bridge is applied. For the JDBC driver this should be set to
The bridgeId specifies the element id of the extension that implements the ODA runtime. When using this to change the behavior of the JDBC driver this should be an extension that extends the JDBC runtime.

If you are using the Report Engine API to run reports, a connection object can be passed to engine using the application context as follows:

//Report Engine API snippet
HashMap contextMap = new HashMap();
contextMap.put( EngineConstants.APPCONTEXT_HTML_RENDER_CONTEXT, renderContext );

//add the connection object to the map
contextMap.put( "", myconnectionobject );

task.setAppContext( contextMap );

A plug-in could then be created that implements the driverBridge extension point
to retrieve and use this connection. This plug-in would implement two extension points. The first should be the driverBridge and have values similar to the following:



The driverType specifies that the bridge will be applied to the BIRT JDBC driver.
The bridgeId specifies an element id of testjdbc, which can be defined in the same plug-in.

defaultDisplayName="Sample Driver Bridge"

This extension must implement the org.eclipse.datatools.connectivity.oda.dataSource
extension point. This is the runtime portion of an ODA driver. Because this bridge is being applied to the BIRT JDBC driver we can just extend the OdaJdbcDriver and change the behavior of the setAppContext and getConnection methods. The code below illustrates retrieving the connection from the application context. If the connection object does not exist in the application context, the default JDBC driver is used to retrieve the connection. This will allow the plug-in to be used within the designer using the credentials supplied in the Data Source editor and when deployed to an application that supplies the connection through the application context.

import java.sql.Connection;
import java.util.HashMap;
import java.util.Properties;

import org.eclipse.datatools.connectivity.oda.IConnection;
import org.eclipse.datatools.connectivity.oda.OdaException;

public class MyJdbcDriver extends OdaJdbcDriver {

private Connection passedInConnection;

public void setAppContext( Object context ) throws OdaException
HashMap ctx = (HashMap)context;
passedInConnection = (java.sql.Connection)ctx.get("");


public IConnection getConnection(String connectionClassName) throws OdaException
if( passedInConnection != null){
return new appContextDBConnection();
return new;

private class appContextDBConnection extends

public void open(Properties connProperties) throws OdaException
super.jdbcConn = passedInConnection;


public void close( ) throws OdaException
if ( jdbcConn == null )
//should have call to return connection to the pool
jdbcConn = null;


The source for this plug-in is available here.