經過BIRT報表工具開發出來的報表,在運行時每每是走一個統一的生產環境數據源,可是開發時每每是一個開發測試用的數據源,這就 須要隨時可以在兩個環境下進行切換。目前針對這個問題,公開可檢索到的資料,基本上是經過數據源的beforeopen事件,經過寫腳本的方式解決,這個 方式仍是比較複雜,在報表數量較多,開發人數較多時,開發人員須要注意的地方仍是有些多,並不完美。本文的處理方式,將可以根本性的解決該問題。java
不能在報表製做上作文章了,這樣要麼須要大量修改報表文件,要麼須要每一個報表繼承一個公共的庫文件,只能在BIRT的開放API上想辦法了。經過研究BIRT的源代碼,找到了以下解決方案,基本上完美的解決了這個問題。app
IReportEngine birtEngine = ...; IReportRunnable runnable = birtEngine.openReportDesign(...); IRunAndRenderTask runAndRenderTask = birtEngine.createRunAndRenderTask(runnable); Map appContext = runAndRenderTask.getAppContext(); Connection conn = ...; appContext.put(IConnectionFactory.PASS_IN_CONNECTION,conn);
這個方案須要在運行時手工獲取鏈接,而後還須要注意處理鏈接的關閉等問題。工具
這個方法已經在BIRT的4.2系列和4.4系列測試經過,BIRT的其餘版本未驗證。
測試
其實,這個appContext是BIRT的一個重要的開放擴展接口,經過它能夠對BIRT的不少功能進行擴展和自定義。
code