用 Java 访问 Domino 的对象(二)

通过静态方法来执行线程

要通过静态方法来执行线程,需要调用 sinitThread() 来初始化线程,调用 stermThread() 来结束线程。stermThread() 的调用必须与 sinitThread() 的调用严格一一对应。推荐将 stermThread() 放在"finally"程序块里。静态方法适用于不可能进行继承,或需要控制事件驱动的线程时。

import lotus.domino.*;
public class myClass
{
   public static void main(String argv[])
   {
       try
       {
           NotesThread.sinitThread(); // start thread
           Session s = NotesFactory.createSession();
           // Operational code goes here
       }
       catch(Exception e)
       {
           e.printStackTrace();
       }
           finally
           {
               NotesThread.stermThread(); // must terminate every thread
           }
   }
}

进行本地调用的每个线程都必须初始化一个 NotesThread 对象。它包含了访问 Domino 对象的 AWT 线程。侦听线程必须使用静态方法,因为它们不可能从 NotesThread 继承。

既进行本地调用又进行远程调用的应用程序可以动态地决定何时使用静态方法 sinitThread 和 stermThread。当一个本地线程运行时,也可以进行远程调用。但不要将一个会话中得到的对象用于其他会话的调用。

应该尽量避免多线程的使用,除非有非常充分的理由。要遵循以下原则:

  • 在同一会话(session)中不同线程(thread)之间,Domino 的对象会被自动共享、同步以及回收。如果每个线程使用不同的会话,这些功能就失去了,必须明确地在每个线程中管理对象的同步和回收。
  • 不要跨线程使用DbDirectory。 ?在多线程中访问同一个已有的文档是允许的,但只在一个线程中进行访问将简化内存管理。如果将对已有文档的访问限制在一个线程里,可以不检查其他线程就进行回收(recycle)。在多线程中创建新文档总是安全的,所使用的对象可以不管其他线程的状态就进行回收(recycle)。
  • 简要表文档是按线程来缓存的。当多个线程都要更新同一简要表文档时,会保存最后进行更新的线程所做的修改。
  • 删除文档时要特别注意,因为其他线程可能需要此文档以遍历视图或文档集合。
  • 当子对象被用于其他线程时,父线程要等所有子线程结束后再结束。当在 AWT 事件处理器中使用 Domino 对象时这一点要特别注意。

远程调用

调用createSession时,第一个参数使用非空的字符串,就表示所进行的是远程调用。第一个参数表示的是 Domino 服务器所在的计算机。例如:

Session s = NotesFactory.createSession("myhost.east.acme.com")

或者

Session s = NotesFactory.createSession("myhost.east.acme.com:63148")

后边的例子中指定了端口号,这样Domino服务器上就不需要启动 Web 服务了。详细信息见本文后面的"获取IOR"部分。

要从应用程序或 servlet 中执行远程调用,运行程序的计算机的类路径里必须包括 NCSO.jar。 NCSO.jar 中包含 lotus.domino 包,lotus.domino.cso 包,lotus.domino.corba 包,以及 ORB 类。对于已安装的 Domino Designer 和 Domino 服务器,NCSO.jar 在 Domino 数据目录下的 domino/java 子目录中。如果计算机上没有安装 Domino 软件,必须手工将此文件从其他计算机上复制过来。 类路径中必须包含NCSO.jar,例如:

set classpath := %classpath%;c:/lotus/domino/data/domino/java/NCSO.jar

编程

远程调用时不使用 NotesThread,只需要在 createSession 中指定主机名和端口号(可选)。

不使用线程时,程序大致上是以下格式:

import lotus.domino.*;
public class myClass
{
   public static void main(String argv[])
   {
       try
       {
           String host = "myhost.east.acme.com:63148";
           Session s = NotesFactory.createSession(host);
           // Operational code goes here
       }
       catch(Exception e)
       {
           e.printStackTrace();
       }
   }
}

使用线程时,程序为:

import lotus.domino.*;
public class myClass implements Runnable
{
   public static void main(String argv[])
   {
       myClass t = new myClass();
       Thread nt = new Thread((Runnable)t);
       nt.start();
   }
   public void run()
   {
       try
       {
           String host = "myhost.east.acme.com:63148";
           Session s = NotesFactory.createSession(host);
           // Operational code goes here
       }
       catch(Exception e)
       {
           e.printStackTrace();
       }
   }
}


(来源IBM官方网站)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值