熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> JSP教程 >> 正文

Java對Domino Objects的訪問控制

2013-11-15 11:38:48  來源: JSP教程 

  Java 對 Domino Objects 的訪問是通過高級包 lotusdomino 進行的根據運行時環境這個包中的接口是在其他兩個包中的一個包中實現的
  
  lotusdominolocal 提供了從同一計算機上的 Notes/Domino 軟件進行調用
  
  lotusdominocso 提供了從通過遠程連接訪問的 Domino 服務器進行調用
  
  對於本地訪問Java 程序運行在安裝有 Notes 客戶機或者 Domino 服務器的計算機上本地類由 JNI(Java Native Interface)構建來用於訪問與 JVM(Java Virtual Machine)相同的進程中的 Notes/Domino 二進制文件對於遠程訪問Java 程序使用 CORBA(Common Object Request Broker Architecture)請求 Domino 服務器所提供的服務遠程類使用 CORBA 通過 TCP/IP 網絡訪問服務器遠程訪問由以下兩個部分組成
  
  客戶機通過 HTTP 協議獲得服務器的初始對象作為 IOR (Interoperable Object Reference)
  
  客戶機通過 IIOP 連接進一步獲得其他對象

  
 

  在 lotusdomino 中NotesFactory 類提供了 createSession 和其他方法以便在 Java 應用程序和 servlet 中啟用對 Domino Objects 的訪問特殊的調用方式確定了訪問是本地還是遠程的要編譯使用 lotusdomino 包的 Java 程序類路徑必須包含 Notesjar(本地)或者 NCSOjar(遠程)例如
  set classpath=%classpath%;c:\lotus\domino\Notesjar 或者 set classpath=%classpath%;c:\lotus\domino\data\domino\java\NCSOjar 其中 Notesjar 可以在任何 Notes/Domino 安裝的程序目錄中找到NCSOjar 可以在 Domino Designer 或 Domino 服務器數據目錄下的 domino\java 目錄中找到
  
  本地調用

  createSession 的調用沒有參數第一個參數為 null 或者第一個參數為空字符串都表示本地調用下列代碼是等價的
  
  Session s = NotesFactorycreateSession()

  Session s = NotesFactorycreateSession((String)null)

  Session s = NotesFactorycreateSession()

  
  將 null 轉換成 String以避免過載沖突要從應用程序和 servlet 中實現本地調用路徑中必須包含 Notes/Domino 的程序目錄類路徑中必須包含 Notes/Domino 程序目錄中的 Notesjar例如
  
  set path := %path%;c:\lotus\domino

  set classpath := %classpath%;c:\lotus\domino\Notesjar

  
  Notesjar 中包含 lotusdomino 和 lotusdominoloca 包本地調用需要用 NotesThread 類管理線程NotesThread 類擴展了 javalangThread包含專門針對 Domino 的初始化和終止代碼您有以下三種選擇
  
  通過繼承來執行線程

  通過 Runnable 接口來執行線程
  
  通過靜態方法來執行線程
  
  通過繼承來執行線程
  要通過繼承來執行線程需要擴展 NotesThread而不是 Thread並且需要包含 runNotes 方法而不是 run 方法NotesThread 線程可以和任何其他線程一樣通過 start 方法來啟動這種方式比靜態方法(稍後討論)容易使用且不易出錯
  
  import lotusdomino*;
  

  public class myClass extends NotesThread

  {

  public static void main(String argv[])

  {

  myClass t = new myClass();

  tstart();

  }

  public void runNotes() // entry point for Notes thread

  {

  try

  {

  Session s = NotesFactorycreateSession();

  // Operational code goes here

  }

  catch (Exception e)

  {

  eprintStackTrace();

  }

  }

  }
  
  通過 Runnable 接口來執行線程

  要通過 Runnable 接口來執行線程需要實現 Runnable 並包含 run 方法這與使用線程的任何類相同當您因為正在擴展其他類而不能擴展 NotesThread 時可以使用這種方式
  
  import lotusdomino*;

  public class myClass implements Runnable

  {

  public static void main(String argv[])

  {

  myClass t = new myClass();

  NotesThread nt = new NotesThread((Runnable)t);

  ntstart();

  }

  public void run() // entry point for thread

  {

  try

  {

  Session s = NotesFactorycreateSession();

  // Operational code goes here

  }

  catch (Exception e)

  {

  eprintStackTrace();

  }

  }

  }

  
  通過靜態方法來執行線程

  要通過靜態方法來執行線程需要調用 sinitThread() 來初始化線程調用 stermThread() 來終止線程stermThread() 的調用必須與 sinitThread() 的調用嚴格一一對應推薦將 stermThread 放在finally程序塊裡靜態方法適用於不可能進行繼承的線程或者適用於需要更好地控制基於事件的線程
  
  import lotusdomino*;

  public class myClass

  {

  public static void main(String argv[])

  {

  try

  {

  NotesThreadsinitThread(); // start thread

  Session s = NotesFactorycreateSession();

  // Operational code goes here

  }

  catch(Exception e)

  {

  eprintStackTrace();

  }

  finally

  {

  NotesThreadstermThread(); // must terminate every thread

  }

  }

  }
  
  進行本地調用的每個應用程序的線程都必須初始化一個 NotesThread 對象它包含了訪問 Domino Objects 的 AWT 線程監聽器線程必須使用靜態方法因為無法從 NotesThread 中繼承它們 既進行本地調用又進行遠程調用的應用程序可以動態地決定何時使用靜態方法 sinitThread 和 stermThread運行本地線程時也可以進行遠程調用但不要將通過一個會話獲得的對象用於對其他會話的調用應該避免使用多線程除非有非常充分的理由比如處理文件輸入/輸出和 Web 請求時要繼續進行操作觀察遵循以下指導原則
  
  在同一會話中可以跨線程共享同步和回收 Domino

  Objects如果每個線程使用不同的會話那麼就會失去這些功能必須明確地在每個線程的基礎上管理同步和回收
  
  不要跨線程使用 DbDirectory

  允許在多線程中訪問現有文檔但只在一個線程中進行訪問文檔將簡化內存管理將訪問限制在一個線程這樣就可以不檢查其他線程直接進行回收跨線程創建文檔始終是安全的並且這些對象可以不管其他線程就進行回收
  
  配置文件文檔是基於每個線程進行緩存的如果出現更新競爭那麼將保留最後一個線程的更新
  
  注意不要刪除其他線程中通過視圖或集合進行導航所需的文檔
  
  當子對象被用於其父對象之外的其他線程時父線程要等所有子線程都結束後才能結束當在 AWT 事件處理程序中使用 Domino Objects 時這一點尤其重要
  
  遠程調用

  在進行遠程調用時createSession 簽名的第一個參數是非空字符串第一個參數通常用來標識 Domino 服務器所在的計算機例如
  
  Session s = NotesFactorycreateSession()
  
  或者
  
  Session s = NotesFactorycreateSession(:)
  
  第二個示例指定了端口號這樣就無需在 上運行 Domino Web 服務器
  
  要從應用程序或者 servlet 執行遠程調用客戶機計算機的類路徑中必須包含 NCSOjarNCSOjar 包含 lotusdomino 包lotusdominocso 包rba 包以及 ORB 類ORB 類包含用於遠程類的實現代碼對於已安裝的 Domino Designer 和 Domino 服務器軟件NCSOjar 位於 Domino 數據目錄下的 domino\java 子目錄中對於沒有安裝 Domino 軟件的計算機必須從安裝該軟件的計算機上復制歸檔文件
  
  類路徑必須包含歸檔文件例如
  
  set classpath := %classpath%;c:\lotus\domino\data\domino\java\NCSOjar
  
  編碼

  編碼比較簡單遠程調用不使用 NotesThread只需使用主機名稱和(可選)端口號進行 createSession 調用即可
  
  不使用線程時模板將如下所示
  
  import lotusdomino*;

  public class myClass

  {

  public static void main(String argv[])

  {

  try

  {

  String host = :;

  Session s = NotesFactorycreateSession(host);

  // Operational code goes here

  }

  catch(Exception e)

  {

  eprintStackTrace();
From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19356.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.