Java 對 Domino Objects 的訪問是通過高級包 lotus
domino 進行的
根據運行時環境
這個包中的接口是在其他兩個包中的一個包中實現的
lotus
domino
local 提供了從同一計算機上的 Notes/Domino 軟件進行調用
lotus
domino
cso 提供了從通過遠程連接訪問的 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 連接進一步獲得其他對象
在 lotus
domino 中
NotesFactory 類提供了 createSession 和其他方法
以便在 Java 應用程序和 servlet 中啟用對 Domino Objects 的訪問
特殊的調用方式確定了訪問是本地還是遠程的
要編譯使用 lotus
domino 包的 Java 程序
類路徑必須包含 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 Designer 或 Domino 服務器數據目錄下的 domino\java 目錄中找到
本地調用 createSession 的調用沒有參數
第一個參數為 null 或者第一個參數為空字符串都表示本地調用
下列代碼是等價的
Session s = NotesFactory
createSession()
Session s = NotesFactory
createSession((String)null)
Session s = NotesFactory
createSession(
)
將 null 轉換成 String
以避免過載沖突
要從應用程序和 servlet 中實現本地調用
路徑中必須包含 Notes/Domino 的程序目錄
類路徑中必須包含 Notes/Domino 程序目錄中的 Notes
jar
例如
set path := %path%;c:\lotus\domino
set classpath := %classpath%;c:\lotus\domino\Notes
jar
Notes
jar 中包含 lotus
domino 和 lotus
domino
loca 包
本地調用需要用 NotesThread 類管理線程
NotesThread 類擴展了 java
lang
Thread
包含專門針對 Domino 的初始化和終止代碼
您有以下三種選擇
通過繼承來執行線程 通過 Runnable 接口來執行線程
通過靜態方法來執行線程
通過繼承來執行線程 要通過繼承來執行線程
需要擴展 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();
}
}
}
通過靜態方法來執行線程 要通過靜態方法來執行線程
需要調用 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 Objects 的 AWT 線程
監聽器線程必須使用靜態方法
因為無法從 NotesThread 中繼承它們
既進行本地調用又進行遠程調用的應用程序可以動態地決定何時使用靜態方法 sinitThread 和 stermThread
運行本地線程時
也可以進行遠程調用
但不要將通過一個會話獲得的對象用於對其他會話的調用
應該避免使用多線程
除非有非常充分的理由
比如處理文件輸入/輸出和 Web 請求時
要繼續進行操作
觀察遵循以下指導原則
在同一會話中
可以跨線程共享
同步和回收 Domino
Objects
如果每個線程使用不同的會話
那麼就會失去這些功能
必須明確地在每個線程的基礎上管理同步和回收
不要跨線程使用 DbDirectory 允許在多線程中訪問現有文檔
但只在一個線程中進行訪問文檔將簡化內存管理
將訪問限制在一個線程
這樣就可以不檢查其他線程直接進行回收
跨線程創建文檔始終是安全的
並且這些對象可以不管其他線程就進行回收
配置文件文檔是基於每個線程進行緩存的
如果出現更新競爭
那麼將保留最後一個線程的更新
注意不要刪除其他線程中通過視圖或集合進行導航所需的文檔
當子對象被用於其父對象之外的其他線程時
父線程要等所有子線程都結束後才能結束
當在 AWT 事件處理程序中使用 Domino Objects 時
這一點尤其重要
遠程調用 在進行遠程調用時
createSession 簽名的第一個參數是非空字符串
第一個參數通常用來標識 Domino 服務器所在的計算機
例如
Session s = NotesFactory
createSession(
)
或者
Session s = NotesFactory
createSession(
:
)
第二個示例指定了端口號
這樣就無需在 上運行 Domino Web 服務器
要從應用程序或者 servlet 執行遠程調用
客戶機計算機的類路徑中必須包含 NCSO
jar
NCSO
jar 包含 lotus
domino 包
lotus
domino
cso 包
rba 包以及 ORB 類
ORB 類包含用於遠程類的實現代碼
對於已安裝的 Domino Designer 和 Domino 服務器軟件
NCSO
jar 位於 Domino 數據目錄下的 domino\java 子目錄中
對於沒有安裝 Domino 軟件的計算機
必須從安裝該軟件的計算機上復制歸檔文件
類路徑必須包含歸檔文件
例如
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 =
:
;
Session s = NotesFactory
createSession(host);
// Operational code goes here
}
catch(Exception e)
{
e
printStackTrace();
From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19356.html