簡體   English   中英

增加句柄計數的動態 JDE 連接器問題導致 OutOfMemory 並在解決后給出 NullPointerException

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM