站内搜索: 请输入搜索关键词

当前页面: 开发资料首页Eclipse 专题使用 Eclipse 创建 Notes/Domino 插件

使用 Eclipse 创建 Notes/Domino 插件

摘要: 随同本文使用 Eclipse PDE 创建简单的 Notes/Domino 插件。该插件使用 Notes.jar 文件访问 Notes/Domino 后端 Java 类并显示 Personal Address Book 中的生日/周年纪念。

在 上一篇文章 中,我们告诉了您如何使用 Eclipse 集成开发环境(IDE)和 Lotus Notes/Domino 来开发 Java 代理和程序。现在,我们要将注意力转向如何使用 Eclipse 访问 Notes/Domino 后端 Java 类。通过这种方法,可以与 Notes/Domino 后端交互以及通过 Eclipse Standard Widget Toolkit (SWT) 模型显示信息。

IBM Workplace Client Technology 富客户机版本也基于 Eclipse SWT 框架,所以开发的在本机 Eclipse 环境中工作的任何插件也将可以在 IBM Workplace Client Technology 中工作。因此,当将 IBM Workplace Client Technology 与现有数据库一起使用时,在使用 Lotus Notes/Domino 开发插件时所获得的任何技术将会对您非常有帮助。

本文适用于具有 Java 知识的经验丰富的 Notes/Domino 应用程序开发人员。具有一些 Eclipse 方面的经验会有所帮助,但不是必需的。

开始

我们建议您先阅读一下以前关于此主题的文章“ 使用 Lotus Notes 和 Eclipse 管理和运行 Java 程序”;不过,不必通读全文。因为时间关系,我们假设您已经安装了 Eclipse 3。在 Eclipse 较老的版本中,可能还需要安装插件开发环境(plug-in development environment,PDE)和示例,但是在最新的版本中,就不必了。如果尚未安装 Eclipse,请访问 Eclipse.org Web 站点的 下载页面。在本文中,我们使用 Eclipse 3,因为它可以在项目中包含 manifest 文件,这样可以简化过程并允许对插件的类路径进行更高级的控制。本文后面将讨论 manifest 文件。

我们将不过于详细地讲述许多各种各样的 Standard Widget Toolkit (SWT) 窗口小部件(UI 对象)或扩展点框架。关于它们已经发布了许多好的书籍和教程。我们将仅注重于例子,向您说明开始所需要了解的最少的 Notes/Domino Java 信息。然后,让您自己去研究其余的信息和开发一些真正有用的插件。着重于简单的插件和向导生成代码示例,会使 Notes/Domino 易于理解,从而您可以接着研究。

从插件向导开始

Eclipse 有许多向导来简化任务,可以构建自己的向导。遍历向导可以很好地了解 Eclipse 是如何工作的,同时还是一种容易的开始方式。我们为了说明,将基于视图例子创建新的插件。Eclipse 提供了与 Lotus Notes 非常相似的多个不同类型的设计元素。有与 Notes 视图相似的数据视图。还有其他元素,如与 Notes 表单相似的表单。有关 Eclipse 设计元素的详细信息,可以参考 Sherry Shavor 等人编写的 The Java Developer's Guide to Eclipse 一书。

在 Eclipse 中,选择 File - New - Project,然后选择 Plug-in Project 选项。(如果没有看到此选项,则没有在 Eclipse 中安装 PDE。)虽然您可以使用喜欢的任何名称,对于我们的插件项目,我们将其命名为 NotesView。




Eclipse 提供了许多例子,称为模板,查看一些例子及其如何组合会是一个好主意。在本文中,我们想创建视图,所以选择“Create a plug-in using one of the templates”选项,然后选择“Plug-in with a view”模板,该模板用作插件的基础。

建议更改视图名称和种类,从而以后运行示例时容易找到该视图。完成后单击 Finish 来生成插件项目和代码。




以调试模式测试视图

向导创建开始所需的所有代码。向导完成后,检查向导为您生成的类代码。将看到它创建的用于开始的代码数量与启动代理时从 Domino Designer 获得的代码数量相当。在 Notes 开发中,我们通常转至帮助文件,复制并粘贴相关代码。使用 Eclipse,我们发现可以遍历向导,然后从那里获取代码 — 不必复制和粘贴代码。

Eclipse 有许多透视图,可以切换这些透视图来帮助集中精力于当前正在执行的活动。例如,当调试时,可以切换到调试透视图(选择 Window - Open Perspective - Debug),可以在其中设置/删除断点、查看变量和遍历执行代码。有面向插件开发以及一般 Java 开发的透视图。

默认情况下,启动插件透视图。为您提供概述页面。单击“Launch a runtime workbench”链接来启动包含新插件的其他 Eclipse 桌面。如果一切操作顺利的话,您的插件应该与下图相似。




