全部,使用SAP JCO(v3.0)時,如何在JCoContext.end()期間處理異常?
我們目前開發了一個Java客戶端應用程序,通過JCO v3.0 API與SAP進行通信。在有狀態調用期間,調用多個BAPI函數時,我們使用JCoContext類來建立有狀態會話。我們在JCoFunctions執行前調用JCoContext.begin(),並在所有函數完成後在finally塊中調用JCoContext.end()。
問題出現在JCoContext.end()上。它可能會引發JCoException。關於爲什麼會發生異常或如何處理異常,文檔不是很清楚。在測試中,當NULL目標傳遞給JCoContext.end()方法時,我能夠觀察到異常。雖然這可能發生,但我們的生產代碼中絕對不會出現這種情況。所以問題依然存在,還有什麼其他原因會導致異常?
此外,如果未調用JCoContext.end()方法,我觀察到奇怪的行爲。在那些案例中,我看到後來的BAPI電話沒有成功完成。這表明如果end()方法沒有成功完成,它可能會使JCo處於不良狀態。那麼,我們應該如何處理這裏發生的異常。我作爲開發人員有什麼追索權?看來,我唯一的保證是關閉程序。
讓我知道如果您有任何意見,謝謝,
保羅·曼寧
您剛剛發佈的樣板代碼附帶JCO作爲示例,並且很清楚,它不能回答我的問題。您的finally塊調用JCoContext的end()方法,但不會在那裏捕獲任何異常。你的assertion end()方法不會拋出異常是錯誤的。 end()方法的API文檔聲明:「.... JCoException - 在發佈/關閉連接時遇到問題」。如果這發生在您發佈的代碼中,那麼該例外將優先於上面的execute()方法期間的任何以前的異常。 – g8torPaul
是的,我承認我錯了。你在finally塊中使用eng()語句嗎?也許這個異常是由catch塊中拋出的前一個異常引起的,而這個異常是隱藏的? – Suncatcher
end()方法在finally塊中被調用(它在我的原始文章中以及在您發佈的代碼中再次顯示)。我特別討論了從end()方法拋出的潛在異常。這種方法在什麼情況下拋出異常?如果拋出異常,SAP中的LUW將不會完成。這會很糟糕。 JCO似乎沒有任何API來解決這個問題。因此我原來的問題。我希望有一個對JCO/SAP代碼有深入瞭解的人幫助。如果您沒有這方面的知識,請不要回復此郵件。 – g8torPaul