常见部署问题之数据库连接类问题总结
解决过程
定位问题—问题发生位置(应用/数据库)
通过不连接数据库的测试报表判断问题的位置
分析问题—问题可能的原因
根据问题现象列出可能的原因
处理问题—排查,测试,解决
逐一排查原因,进行本地测试并解决问题
流程图
问题进入后,先用不连接数据库的报表测试应用是否部署成功,然后用设计器连接数据源判断问题是发生在web服务器上还是数据库上,最后通过具体的问题现象,找出原因并解决问题.
问题现象特征
包含“产生数据集工厂失败”、”请检查数据源设定”等报表关键字
包含”ORA-00257”,”java.sql.SQLException”等数据库关键字
在包含有以上关键字的问题,我们可以初步定位为数据库连接类问题,并据此来进行问题排查测试处理过程.
数据库连接类问题产生的原因
数据库环境配置错误
应用服务器连接池配置错误
reportConfig.xml中数据源配置错误
与客户具体环境相关问题
以上原因按照顺序排列,是根据问题从外到里的排查顺序而定.最外侧是数据库,然后是应用服务器,接着是报表内.
按照这样的顺序进行排查,方便准确定位问题所在.不易漏掉可能产生问题的位置.
常见问题
数据库环境配置错误
数据库本身连接不通
JDBC驱动包放置位置错误
数据库的jdbc驱动包需要放置在web服务器的指定目录下.
例如:
Tomcat中,数据库驱动包放置在common\lib下.
Weblogic中, 数据库驱动包放置在server\lib下.
Websphere中, 数据库驱动包放置在WebSphere\AppServer\lib下.
问题现象:
产生数据工厂: com.runqian.report4.dataset.SQLDataSetFactory 失败错误来源:
Cannot load JDBC driver class ’oracle.jdbc.driver.OracleDriver’ 错误来源:Cannot load JDBC driver class ’
解决办法:
此问题是由于数据库驱动没有放置到正确目录下而放到了应用中的web-inf\lib下.
由于此问题是出现tomcat服务器,所以把驱动放置到common\lib下解决.
连接池配置错误
配置文件中配置项写法错误(driverName/url/username/password等)
数据库版本差异
服务器版本差异
问题现象:
产生数据工厂: com.runqia .report4.dataset.SQLDataSetFactory败:GBK; 错误来源:GBK; at com.runqian.report4.dataset.SQLDataSetFactory.createDataSet(UnknownSource:225)
at com.runqian.report4.model.CalcReport.calcDataSet(Unknown Source:158)
解决办法:
查看此问题异常,产生数据工厂: com.runqian..report4.dataset.SQLDataSetFactory 失败: GBK; 由此分析是由于数据库连接失败造成的,而且与字符集配置有关系.
检查连接池配置,发现url的配置中多了一个分号。去掉后,问题解决。 url = jdbc:JTurbo://127.0.0.1/pubs/charset=GBK;
问题现象:
产生数据工厂: com.runqian.report4.dataset.SQLDataSetFactory 失败错误来源:: Cannot load JDBC driver class ‘com.microsoft.sqlserver.jdbc.SQLServerDriver’ 错误来源:Cannot load JDBC driver class ‘com.microsoft.sqlserver.jdbc.SQLServerDriver’
at com.runqian.report4.model.CalcReport.calcDataSet(Unknown Source:317)
解决办法:
此问题原因是由于sqlserver2000和sqlserver2005中,driverName和url的形式不同导致.
sqlserver2000中:
DriverName: com.newatlanta.jturbo.driver.Driver
url: jdbc:JTurbo://192.168.0.1/DBName/charset=GBK
在sqlserver2005中:
DriverName: com.microsoft.sqlserver.jdbc.SQLServerDriver
url: jdbc:sqlserver://192.168.0.1:1433;DatabaseName=DBName
问题现象:
部署后浏览报表出错,异常信息如下:
javax.servlet.ServletException: No report config file!
at com.runqian.report4.view.ReportServlet.loadConfig(Unknown Source:75)at com.runqian.report4.view.ReportServlet.reloadConfig(Unknown Source:823)
解决办法:
此问题常见去Tomcat 6.0版本中.
由于Tomcat 6.0与Tomcat 5.0在数据库连接池配置文件写法上有差异导致.
在Tomcat5.0中的数据量连接池文件写法为:
而在tomcat6.0中的写法是:
reportConfig.xml中数据源配置错误
datasource配置错误
数据源名字不统一
问题现象:
产生数据工厂: com.runqian report4.dataset.SQLDataSetFactory 失败 : 数据集中,数据集ds1 中未设定数据源名称,且无默认数据源,请检查数据源设定。
解决办法:
此问题是由于在reportconfig.xml中没有设置数据源.
在reportconfig.xml中数据源的配置方法是:
dataSource demo,oracle,GBK
数据源配置的格式如下:
数据源的JNDI名称,数据库类型[,取数时是否需要转换编码,数据库字符集编码,显示报表时的字符集编码][,SQL是否需要转码];[重复]……
问题现象:
产生数据工厂: com.runqian .report4.dataset.SQLDataSetFactory 失败 : 数据集ds1中,数据源demo无数据库连接,且未设定数据连接工厂,请检查数据源设定
解决办法:
此问题是由于: 报表的数据集中设置了数据源,但与服务器设置的数据源名称不统一导致.
需要特别注意:
在部署的过程中,我们要强调”三点一致”.所谓的三点一致就是报表模版中数据集选择的数据源名字、reportConfig中配置的数据源名字与数据库连接池配置文件中的数据源名字要统一.
与客户具体环境相关问题
框架问题
很多流行的框架都可与报表集成:
struts
jsf
spring
hibernate
问题现象:
客户使用spring+hibernate+jsf框架。集成报表后无法获取数据源
解决办法:
在jsp中获取到应用的数据库连接,用我们提供的方法设置数据源,写入到context中,在标签中用contextName()接收.
同时,也可参考ros上的相关文章或问题记录.