使用 Java 可以访问 Domino 中的对象,如数据库、视图、文档等。本文简述了用 Java 访问 Domino 对象的基本编程方法。本文中的内容主要是根据 Lotus Domino/Notes 6 编写的,使用 R5 时会略有不同。
Java 对 Domino 对象的访问是通过调用 lotus.domino 包来进行的。在运行环境中,lotus.domino 包中的接口是通过两个包来实现的:
对于本地连接,Java 程序将在Notes客户端或Domino服务器所在的计算机运行,使用JNI 对Notes/Domino的代码进行访问。
对于远程连接,Java 程序通过 CORBA 访问 Domino 所提供的服务。远程访问包括两个过程:
在 lotus.domino 中,NotesFactory 类提供了 createSession 以及其他方法,可以用来开始 Java 应用程序或 servlet 对 Domino 对象的访问。不同的调用方式决定了访问是本地的还是远程的。
要使用 lotus.domino 包来编译 Java 程序,类路径(classpath)中必须包含 Notes.jar (本地)或 NCSO.jar (远程)。例如:
set classpath=%classpath%;c:/lotus/domino/Notes.jar
或者
set classpath=%classpath%;c:/lotus/domino/data/domino/java/NCSO.jar
其中Notes.jar可以在Notes/Domino安装的程序目录中找到。NCSO.jar 在Domino服务器或Domino Designer的数据目录下,domino/java 子目录中。
本地调用
使用 createSession 时,没有参数、第一个参数为 null、或第一个参数为空字符串都表示本地调用。以下代码是等价的:
Session s = NotesFactory.createSession() Session s = NotesFactory.createSession((String)null) Session s = NotesFactory.createSession("")
要从应用程序和 servlet 中执行本地调用,路径(path)中必须包含 Notes/Domino 的程序目录,类路径(classpath)中必须包含 Notes.jar。例如,当 Domino 安装在"c:/lotus/domino"中时:
set path := %path%;c:/lotus/domino
set classpath := %classpath%;c:/lotus/domino/Notes.jar
Notes.jar中包含 lotus.domino 和 lotus.domino.local 包。
本地调用要求使用 NotesThread 类来管理线程。NotesThread 类扩展了 java.lang.Thread,包含了专门针对 Domino 的的初始化和终止代码。您可以有三种不同方式来使用它:
通过继承来执行线程
要通过继承来执行线程,需要扩展 NotesThread(而不是 Thread),包含 runNotes 方法(而不是 run 方法)。NotesThread 线程可以和其他线程一样通过 start 方法来启动。这种方式较为易用,也比较不容易出错。
import lotus.domino.*;
public class myClass extends NotesThread
{
public static void main(String argv[])
{
myClass t = new myClass();
t.start();
}
public void runNotes() // entry point for Notes thread
{
Try
{
Session s = NotesFactory.createSession();
// Operational code goes here
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
通过 Runnable 接口来执行线程
要通过 Runnable 接口来执行线程,需要实现 Runnable 并包含 run 方法,这和其他使用线程的类完全一样。当您需要扩展其他类,不能扩展 NotesThread 类时可以使用这种方式。
import lotus.domino.*;
public class myClass implements Runnable
{
public static void main(String argv[])
{
myClass t = new myClass();
NotesThread nt = new NotesThread((Runnable)t);
nt.start();
}
public void run() // entry point for thread
{
try
{
Session s = NotesFactory.createSession();
// Operational code goes here
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
(来源IBM官方网站)