2011-11-08 75 views
2

我們使用birt 2.6.2報告在我們的tomcat託管的web應用程序中顯示報告。我們有一個reporting.rptlibrary文件,其中包含一個<data-sources><oda-data-source> xml元素。隨後,所有報告設計都參考reporting.rptlibrary。這很麻煩,因爲每次部署應用程序時,我需要更改reporting.rptlibrary以使用正確的jdbc連接信息。使用birt報告引擎設置jdbc連接的定製方法

我們的應用程序已設置爲使連接對象存儲在靜態字段中,並且應用程序在運行時直接訪問該字段。有沒有辦法配置birt使用位於靜態字段中的連接對象?

我見過this blog post,它看起來與我正在尋找的最接近,但是這篇文章是在2005年編寫的,它說我需要創建一個eclipse插件,這看起來不太合適爲一個Web應用程序。

我也看到一些關於使用連接池與birt的帖子,但我們沒有使用連接池。

如果能幫助解決這個問題並且不需要大量的遷移工作,我願意升級到birt 3.7。

回答

3

對於報表從Java代碼運行,這裏是2.6.2和3.7.0的工作解決方案:

import org.eclipse.birt.report.engine.api.IRunAndRenderTask; 
import java.sql.Connection 
... 
IRunAndRenderTask task; //or IRunTask, when run+render invoked separately 
Connection connection; 
... 
Map<String, Object> appContext = task.getAppContext(); 
appContext.put("OdaJDBCDriverPassInConnection", connection); 
appContext.put("OdaJDBCDriverPassInConnectionCloseAfterUse", false); 
task.setAppContext(appContext); 
... 
task.run() 

連接是傳入的報告,並替換/隱藏在報表設計中定義的所有JDBC連接。

+0

這不是隱藏數據源在我.rptlibary文件中聲明。對此有何建議? –

+0

看來,那些失敗的不是從java端運行。我會繼續尋找。 –

+0

這個連接仍然沒有被使用(至少在使用「dbprofile」數據源時)。我無法理解這種技巧在哪種情況下可以工作(使用來自maven倉庫的BIRT runtime 3.7.2.v20120214-1408)。 – Donatello

1

嘗試這種在XML

<data-sources> 
     <oda-data-source extensionID="org.eclipse.birt.report.data.oda.jdbc" name="fitupvisualdatasource" id="365"> 
      <list-property name="privateDriverProperties"> 
       <ex-property> 
        <name>metadataBidiFormatStr</name> 
        <value>ILYNN</value> 
       </ex-property> 
       <ex-property> 
        <name>disabledMetadataBidiFormatStr</name> 
       </ex-property> 
       <ex-property> 
        <name>contentBidiFormatStr</name> 
        <value>ILYNN</value> 
       </ex-property> 
       <ex-property> 
        <name>disabledContentBidiFormatStr</name> 
       </ex-property> 
      </list-property> 
      <property name="odaDriverClass">org.postgresql.Driver</property> 
      <property name="odaURL">jdbc:postgresql://localhost:5432/acctsql_whs</property> 
      <property name="odaUser">apoel</property> 
      <encrypted-property name="odaPassword" encryptionID="base64">cXdlcnR5</encrypted-property> 
     </oda-data-source> 
    </data-sources>