我们正在尝试将动态Java连接器用于JDE9.0,并面临该过程的“句柄数”增加的问题。

场景:

同时调用Dynamic JDE连接器和多个调用。

执行BSFN的实现过程如下:

1)登录方法具有所有凭据并返回sessionID

int sessionID =
Connector.getInstance().login(username.trim(), password.trim(), env.trim(), role.trim());
…


2)ExecuteBSFN将输入参数作为模块,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();


在这种情况下,我们观察到它为后续调用抛出了空指针异常。
有谁知道如何克服这种情况?

最佳答案

您应该通过查看企业服务器callobject内核jde日志文件来检查从用户会话调用的BSFN是否阻止了注销,因为BSFN仍在企业服务器callobject内核中异步运行。

Connector.getInstance()。shutDown();将遍历所有活动的用户会话并调用Connector.getInstance()。logoff(sessionID);。

因此,如果还有其他正在运行的活动会话正在运行业务功能,shutDown将在BSFN执行过程中注销该会话,并导致注销的会话出现空指针异常。

10-06 01:16