BIRT 報表開發期常用 JDBC 直連測試,正式部署建議切換至 JNDI DataSource,由容器管理連線池,提升效能與穩定性。本文說明 Tomcat + BIRT 整合步驟。
在專案 META-INF/context.xml 定義資源:
<Resource name="jdbc/travel_agency"
auth="Container"
type="javax.sql.DataSource"
maxActive="20"
maxIdle="10"
maxWait="-1"
username="itravel"
password="709394"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://192.168.1.100/travel_agency"/>
web.xml 宣告資源參考:
<resource-ref>
<res-ref-name>jdbc/travel_agency</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
報表設計檔 (.rptdesign) 的 XML 片段:
<data-sources>
<oda-data-source extensionID="org.eclipse.birt.report.data.oda.jdbc"
name="資料源" id="227">
<property name="odaDriverClass">com.mysql.jdbc.Driver</property>
<property name="odaURL">jdbc:mysql://192.168.1.100/travel_agency</property>
<property name="odaUser">itravel</property>
<encrypted-property name="odaPassword" encryptionID="base64">NzA5Mzk0</encrypted-property>
<!-- 關鍵:指定 JNDI 名稱 -->
<property name="odaJndiName">java:comp/env/jdbc/travel_agency</property>
</oda-data-source>
</data-sources>
執行邏輯:BIRT 先嘗試 JNDI,失敗才回退 JDBC,開發/生產環境無縫切換。
BIRT 要求密碼加密存放,提供 Java 產生器:
package com.hollycrm.birt.security;
import java.io.*;
import sun.misc.BASE64Encoder;
public class CreateBirtBase64Password {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.print("請輸入需加密字串:");
String pwd = br.readLine();
if (pwd != null) {
String enc = new BASE64Encoder().encode(pwd.trim().getBytes());
System.out.println("原始:" + pwd + "\nBase64:" + enc);
}
}
}
執行後將輸出值填入 odaPassword。
mysql-connector-java.jar) 放入 tomcat/lib。