在 IIOP 连接后,Lotus Notes 连接器从副本运行代理
Posted
技术标签:
【中文标题】在 IIOP 连接后,Lotus Notes 连接器从副本运行代理【英文标题】:Lotus Notes Connector run the agent from replica after IIOP connection 【发布时间】:2019-12-04 11:41:54 【问题描述】:我确实有以下情况:
"ScheduledJobs.nsf"
与代理"Worker"
"ScheduledJobs.nsf"
在三个 domino 服务器上复制:DominoServer1
、DominoServer2
、DominoServer3
有了Lotus Notes Connector
,我能够通过IIOP
与DominoServer1
上的Notes 数据库"ScheduledJobs.nsf"
建立连接。此连接是静态配置的。
因为有到 Notes 数据库的连接,我能够在 DominoServer1
上的 javascript
上运行 Notes 数据库 "ScheduledJobs.nsf"
上的代理 "Worker"
。
我想做的是:
有时,根据情况,我想从副本运行代理 "Worker"。例如,我想在 DominoServer2
或 DominoServer3
上运行代理 "Worker"。
问题:
由于通过IIOP
与Notes 数据库的连接是静态的,因此我总是在DominoServer1
上连接到数据库"ScheduledJobs.nsf"
。
问题:
我能否在副本上的 IIOP
连接之后运行代理 "Worker"
?
已编辑
我的“RunWorkerOn2”代码
Dim agent As NotesAgent
Dim sess As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim item As NotesItem
Set db = sess.CurrentDatabase
Set agent = sess.CurrentAgent
Call db.Open( "DominoServer2/ORGANIZATION", "ScheduledJobs.nsf" )
Set agent = db.GetAgent("Worker")
// Reason why im using 'run' insted of RunOnServer:
// https://www-01.ibm.com/support/docview.wss?uid=swg1LO42549
If agent.Run() = 0 Then
Print "SUCCESS"
Else
Print "FAILED"
End If
【问题讨论】:
你需要连接到其他服务器。 @umeli 是否可以连接到另一台服务器并打开相同的数据库以在“远程”DominoServer 上运行代理?不幸的是,我没有做到。 【参考方案1】:你可以间接地做到这一点。
在包含“Worker”的 ScheduledJobs 数据库中,添加两个新代理:“RunWorkerOn2”和“RunWorkerOn3”。
在 RunWorkerOn2 代理的代码中,添加代码以在 DominoServer2 上打开 ScheduledJobs.nsf 并使用 NotesDatabase.GetAgent("Worker")。然后调用 NotesAgent.RunOnServer 在 Dominoserver2 上运行 Worker。
同样,在 RunWorkerOn3 代理的代码中,打开 DominoServer3 上的 ScheduledJobs.nsf 并使用 NotesDatabas.GetAgent("Worker")。然后调用 NotesAgent.RunOnserver 在 DominoServer3 上运行 Worker。
这样,您的连接器仍然连接到 DominoServer1,并且它在 DominoServer1 上运行其所有 agaengs,但这些代理又将在 DominoServer2 和 DominoServer3 上运行代理。
【讨论】:
太棒了 - 这可以工作,我会测试它。谢谢你。但是有一个问题:我的连接器正在编写一个包含一些重要信息的注释文档,代理必须阅读这些信息并使用它。假设我的连接器在 DominoServer1 上创建了一个便笺文档,但代理必须在 DominoServer2 上运行 - 我必须等到便笺文档复制到 DominoServer2 后再运行代理“RunWorkerOn2”? 答案是您不必等待。您可以重新编码 Worker 以始终在 DominoServer1 而不是当前服务器上查找文档。为了使其正常工作,您是否必须更改 DominoServer1 上的安全设置。它称为受信任的服务器设置。关于它的信息在这里ibm.com/support/knowledgecenter/en/SSKTMJ_9.0.1/admin/…。您需要在 DominoServer1 服务器文档的该字段中输入 DominoServer2 和 DominoServer3。这告诉 Dominoserver1 让其他服务器验证代理签名。 谢谢,受信任的服务器设置已设置。但是,在 DominoServer1 上查看特定文档的 Worker 的重新编码会是什么样子?在我启动任何代理之前,我能够将 noteID 移交给代理。我是否必须将 RunWorkerOn2 代码末尾的 noteID 移交给 Worker Agent,这使得代码开头始终与 DominoServer1 建立连接? 顺便请注意,如果我在控制台中运行上面的代码(请参阅我的问题),则会出现以下错误:DIIOP Server: Agent 'RunOnServer2' error: This database object is already打开为 D:\..(db 的路径)..\ScheduledJobs.nsf以上是关于在 IIOP 连接后,Lotus Notes 连接器从副本运行代理的主要内容,如果未能解决你的问题,请参考以下文章
Lotus Notes Xpage - view.postScript("window.open()") 在替换包含的页面名称后不会打开新窗口(仅在特定文档中)