【问题标题】:Call java-Agent of another DataBase from current DataBase Java-Agent从当前数据库 Java-Agent 调用另一个数据库的 java-Agent
【发布时间】:2016-04-11 21:05:43
【问题描述】:

我有一个 java-agent,我可以通过它调用另一个代理,其中包含 NoteId 的参数通过它传递,并使用该 NoteId,我能够成功地完成该文档的工作。直到这里一切都清楚了.

关于这个的主要问题是,是否可以从当前数据库代理在同一台服务器上运行另一个数据库的代理?

举个例子更清楚 我有两个数据库,“ABC.nsf”和“XYZ.nsf”,JavaAgent“A”在“ABC.nsf”中,JavaAgent“B”在“XYZ.nsf”中。在我的 xpage 中,我有一个运行代理“A”的按钮,甚至代理“A”也可以运行同一数据库中的任何其他 javaAgent。

代码:

 Document mainDoc = db.getDocumentByUNID(tempDoc.getItemValueString("mainDocId"));
 String noteID = mainDoc.getNoteID();
 String agentName = "NotificationManager";
 Agent agent = db.getAgent(agentName);
 if (agent != null) 
     agent.runOnServer(noteID);
 else 
    System.err.println("Something is wrong");

但实际上我想从“ABC.nsf”中的JavaAgent“A”运行位于“XYZ.nsf”中的JavaAgent“B”。

经过一些研究,我参考了这段代码。 代码

Database db=session.getDatabase(current_server, "path/to/XYZ.nsf"); 
Agent myAgent=db.getAgent("B"); 
myAgent.run(); 

是的,我在那里没有成功, 需要一些想法来实现这一点。任何建议都会非常感激。

【问题讨论】:

  • 您真的写了db=session.getDatabase(current_server, path/to/XYZ.nsf); 还是使用了这样的引号:db=session.getDatabase(current_server, "path/to/XYZ.nsf");?并且:变量current_server 是否包含正确的服务器名?并且:这是 linux 服务器还是 windows 服务器(斜线或反斜线)?是相对于数据目录的路径吗?
  • 抱歉,我写错了“path/to/XYZ.nsf”。
  • 请分享您得到的确切错误消息/异常堆栈跟踪

标签: java xpages lotus-domino agent


【解决方案1】:

示例代码原则上是正确的。只是一些你必须知道的事情:

首先服务器名称可以是“”,也可以是服务器的真实名称。但是如果有服务器,那么您必须检查服务器文档中的Trusted servers:- 部分(安全选项卡 - 服务器访问部分)。服务器本身必须是该字段的成员(作为名称或组),否则您可能无法打开其他数据库。

第二件事:目标数据库的路径是相对于数据目录的,并且必须是给定操作系统的正确格式。

例如C:\IBM\Domino\Data\first\xyz.nsf 将是 first\xyz.nsf/local/notesdata/second/abc.nsf 将是 second/abc.nsf

第三:你得到的noteid来自调用数据库的一个文档。在“目标”代理中,您必须从源数据库中获取文档,否则它将引发错误或 - 因为 noteid 只是一个序列号 - 从目标数据库返回与此无关的文档您正在搜索的文档。

调用代理 A 的代码如下:

Session session = getSession();
AgentContext agentContext = 
session.getAgentContext();
Database dbCurrent = agentContext.getCurrentDatabase();
Database dbTarget = session.getDatabase(dbCurrent.Server, "XYZ.nsf"); 
Agent myAgent=dbTarget.getAgent("B"); 
myAgent.runOnServer(noteID); 

被调用的代理 B 可能如下所示

Session session = getSession();
AgentContext agentContext = 
session.getAgentContext();
Database dbCurrent = agentContext.getCurrentDatabase();
Database dbSource = session.getDatabase(dbCurrent.Server, "ABC.nsf"); 
Document doc = dbSource.getDocumentByID(agentContext.getCurrentAgent().getParameterDocID())

