在 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