2015-10-07 34 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