首页 > 解决方案 > 无法从代理调用 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.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)

谢谢,斯科特。

标签: javaxpageslotus-domino

解决方案


几年前,我们从Factory.getSession()传递会话类型的枚举转变为传递会话类型,例如Factory.getSession(SessionType.CURRENT). 这可能在代理中起作用,但我认为这不太可能,因为它是我们用来初始化会话的 XPage 运行时。我不知道有任何开发人员在代理中使用 ODA。

从 lotus.domino.Session 创建 ODA 会话的方法可能是final Session sess = Factory.fromLotus(rawSession, Session.SCHEMA, null). 代理使用 lotus.domino 会话进行初始化,您可以将其fromLotus作为参数传递给方法。


推荐阅读