如果工作台显示不正确,选择 Window - Show View - Other 菜单选项。在对话框中,查找创建项目时指定的类别以找到视图。在我们的例子中,类别为 Notes Category(参见图 2)。


<table border="0" cellspacing="0" cellpadding="0" width="100%"><tr><td>
</td></tr></table><table class="no-print" cellspacing="0" cellpadding="0" align="right"><tr align="right"><td>
<table border="0" cellpadding="0" cellspacing="0"><tr><td valign="middle">
</td><td valign="top" align="right"></td></tr></table></td></tr></table>

链接到 Lotus Notes/Domino

要将项目链接到 Lotus Notes/Domino,必须已经安装了 Lotus Notes。与前一篇文章不同,在那篇文章里,需要特定版本的 Notes 客户机来启用 Notes.ini 文件中的 java_enable_debug 设置,对于此项目,可以使用任意版本的 Lotus Notes。需要链接到 Notes.jar 库,作为运行时所需的库。Notes.jar 文件是包含所有 Notes/Domino 后端类的 Java 归档文件;它知道如何与 Lotus Notes/Domino 交互。

注意:还可以使用 CORBA API Java 归档文件访问 IIOP-enabled Domino 服务器。在本文中,我们仅着重于使用本地访问 API 方法。

指定 Notes.jar 为必需的运行时库

需要在插件描述中添加 Notes.jar 作为运行时的必需库。在标题为 Plug-in Development 的窗口中,选择 Runtime 选项卡。在 Runtime libraries 部分,单击 New。当系统提示时输入 Notes.jar,然后单击 OK 保存。添加 Notes.jar 文件后,plugin.xml 文件在运行时列出 Notes View JAR 文件和 Notes.jar 文件。plugin.xml 文件是在创建插件项目时生成的,对插件进行描述。单击 plugin.xml 选项卡查看代码。

<table bgcolor="#eeeeee" width="100%" cellpadding="5" cellspacing="0" border="1"><tr><td>

      
         
      
      
         
      

</td></tr></table>

<table border="0" cellspacing="0" cellpadding="0" width="100%"><tr><td>
</td></tr></table><table class="no-print" cellspacing="0" cellpadding="0" align="right"><tr align="right"><td>
<table border="0" cellpadding="0" cellspacing="0"><tr><td valign="middle">
</td><td valign="top" align="right"></td></tr></table></td></tr></table>

插件 manifest 文件

在 Eclipse 3 中,可以创建运行插件所需的 manifest 文件(Manifest.MF)。manifest 文件是 Eclipse 3 中的新功能。它提供关于插件的要求的额外信息,确保我们声明类路径时包含 Notes.jar 文件。这与为插件设置类路径相似。没有该文件,将会出错,从而不能加载插件。当我们第一次如此做的时候,我们不得不仔细检查 Eclipse 代码,发现当引用第一个 Notes 类时出错。这意味着 Eclipse JVM 没有加载 Notes.jar 文件,并且那些类是不可用的。通过在 manifest 文件中声明这些类,就可以正确加载它们。

要创建 manifest 文件(Manifest.MF),选择 Runtime 选项卡,然后单击“Create a manifest file”链接。manifest 文件包含下列代码:

<table bgcolor="#eeeeee" width="100%" cellpadding="5" cellspacing="0" border="1"><tr><td>
Manifest-Version: 1.0
Bundle-Name: Notes_View Plug-in
Bundle-SymbolicName: Notes_View; singleton=true
Bundle-Version: 1.0.0

        Bundle-ClassPath: Notes_View.jar,
 Notes.jar
Bundle-Activator: Notes_View.Notes_ViewPlugin
Bundle-Localization: plugin
Require-Bundle: org.eclipse.ui,
 org.eclipse.core.runtime
Eclipse-AutoStart: true

      
</td></tr></table>

在 manifest 文件中,需要包含 Notes.jar 文件的完整路径。这样确保 Eclipse 正确加载文件,您可以访问这些类。编辑上面以粗体显示的行,以包括完整 Notes.jar 路径,例如:

Bundle-ClassPath: NotesView.jar,
c:\lotus\notes\notes.jar

然后将 Notes.jar 文件作为库导入项目中。这样使您可以构建文件并将 lotus.domino.* 类导入项目中。要导入 JAR 文件,在 Package Explorer 窗格中右击项目并选择 Properties。在 Properties 框中,选择 Java Build Path,单击 Libraries 选项卡,然后单击 Add External JARs 按钮添加 Notes.jar。




在构建路径中包含了 Notes.jar 文件后,可以添加导入指令,然后创建简单视图。在 Package Explorer 窗格中,单击 src directory 将其打开,然后打开 Notes_View.views。打开 NotesView.java 并选择 ViewContentProvider。将下列导入指令添加到代码中:

