问题描述
对于运行时间超过30分钟以上的报表,使用SDK方式运行该报表,超过一定时间时抛出以下错误:
Exception in thread "main"
AxisFault
{http://xml.apache.org/axis/}stackTrace:java.net.SocketTimeoutException: Read timed out
原因分析及解决方案:
1. 报表运行时间过长、reportservice超时
原因:
官方提供的jar包接口中的reportservice服务超时,内部超时机制不够完善。
解决方案:
1. 如果是运行和查询报表,对于运行时间较长的报表,建议使用view(url)方式运行报表,将报表服务请求直接发给cognos系统服务。
2. 如果是后台运行并保存报表,参考IBM官方提供的设置报表服务永不超时的方法:
ReportService_ServiceLocator
serviceLocator = new ReportService_ServiceLocator();
ReportService_PortType
reportServie = serviceLocator
.getreportService(new
java.net.URL(gateway));
((Stub)reportServie).setTimeout(0);
详情请参考:http://www-01.ibm.com/support/docview.wss?uid=swg21338818
设置以后将不会报超时错误,可解决后台保存报表超时的问题。附上IBM官方提供的另存报表到磁盘的java代码:
IBM官方附件见下文
2. session超时。
原因:SDK获取报表服务后,长时间的无操作导致服务超时。
解决方法:在websphere中,应用服务器-》单个服务器-》回话管理-》回话超时中进行设置并延长超时时间。(需要重启COGNOS服务)
3. 系统配置超时时间过段
原因:在cognosadministration系统配置中,空闲连接超时(以秒计)、报表服务排队时间限制(秒数)、报表服务的最长执行时间(秒数)三项设置的时间过短。
解决方法:进入cognosadministration ,选择系统,设置,下拉框选择调整,修改三项数值:
设置好合适的时间即可。(需要重启COGNOS服务)