java - 无法从代理调用 java 中的 openNTF 会话 - 版本 10.0.1
问题描述
我正在尝试从代理调用 java 中的会话。该getSession()
调用在 V3 中运行良好,但我收到“org.openntf.domino.utils.Factory 未为此线程初始化!” 错误。工厂类中有一条错误消息,指出“如果您在代理中运行,请确保从调用Factory.setSession()
并传入您的 lotus.domino.Session 开始”,但该方法似乎在工厂类中被注释掉了现在。
我试图从 更改getSession()
为getAgentSession()
,但我没想到它会起作用,因为这是工厂的问题。
在服务器上的 lib/ext 目录中,我有以下两个 jar 文件:
- org.openntf.domino_10.0.1.201905061230.jar
- org.openntf.formula_10.0.1.201905061230.jar
我添加了 org.openntf.formula jar,因为日志中有一个错误,说那里缺少一个类。
我对服务器具有完全的管理员权限,对 nsf 具有管理员访问权限,并且代理的运行时安全级别设置为“3。允许具有完全管理权限的受限操作”
编辑:我添加了一些代码以查看是否可以说服工厂进行初始化,但即使在提交了一个 lotus.domino 会话后我仍然遇到同样的错误:
if(!Factory.isStarted()) {
System.out.println("Factory.startup");
Factory.startup(NotesFactory.createSession());
} else {
System.out.println("Factory shutdown and restart");
Factory.shutdown();
Factory.startup(NotesFactory.createSession());
}
更多黑客试图解决问题。这段代码...
lotus.domino.Session lnSession = lotus.domino.NotesFactory.createSession();
System.out.println("Session Common User Name: " + lnSession.getCommonUserName());
if(!Factory.isStarted()) {
System.out.println("Factory.startup");
Factory.startup(lnSession);
} else {
System.out.println("Factory shutdown and restart");
Factory.shutdown();
Factory.startup(lnSession);
}
Session session = Factory.getSession();
...给了我以下内容。有趣的是,获取 lotus.domino Session 并没有问题,当交给 openNTF 工厂时,它仍然存在问题。这是一个错误,还是我遗漏了什么。我检查了服务器文档中的安全选项卡,服务器和我一样被命名为具有完全访问权限。
注意:dev2server 是我们的 Domino 10.01 测试服务器,用于在将应用程序从 9.0.1 FP8 移动到 10.0.1 FP1 之前对其进行测试。
06/24/2019 07:45:43 PM AMgr: Agent ('ProcessMail-InRequests PMIR' in 'batch\batchquery.nsf') printing: Session Common User Name: dev2server
06/24/2019 07:45:43 PM AMgr: Agent ('ProcessMail-InRequests PMIR' in 'batch\batchquery.nsf') printing: Factory shutdown and restart
06/24/2019 07:45:43 PM AMgr: Agent ('ProcessMail-InRequests PMIR' in 'batch\batchquery.nsf') printing: [ODA] Shutting down the OpenNTF Domino API...
06/24/2019 07:45:43 PM AMgr: Agent ('ProcessMail-InRequests PMIR' in 'batch\batchquery.nsf') printing: [ODA] OpenNTF Domino API shut down
06/24/2019 07:45:43 PM AMgr: Agent ('ProcessMail-InRequests PMIR' in 'batch\batchquery.nsf') printing: [ODA] Starting the OpenNTF Domino API... Using notes.ini: C:\Lotus\Domino\notes.ini
06/24/2019 07:45:43 PM AMgr: Agent ('ProcessMail-InRequests PMIR' in 'batch\batchquery.nsf') printing: [ODA] OpenNTF API Version 10.0.1.201905061230 started
06/24/2019 07:45:43 PM AMgr: Agent ('ProcessMail-InRequests PMIR' in 'batch\batchquery.nsf') printing: Logging: LogConfig successfully initialized from D:\Lotus\Domino\data/IBM_TECHNICAL_SUPPORT/org.openntf.domino.logging.logconfig.properties
06/24/2019 07:45:43 PM AMgr: Agent ('ProcessMail-InRequests PMIR' in 'batch\batchquery.nsf') error message: java.lang.IllegalStateException: org.openntf.domino.utils.Factory is not initialized for this thread!
06/24/2019 07:45:43 PM AMgr: Agent ('ProcessMail-InRequests PMIR' in 'batch\batchquery.nsf') error message: at org.openntf.domino.utils.Factory.getThreadVariables(Factory.java:346)
06/24/2019 07:45:43 PM AMgr: Agent ('ProcessMail-InRequests PMIR' in 'batch\batchquery.nsf') error message: at org.openntf.domino.utils.Factory.getSession(Factory.java:953)
06/24/2019 07:45:43 PM AMgr: Agent ('ProcessMail-InRequests PMIR' in 'batch\batchquery.nsf') error message: at org.openntf.domino.utils.Factory.getSession(Factory.java:859)
06/24/2019 07:45:43 PM AMgr: Agent ('ProcessMail-InRequests PMIR' in 'batch\batchquery.nsf') error message: at ProcessMailInRequests.NotesMain(ProcessMailInRequests.java:89)
06/24/2019 07:45:43 PM AMgr: Agent ('ProcessMail-InRequests PMIR' in 'batch\batchquery.nsf') error message: at lotus.domino.AgentBase.runNotes(Unknown Source)
06/24/2019 07:45:43 PM AMgr: Agent ('ProcessMail-InRequests PMIR' in 'batch\batchquery.nsf') error message: at lotus.domino.NotesThread.run(Unknown Source)
谢谢,斯科特。
解决方案
几年前,我们从Factory.getSession()
传递会话类型的枚举转变为传递会话类型,例如Factory.getSession(SessionType.CURRENT)
. 这可能在代理中起作用,但我认为这不太可能,因为它是我们用来初始化会话的 XPage 运行时。我不知道有任何开发人员在代理中使用 ODA。
从 lotus.domino.Session 创建 ODA 会话的方法可能是final Session sess = Factory.fromLotus(rawSession, Session.SCHEMA, null)
. 代理使用 lotus.domino 会话进行初始化,您可以将其fromLotus
作为参数传递给方法。
推荐阅读
- docker - 502 在同一网络中的 docker 容器之间通信时网关错误
- microsoft-edge - MS Edge 解压扩展可以工作,但是 packed = "此扩展可能已损坏。"
- java - 什么是适用于 Linux 的 Windows 子系统 (WSL 2) 上的 Java 中的 os.name 系统属性值
- android - Firebase 实时数据库根据查询的值返回 ArrayList 或 HashMap
- terraform - terraform 获取 json 文件路径
- javascript - 在 React 中的 Firebase 中创建用户时,DisplayName 为空
- python - 为字典导入python脚本
- python - 如何减小我的自定义 python 类型的大小?
- javascript - React Validation Async 总是返回 Promise{
} - python - Python 3.9 区别 list.sort(reverse=True) 和 list.reverse()