lotus designer 8.5中创建JAVA代理(转自genusBIT的空间)

kenvie 2012-04-10

在开发LotusDomino数据库的过程之中,开发人员可以创建Java代理(Agent)程序,方便将LotusNotesJavaAPI和任何第三方的Java类库整合到Domino数据库中,使得Notes数据库具有强大的可扩展性。在DominoDesigner8.5.1中,集成了Eclipse开发环境,用于Java代理的开发。本文将通过一个具体的应用案例,向LotusDomino开发人员介绍如何使用DominoDesigner8.5.1开发依赖于第三方Java类库的Java代理程序,并阐述了如何部署基于事件触发和被调度的代理程序。

应用环境分析

我们需要对一个现有的Notes数据库进行改造,这个Notes数据库中存在一系列的视图,某些视图中包含的文档包含统一格式的Excel附件。我们需要批量地从这些Notes文档中提取出Excel附件,并将Excel文件中的数据保存到DB2数据库中。

客户存在两种不同的需求,一种是手动选择需要处理的Notes文档,另一种则是在每个月固定的时间点执行批处理程序,将符合特定条件的Notes文档批量进行处理。对于这两种需求,我们都可以通过建立Java代理程序来实现。

使用DominoDesigner8.5.1创建Java代理

在DominoDesigner8.5.1中打开Notes数据库文件TestNSF.nsf,展开Code节点,在Agents节点上点击右键,在菜单中选择”NewAgent”,在弹出的对话框中选择”Java”,命名为”DataExtractionAgent”。如图1所示:

图1.创建JavaAgent

系统会自动在默认包中创建JavaAgent.java文件,该类扩展了lotus.domino.AgentBase类,并重载了NotesMain()方法。

清单1.Java代理程序代码示例

publicvoidNotesMain(){

try{

Sessionsession=getSession();

AgentContextagentContext=session.getAgentContext();

//(Yourcodegoeshere)

}catch(Exceptione){

e.printStackTrace();

}

}

使用session对象可以获取当前的代理程序所处的Notes数据库或者其他数据库对象,并调用NotesJavaAPI实施数据库文档的增删改查,以及元数据的读取等操作。

agentContext对象是Java代理的运行环境对象,可用来获取被用户选择的Notes数据库文档列表等对象。当Java代理被触发时,AgentBase类的NotesMain()方法将被调用。

接下来,我们可以在Java代理中继续建立其它的Java包和类;如果我们需要在Java代理程序中调用第三方的JavaAPI,我们可以将依赖的Java类库拷贝到Notes或Domino内置的Jvm的lib/ext目录下。

在DominoDesigner中,切换到Java视图,发现DataExtractionAgent作为一个独立的Java项目存在,DominoJavaLibrary下可以看到新增加的Java类库,agent.jar包含了从Excel文件中读取数据保存在DB2数据库中业务逻辑,而db2开头的两个jar包提供了操作DB2数据库的API。

图2.Java代理程序在Java包视图中的显示

在Java视图中可以方便的完成Java代理程序的开发,之后可以回到DominoDesigner视图,执行Java代理的测试。

选择Code节点下的Agents项,在右边的窗体中得到所有Agent程序的列表,右键点击DataExtractionAgent,选择”Run”命令,则触发了该Agent程序的运行。

图3.测试Java代理程序

运行的结果是得到一个日志对话框提示Agent执行的情况。

图4.Java代理程序运行情况

代理被触发的方式主要分为两种,一种通过菜单调用,另一种则通过调度来实现。通过菜单调用的Java代理可以部署在Notes客户端或者Domino服务器;而调度的Java代理只能运行在Domino服务器上。

调试Java代理程序

可以使用DominoDesigner对新建的Java代理程序进行调试。

首先在DominoDesigner视图中选择JavaAgent,然后在下方的Properties选项卡中选择Security页面,选择“CompileJavacodewithdebugginginformation”。

图5.设置Agent程序的调试信息

然后打开Tools菜单,选择Java调试首选项,勾选”ClientAgents/Applets”,设置端口号。

图6.设置Java代理调试参数

创建一个”RemoteJavaApplication”调试配置,如图7所示。选择Host为localhost,Port为8701.

图7.设置远程Java应用调试配置

在JavaAgent的NotesMain()方法中添加断点,然后通过工具栏启动调试。

图8.启动Java代理的调试

切换到debug视图,发现远程debug的连接已经被建立。进入Notes客户端,触发Java代理的运行,进入断点,于是可以进行调试了。

Java代理的触发机制有两种,一种是事件触发,一种是定时触发。

在Notes视图中调用Javaagent

在Java代理的基本属性页,选择运行时触发方式为”Onevent”,在下方的下拉列表中选择”Agentlistselection”。

图9.设置Java代理程序的触发

在Notes视图的Action列表中新建一个Action,命名为”提取数据”,编辑该Action的属性,使之在工具菜单中显示,双击该Action,设置click事件的业务逻辑,选择在客户端运行,调用的程序为NotesFormula:

图10.编写对Java代理程序调用的公式

在Domino服务器中部署定时调用的Java代理程序

使用DominoDesigner完成Java代理的开发并部署到服务器上的Notes数据库中,设置调用机制为定时调用。进行保存时,弹出下面的对话框,指明当前的开发人员不具备足够的权限来部署服务器上的Java代理程序。

我们设置Java代理为定时执行的同时,还需要在DominoServer端进行配置,打开DominoAdministrator,选择最右方的Configuration选项卡,选择右下方工作区中的Security页。将管理员的NotesID加入到域”SignorrunrestrictedLotusScript/Javaagents”中。如果Java代理程序需要在服务器端的文件系统写文件,则需要在FullAccessadministrators域中也加上管理员的NotesID.完成修改后进行保存。

图11.配置Java代理程序在Domino服务器上运行的权限

总结

本文介绍了如何在LotusDominoDesigner8.5.1中开发Java代理程序,并在Java代理中调用第三方的类库,另外还介绍了调试Java代理的方法以及部署Java代理到Domino服务器的要点,具有一定的参考价值。

相关推荐

jiong / 0评论 2020-09-17