这应该可以工作(如果服务器上的安全性没问题)。 正如 Paul 在 cmets 中提到的安全性也意味着代理签名者或 Web 用户(取决于代理 A 中的设置)必须对目标数据库和目标服务器(如果不同)具有足够的访问权限。

如果尽管安全性正确但仍无法正常工作:向我们显示确切的错误/跟踪。

【讨论】:

  • 如果代理 A 以 Web 用户身份运行,大概同一个用户也需要访问数据库 B,对吗?如果是这样,那可能是另一个可能失败的领域。
  • 在他的第二段中,他说他想从 same 服务器上的另一个数据库运行代理,因此他不需要检查 Trusted Servers 设置。这仅适用于 ServerA 上的代理需要访问 ServerB 上的数据库时(在这种情况下,重要的是 ServerB 的设置)。
  • 关于当前版本,您很可能是正确的。但是当引入受信任的服务器设置时(在此之前甚至无法使用代理访问其他服务器),代码不是很智能:使用例如访问数据库new NotesDatabase( currentserver, "db.nsf" ) 会检查受信任服务器字段中的服务器名称,即使它与当前服务器相同,而 New NotesDatabase( "", "db.nsf" ) 却没有。 ..但这可能很久以前就修复了,只是提到它以获得完整的答案...
  • 奇怪的是,昨天晚些时候,我在客户端上运行代理时遇到问题,在 6.x 客户端上,它运行良好。在 8.5 客户端上,它抛出了一个错误,$Error 值是“要在远程机器上打开数据库(xxx !! yyy.nsf),运行代理的服务器必须被远程机器列为受信任的服务器”我'从来没有听说过客户端代码中会发生这种情况,也不应该发生这种情况。显然,LotusScript 6 和 8.5 引擎之间的行为有所不同。很奇怪。
  • 我只发现了另一个人在客户端遇到此问题的证据。我只能部分理解(感谢谷歌从俄语翻译),但很明显情况相同。在 6 上运行良好的代码会在 8.5 上引发错误。 developer.developer-works.com/article/32085855/…
【解决方案2】:

我可以建议一种不同的方法吗?如果不需要代理的立即回复,作为代码中的返回值,为什么不给其他数据库发送一个特殊的邮件呢?创建一个邮件代理(在收到新邮件后触发),在发送方创建一个 NotesDocument 对象,添加您需要引用您希望代理处理的文档的值,如服务器名称、replicaId数据库和 uniqueId。代理收到邮件并检查字段以了解它应该做什么。接收数据库应在 N&A 书中提及为 Mail-in 数据库。

优点是多方面的:无需权限,界面清晰,无需打开其他数据库,代理由代理管理器在方便的时间执行,您可以通过相同的方式轻松添加更多功能等。

【讨论】:

  • 是的,目前我正在做同样的事情,直到将邮件发送到其他数据库并且其他数据库收到邮件,并且在该数据库中我有一个计划代理,它在给定时间间隔后运行,然后处理新操作如果 contision 满意,这会很好,但我不想等待调度代理运行它会增加我的处理时间。
  • 为什么要安排代理?您可以将触发器设置为新邮件到达时。然后它将在几分钟内运行(可使用 notes.ini 参数进行配置)。如果您需要立即运行它,请使用邮件到达前触发器,但在这种情况下执行时间应该很短。
  • 是的,我已经做到了。现在我在 notes.ini "AMgr_DisableMailLookup=1" 中设置了一个参数来禁用邮件查找并且它起作用了,但是我注意到代理没有在邮件到达后立即启动。它需要一些时间然后运行。有什么建议吗?
  • 您可以将 AMgr_NewMailEventDelay 设置为 0,这样可以节省一分钟(哇!)。可能还有其他,见文档:www-01.ibm.com/support/knowledgecenter/SSKTMJ_8.5.3/…
猜你喜欢
  • 1970-01-01
  • 2012-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多