我们正在尝试将动态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执行过程中注销该会话,并导致注销的会话出现空指针异常。