[英]Dynamic JDE Connector Issue of Increasing Handles Count leads to OutOfMemory and after resolving it gives NullPointerException
我們正在嘗試為 JDE9.0 使用動態 java 連接器,並面臨流程中句柄數量增加的問題。
設想:
與多個調用同時並行調用動態 JDE 連接器。
BSFN的執行過程如下:
1) 登錄方法擁有所有憑據並返回 sessionID
int sessionID =
Connector.getInstance().login(username.trim(), password.trim(), env.trim(), role.trim());
…
2) ExecuteBSFN 有輸入參數為module、bsfnName 和inputfile(輸入數據到bsfn)
…..
ExecutableMethod execMethod = bsfnMethod.createExecutable();
execMethod.resetValues();
Map<String, String> input = inputParams(moduleName, bsfnName, inputFile);
if(input != null)
execMethod.setValues(input);
CallObjectErrorList errorList = execMethod.executeBSFN(sessionID);
Map output = execMethod.getValues();
….
3)注銷:
Connector.getInstance().logoff(sessionID);
在這種情況下,我們觀察到進程的句柄計數不斷增加,即使我們使用了 logoff() 方法並最終導致 OutOfMemory。
為了在注銷實現中解決此問題,在注銷后我們調用:
Connector.getInstance().shutDown();
在這種情況下,我們觀察到它會為后續調用引發 null 指針異常。 有誰知道如何克服這種情況?
您應該通過查看企業服務器調用對象 kernel jde 日志文件來查看從用戶 session 調用的 BSFN 是否阻止注銷,因為 BSFN 仍在企業服務器調用對象 Z504284C19F1ED39D38 中異步運行
連接器.getInstance().shutDown(); 將遍歷所有活動用戶 session 並調用 Connector.getInstance().logoff(sessionID);。
So if there are other active session running business function, shutDown will logout the session in middle of BSFN execution and will cause null pointer exception for the logged out session.
如果您有多個JDE會話,則Connector.getInstance().shutDown()它將無法正常工作,因為shutDown()將關閉所有活動會話,這就是您向其他活動用戶獲取 null 指針異常的原因。
對於您的句柄計數和 OutOfMemory,您可以關閉特定的 session 像
步驟 1:通過 session id 注銷用戶
Connector.getInstance().logoff(sessionID);
第 2 步:通知 JDE 關閉當前 session 它將解決您的句柄計數和 OutOfMemory 問題
NotificationManager.notifyEvent(new JdeEvent() {
@Override
public Object getSource() {
return Connector.getInstance();
}
@Override
public String getName() {
return "SHUTDOWN";
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.