2015-10-07 32 views
0

我们的项目使用Business Objects进行报告。我们的java webapps发布报告通过我们设置的Web服务来处理我们想要启动它们的业务规则。工作很好...只有一个皱纹。Crystal Report java库,登录永久挂起

BO似乎是大量不可靠的。在夜间定时重新启动之后,这个事情经常发生或者无法启动。我们的行动团队已经习惯了这种生活的事实。

但是这影响到我在java团队中的部分是我们的webservice尝试登录到BO,而不是像我们应该那样计时或错误,BO java库永远挂起。显然它是连接到一个半开始的BO,并且永不放弃。

环顾互联网,看起来其他人都经历过这种情况,但我看到的所有内容都没有建议如何在登录过程中设置超时,以便如果失败,Web服务不会永远锁定(这反过来会导致我们的应用服务器变得不稳定)。

连接非常简单:

session = CrystalEnterprise.getSessionMgr().logon(boUserName, boPassword, boServerName, boSecurityType); 

所有我正在寻找一些方法来确保如果BO死了,我的web服务不会因此死亡。超时...一种方法可以可靠地检测BO在尝试登录之前是否未开始健康。我们的BO“专家”似乎并不认为他们可以对BO的不稳定性做任何事情,他们对Java库的了解甚少。

想法?

回答

0

Java SDK没有详细说明如何在调用logon时定义超时。我只能假设这意味着它回落到默认的网络连接超时。

但是,如果建立了连接但SDK未收到所需信息(并且一直在等待答案),则永远不会达到网络超时,因为这是应用程序问题,而不是网络问题。

因此,唯一彻底的解决方案是处理BusinessObjects平台中的不稳定性(为此,您应该创建一个单独的问题并更详细地描述问题)。

如果这不是一个选项,另一种可能是推出一个单独的线程连接尝试和自己实现一个暂停,注销线程当达到预定义的超时和可选重试连接尝试几次。

请记住,虽然初始登录可能会成功,但您的问题中描述的不稳定性可能会导致其他问题(例如,由于导致您的logon调用挂起的相同问题,不同的SDK调用可能会永久挂起) 。

同样,唯一好的解决方案是查看您的平台不稳定性的的根本原因。

+0

谢谢,线程的想法是一个很好的,我们一定会考虑这一点。我们知道,当我们的夜间数据库备份运行时间过长时,会出现不稳定情况,BO会对此进行嘲讽。我们的操作人员似乎只是按照计划强制重启。他们似乎对追求超越这一点并不感兴趣。从我们的应用程序中获得更优雅的失败,这样包含的感染就像我可以强制的解决方案一样多。 – user1187719