import java.util.Vector;
import lotus.domino.*;

要更改视图显示,修改 ViewContentProvider 内部类的默认代码。该类具有方法 getElements。通过删除三个字符串的默认响应并替换为下列代码,视图可以显示 Domino 数据。在本例中,数据是本地地址簿(names.nsf)中的生日和周年纪念列表。用下列代码替换默认 ViewContentProvider 类代码:

<table bgcolor="#eeeeee" width="100%" cellpadding="5" cellspacing="0" border="1"><tr><td>
class ViewContentProvider implements IStructuredContentProvider {
public void inputChanged(Viewer v, Object oldInput, Object newInput) {
}
public void dispose() {
}
public Object[] getElements(Object parent) {

Session s;
String[] list = null;
try {
NotesThread.sinitThread();
s = NotesFactory.createSession();
//Get the local address book
Database nab = s.getDatabase("",s.getAddressBooks().elementAt(0).toString());
if (nab.isOpen() == false)
nab.open();
//Get the Birthdays & Anniversaries view
View baview = nab.getView("BA");
ViewEntryCollection eba = baview.getAllEntries();
ViewEntry entry = eba.getFirstEntry();

list = new String[eba.getCount()];
int count = 0;

while (entry != null) {

Vector vals = entry.getColumnValues();

list[count]= vals.elementAt(1).toString() + " " + vals.elementAt(2).toString();

entry = eba.getNextEntry();
count++;
}
NotesThread.stermThread();

} catch (NotesException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

return list;

}
}
</td></tr></table>

诸如“An error has occurred when creating this view”的消息可能意味着 Eclipse 在路径中找不到 Notes.jar,不能创建 Notes 对象,或 Eclipse 无法初始化 Lotus Notes。确保设置了运行时库,manifest 文件中有完整路径。然后确保在 Path 变量中指定了 Notes 路径,例如,c:\lotus\notes。

如果一切操作顺利,应该看到反映本地地址簿中所列生日的列表。





<table border="0" cellspacing="0" cellpadding="0" width="100%"><tr><td>
</td></tr></table><table class="no-print" cellspacing="0" cellpadding="0" align="right"><tr align="right"><td>
<table border="0" cellpadding="0" cellspacing="0"><tr><td valign="middle">
</td><td valign="top" align="right"></td></tr></table></td></tr></table>

结束语

我们刚刚讲述了使 Lotus Notes/Domino 与 Eclipse 3 交互的基本知识。从而,您可以构建所设想的、需要访问 Notes/Domino 后端 Java 类的任何插件。可以打开数据库、创建文档、发送邮件、读取视图、触发代理以及希望在 Lotus Notes/Domino 中进行的其他任何操作。不同的是现在可以充分利用 SWT 窗口小部件和 Eclipse 框架。通过基于这些技术进行构建,可以向 IBM Workplace Client Technology 以及 Eclipse 集成开发环境添加值和功能。


<table border="0" cellspacing="0" cellpadding="0" width="100%"><tr><td>
</td></tr></table><table class="no-print" cellspacing="0" cellpadding="0" align="right"><tr align="right"><td>
<table border="0" cellpadding="0" cellspacing="0"><tr><td valign="middle">
</td><td valign="top" align="right"></td></tr></table></td></tr></table>


<table border="0" cellpadding="0" cellspacing="0"><tr><td valign="middle">
</td><td valign="top" align="right"></td></tr></table></td></tr></table>

关于作者<table border="0" cellspacing="0" cellpadding="0" width="100%"><tr><td colspan="3"></td></tr><tr align="left" valign="top"><td>

</td><td></td><td width="100%">

Ian Connor 是 IBM 的维护软件工程师,他与外部支持团队合作,共同解决支持工作所遇到的问题。Ian 还处理 Lotus Team Workplace (QuickPlace) 方面的问题,去年有一段时间,他直接为 Lotus Team Workplace 团队工作,处理上载控制、可程序化、Web 服务和 Notes 集成等问题。Ian 喜欢养鸡、滑雪、旅行以及陪伴妻子。目前,为了修缮他在麻州康可德区的 1874 年的房子,他已经将了解空哲学的个人目标放到了第二位。

</td></tr></table>

<table border="0" cellspacing="0" cellpadding="0" width="100%"><tr><td>
</td></tr></table><table class="no-print" cellspacing="0" cellpadding="0" align="right"><tr align="right"><td>
<table border="0" cellpadding="0" cellspacing="0"><tr><td valign="middle">
</td><td valign="top" align="right"></td></tr></table></td></tr></table>


↑返回目录
前一篇: 开发一个基于 JUnit 的存储过程自动化测试的 Eclipse 插件
后一篇: 基于 Eclipse 的 Apache Derby 工具