birt runtime 使用共享數據源JNDI
在 BIRT Report 中使用 JNDI 數據源 時,必須確保 BIRT 正確引用了 Tomcat 中定義的 JNDI 數據源。下面是 JNDI URL 在 BIRT 中的配置方法。
? 1. 確保 Tomcat 中已正確配置 JNDI 數據源
確保你已經在 context.xml 文件中定義了 JNDI 數據源,例如:
路徑
$TOMCAT_HOME/conf/context.xml
示例配置
<Resource name="jdbc/odooDS"
auth="Container"
type="javax.sql.DataSource"
driverClassName="org.postgresql.Driver"
url="jdbc:postgresql://localhost:5432/odoo"
username="your_db_user"
password="your_db_password"
maxTotal="20"
maxIdle="5"
maxWaitMillis="10000"/>
?? 注意事項:
name="jdbc/odooDS":這個名稱需要與 BIRT 中的 JNDI URL 保持一致。- 數據庫驅動:確保
driverClassName正確,例如:- PostgreSQL:
org.postgresql.Driver - MySQL:
com.mysql.cj.jdbc.Driver - Oracle:
oracle.jdbc.OracleDriver
- PostgreSQL:
- 確保 JDBC 驅動已放入 Tomcat 的 lib 目錄:
$TOMCAT_HOME/lib/postgresql-<version>.jar
? 2. 在 BIRT Report 中配置 JNDI 數據源
步驟一:打開 BIRT Report Designer
- 在 Eclipse 中打開你的 BIRT 報表項目。
- 打開你的 .rptdesign 文件。
步驟二:添加 JNDI 數據源
- 右鍵 -> Data Sources -> New Data Source。
- 選擇 JDBC Data Source,然后點擊 Next。
- Data Source Name:輸入一個自定義名稱(如
OdooDS)。 - 選擇 JNDI 數據源,勾選 Use JNDI Data Source。
步驟三:填寫 JNDI URL
在 JNDI URL 輸入框中填寫 Tomcat 中定義的 JNDI 數據源名稱,例如:
java:comp/env/jdbc/odooDS
?? 注意:
java:comp/env/是 Tomcat 中 JNDI 數據源的默認前綴,jdbc/odooDS 是你在context.xml中配置的name值。- 如果你的 JNDI 名稱是其他值,比如
jdbc/myDataSource,則改為:
java:comp/env/jdbc/myDataSource
? 3. 在 BIRT 服務器環境中引用 JNDI 數據源
檢查 web.xml
確保 BIRT Web 應用的 web.xml 文件中正確聲明了 JNDI 數據源。
路徑:
$TOMCAT_HOME/webapps/birt/WEB-INF/web.xml
示例配置:
<resource-ref>
<description>Odoo Data Source</description>
<res-ref-name>jdbc/odooDS</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
? 4. 重啟 Tomcat 并測試報表
- 重啟 Tomcat:
sudo systemctl restart tomcat
- 訪問 BIRT 報表,確保數據源連接成功。
? 5. 排錯指南
如果報錯,檢查以下幾點:
| 錯誤信息 | 原因 | 解決方案 |
|---|---|---|
javax.naming.NameNotFoundException |
BIRT 找不到 JNDI 數據源 | 確保 context.xml 和 web.xml 名稱一致 |
ClassNotFoundException |
JDBC 驅動未加載 | 確保驅動放入 $TOMCAT_HOME/lib 目錄 |
CannotCreatePoolException |
數據庫連接失敗 | 檢查 URL、用戶名、密碼是否正確 |
NullPointerException |
JNDI 數據源未正確初始化 | 確保數據源名稱、JNDI URL 一致 |
你可以通過以下命令檢查 JNDI 綁定情況:
tail -f $TOMCAT_HOME/logs/catalina.out
本文來自博客園,作者:那時一個人,轉載請注明原文鏈接:http://www.rzrgm.cn/qianxunman/p/18762337

浙公網安備 33010602011771號