欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
[Domino]如何用java遠程訪(fǎng)問(wèn)Domino郵箱數據
應用場(chǎng)景
我們需要遠程訪(fǎng)問(wèn)IBM Lotus Domino R6服務(wù)器,從中獲取用戶(hù)郵箱的郵件信息等關(guān)鍵數據。我們不需要提供每一個(gè)用戶(hù)密碼以及ID文件。
技術(shù)關(guān)鍵詞
Java:
Java 和 Lotus Notes/Domino 是理想的開(kāi)發(fā)組合。
DIIOP:
IIOP,是Internet Inter-ORB Protocol,一種傳輸層協(xié)議。它用于CORBA 2.0及兼容平臺上。IIOP協(xié)議是要建立以下幾個(gè)部分:一個(gè)IIOP到HTTP的網(wǎng)關(guān),使用這個(gè)網(wǎng)關(guān)可以讓CORBA客戶(hù)訪(fǎng)問(wèn)WWW資源;一個(gè)HTTP到IIOP的網(wǎng)關(guān),通過(guò)這個(gè)網(wǎng)關(guān)可以訪(fǎng)問(wèn)CORBA資源;一個(gè)為IIOP和HTTP提供資源的服務(wù)器,一個(gè)能夠將IIOP作為可識別協(xié)議的瀏覽器。
其中ORB呢,Object Request Broker(請求對象代理),一個(gè)中間件。它可以建立對象之間的client/server關(guān)系。通過(guò)ORB,一個(gè)client可以透明的引用同一臺機器上或網(wǎng)絡(luò )上的一個(gè)server對象的方法。ORB解釋該調用并負責查找一個(gè)實(shí)現該請求的對象,找到后,把參數傳給該對象,調用它的方法,最后返回結果。
那么,DIIOP就是Domino IIOP了,什么意思呢?就是一個(gè)服務(wù)器端的任務(wù),通過(guò)Domino ORB,來(lái)使得Domino Server與Java applets交互,雙方使用IIOP來(lái)交互和交換對象數據。
IOR:
IOR,Interoperable Object Reference。
實(shí)際上,就是Domino服務(wù)器上的一個(gè)文件diiop_ior.txt的內容,類(lèi)似于:
IOR:01012d032900000049444c3a6c6f………………………
,它在c:\lotus\domino\data\domino\html文件夾下。
客戶(hù)端java程序向domino服務(wù)器發(fā)出CORBA請求,服務(wù)器通過(guò)HTTP協(xié)議返回給客戶(hù)端IOR字符串,之后客戶(hù)端通過(guò)IIOP協(xié)議與服務(wù)器進(jìn)行通訊。
從這一點(diǎn)來(lái)看,IOR 實(shí)際上是一個(gè)對象的字符串編碼,包含對Domino服務(wù)器的 CORBA 訪(fǎng)問(wèn)的識別信息??蛻?hù)端java程序將字符串 IOR 解碼,就可以用它來(lái)尋找到對應的主機并建立遠程會(huì )話(huà)了。
Domino對象
Domino對象類(lèi)的結構基于包容模型,包容模型定義了對象的范圍。容器對象通常被用來(lái)訪(fǎng)問(wèn)它所包含的子對象。
關(guān)閉一個(gè)容器對象意味著(zhù)其包含的全部子對象也將被關(guān)閉。例如,你建立了一個(gè)Database對象,使用它創(chuàng )建了一個(gè)Document對象,如果關(guān)閉了 Database對象,Document 對象也會(huì )隨之關(guān)閉。如果容器對象超時(shí),它將會(huì )被自動(dòng)關(guān)閉,其包含的對象也將被自動(dòng)關(guān)閉。因此你應該在容器對象超時(shí)或關(guān)閉前保存你的任何改變。
Domino Database:
Domino中的Database,指的是在一個(gè)名字下存儲的,一個(gè)集合,包含了Document以及相應的form、view和folder。Java中有lotus.domino.Database。
我們通??梢酝ㄟ^(guò)session對象的getDatabase方法,或者DbDirectory對象的getFirstDatabase/ getNextDatabase方法,來(lái)獲取Database對象的實(shí)例。
Domino View:
Database集合中有著(zhù)各種View。Java中有lotus.domino.View??梢酝ㄟ^(guò)Database對象的getView方法,來(lái)獲取View對象的實(shí)例。
Domino Document:
Domino中的Document,指的是在一個(gè)Database的一個(gè)條目,包含了fileds,text,numbers,graphics等等。Java中有lotus.domino.Document。
可以通過(guò)Database對象的getView方法,來(lái)獲取View對象的實(shí)例。
環(huán)境準備
客戶(hù)端java開(kāi)發(fā):
安裝Lotus Notes Client。
安裝Eclipse 3.1 with Eclipse-JDT-SDK。
安裝JRE 1.3.1。Lotus Notes/Domino 的R5/6版本使用的是 Java 1.3.1,所以必須安裝該軟件以使用正確的版本來(lái)編譯項目。(Lotus Notes/Domino 7 使用 JDK 1.4。)雖然許多 Java 代理和程序都可以編譯,而且沒(méi)什么問(wèn)題,但可能會(huì )陷入另一些問(wèn)題,比如使用一個(gè) JDK 版本構建程序,卻在另一個(gè)版本上運行。
從服務(wù)器端Lotus目錄下復制NCSO.jar以及NCSO.cab文件。遠端訪(fǎng)問(wèn)Domino Server,需要這個(gè)jar包。
Domino 提供了兩個(gè) JAR 文件,用于編程訪(fǎng)問(wèn) Domino 對象。這兩個(gè)文件是 Notes.jar 和 NCSO.jar。Notes.jar 用來(lái)訪(fǎng)問(wèn) 本地的 Domino 服務(wù)器(此時(shí) Lotus Domino 和 Java 程序運行在相同的服務(wù)器上)。NCSO.jar 包含了用來(lái)訪(fǎng)問(wèn)遠程服務(wù)器的其他 CORBA/IIOP 代碼。
在決定使用哪個(gè) JAR 文件時(shí),請考慮以下因素:
運行的 Java 程序和 Lotus Domino 的相對關(guān)系如何?如果它們運行在相同的機器上,那么使用 Notes.jar 可以獲得更好的性能。 您關(guān)心可擴展性嗎?即使現在您是在相同的機器上運行 Java 程序(單獨的 Java 程序和非 J2EE 的程序)和 Lotus Domino,將來(lái)您可能會(huì )發(fā)現需要將其擴展到專(zhuān)用的服務(wù)器上。在這種情況中,請使用 NCSO.jar ,這樣可以獲得更好的適應能力。 Java 程序要在一個(gè)應用服務(wù)器上運行嗎?在 WebSphere 的情況中,即使它與 Lotus Domino 在相同的機器上,也需要使用 NCSO.jar。
如果你不用超級管理員用戶(hù)名密碼創(chuàng )建連接session,而是采用Domino Server ID,那么請從Domino服務(wù)器上Lotus目錄下復制一個(gè)server.id文件以備用。
如果你想直接使用diiop_ior.txt,把這個(gè)diiop_ior.txt復制到本地。
Domino服務(wù)器端配置:
必須配置的項目:
必須設置 Domino 服務(wù)器監聽(tīng) IIOP 請求:
首先確保安裝了DIIOP,你可以在安裝過(guò)程中選擇DIIOP,這樣當安裝結束,啟動(dòng)Domino Server Console時(shí),就會(huì )看到提示“
DIIOP Server     Listen for connect requests on TCP Port:63148
DIIOP Server     Ultility task”。
可以在 Domino Console中執行 show task 或 load diiop 命令,可以幫助判斷現在是否已經(jīng)安裝了 DIIOP。如果還沒(méi)有安裝,請從 Domino 安裝光盤(pán)上安裝 DIIOP。
否則,就要修改lotus目錄下的Notes.ini文件了。找到以ServerTask開(kāi)頭的一行,找找看等號后面的字符串中是否有DIIOP,如果沒(méi)有,就加上一個(gè),然后重新啟動(dòng)Domino Server。這樣,Domino啟動(dòng)時(shí)就會(huì )自動(dòng)加載DIIOP。
ServerTask一行類(lèi)似于:
ServerTasks=Update,Replica,Router,AMgr, AdminP,CalConn,Sched,DIIOP,HTTP,LDAP
如何獲取IOR:
在 DIIOP 進(jìn)程啟動(dòng)時(shí),它在 Domino HTTP 根目錄(Windows 中 Domino 默認的安裝目錄為 C:\lotus\domino\data\domino\html)中創(chuàng )建一個(gè)名為 diiop_ior.txt 的 IOR(Internet Object Reference)對象。
如何得到這個(gè)diiop_ior.txt內容(也就是IOR了),有兩個(gè)辦法:
第一個(gè)就是,您通過(guò)HTTP方式向服務(wù)器請求這個(gè)文件。那么這個(gè)時(shí)候,如果您使用 Lotus Domino 作為 HTTP 服務(wù)器,就必須告訴 DIIOP 將這些文件放到您的 HTTP 服務(wù)器的根 HTML 目錄中。配置方法如下所示:
1.        運行Domino Admin 6,點(diǎn)擊“XXX Domain”圖標,打開(kāi) Domino Server 文檔。
2.        選擇 Internet Protocols 屬性頁(yè) - DIIOP 子屬性頁(yè)。
3.        在 External HTML directory 字段中,輸入非 Domino HTTP 服務(wù)器的根 HTML 目錄的完整路徑名。
4.        保存這個(gè) Server 文檔,并重新啟動(dòng) DIIOP。
第二個(gè)辦法,是把這個(gè)diiop_ior.txt復制到客戶(hù)端機器上,直接使用。
TCP/IP連接檢查:
遠程訪(fǎng)問(wèn)還需要設置 Domino Server和客戶(hù)端進(jìn)行 TCP/IP 連接。Domino Server必須能夠通過(guò) TCP/IP 進(jìn)行訪(fǎng)問(wèn)。必須能夠用 Internet 名稱(chēng)從客戶(hù)端ping 到服務(wù)器。
DIIOP設置:
檢查 Domino Directory 中 Server 文檔。轉至 Ports 選項卡,然后轉向 Internet Ports 選項卡。查看 Web 選項卡(用于 HTTP)并找到 DIIOP 選項卡。這些部分有用于指定端口號以及啟用/禁用端口的字段。通常,HTTP 的端口號是 80,DIIOP 的端口號是 63148。下圖顯示了 Internet Ports--DIIOP 選項卡:
No.
Items
Descriptions
1
Name and Password
DIIOP 驗證需要名稱(chēng)和密碼
2
Anonymous
DIIOP 驗證不需要名稱(chēng)和密碼
3
Enforce server access settings
DIIOP 使用 Security 選項卡下的 Server Access 設置
如果訪(fǎng)問(wèn)數據庫時(shí)不知道文件名稱(chēng)(例如,要使用 DbDirectory.getFirstDatabase),那么必須允許通過(guò)網(wǎng)絡(luò )瀏覽文件名。轉至 Internet Protocols 選項卡、HTTP 選項卡和 R5 Basics 選項卡。然后將“Allow HTTP clients to browse databases”設為 Yes。
配置權限:
必須給你當前建立session的用戶(hù)配置權限,否則你將會(huì )遇到下面的錯誤:
NotesException: You must have permission to sign documents for server based agents
at lotus.domino.NotesExceptionHelper.read(Unknown Source)
at lotus.domino.NotesExceptionHolder._read(Unknown Source)
at lotus.priv.CORBA.iiop.RepImpl.invoke(Unknown Source)
at lotus.priv.CORBA.portable.ObjectImpl._invoke(Unknown Source)
at lotus.domino.corba._IDocumentStub.send(Unknown Source)
at lotus.domino.cso.Document.send(Unknown Source)
at SendMail.send(SendMail.java:203)
at SendMail.main(SendMail.java:28)
轉至 Security 選項卡,找到“Programmability  Restrictions”,在“Run unrestricted methods and operations:”和“Sign agents to run on behalf of someone else:”后面輸入你的用戶(hù)名:
總之,如果你遇到了權限錯誤,就到這里來(lái)配置。
開(kāi)始編寫(xiě)
Add External JARs:
在Eclipse 3.1,選中你的項目,右鍵菜單中“Build Path”à“Add External Archives”,在文件選擇對話(huà)框中找到并選中你前面復制到本地的NCSO.jar,如下圖所示。
添加了 JAR 文件之后,可以使用項目中 Notes Java API 定義的類(lèi)和接口。 Domino Designer on-line help 中有關(guān)于 Notes Java API 的文檔。
然后選擇 JRE System Library采用1.3.1版本的。
獲取IOR:
首先,我們去獲取IOR。
還是前面說(shuō)過(guò)的兩種辦法。
第一種,與Domino Server聯(lián)系獲?。?div style="height:15px;">
Code
String dominoHost = "192.168.1.223";  // 這里填寫(xiě)主機名或IP地址
String strIOR = null;
URL url = new URL("http://" + dominoHost + "/diiop_ior.txt");
InputStream in = url.openStream();
BufferedReader br = new BufferedReader(new InputStreamReader(in));
for (boolean bExit = false; !bExit; ) {
String line = br.readLine();
if (line == null) {
bExit = true;
}
else {
if (strIOR == null)
strIOR = line;
else
strIOR = strIOR + line;
if (strIOR.startsWith("IOR:"))
bExit = true;
}
}
br.close();
第二種,取得本地文件:
Code
FileInputStream fin = new FileInputStream("c:\\diiop_ior.txt");
InputStreamReader fisr = new InputStreamReader(fin);
BufferedReader br = new BufferedReader(fisr);
String ior = br.readLine();
fin.close();
創(chuàng )建session:
我們調用NotesFactory的createSessionWithIOR方法,通過(guò)前面獲取的IOR,創(chuàng )建一個(gè)session對象。
Code
Session s = NotesFactory.createSessionWithIOR(ior,
"super admin" ,"admin password");
打開(kāi)names.nsf:
我們調用session的getDatabase方法,打開(kāi)指定服務(wù)器上的“names.nsf”數據庫。
Code
final static String DB_NAMES = "names.nsf";
Database dbCache = s.getDatabase(s.getServerName(),
DB_NAMES, false);
得到Users View:
我們調用Database的getView方法,打開(kāi)指定數據庫上的“($Users)”視圖。
Code
View view = dbCache.getView("($Users)");
遍歷Users View:
我們可以遍歷指定數據庫上的“($Users)”視圖,得到每一個(gè)用戶(hù)的Document。
也可以指定一個(gè)用戶(hù),專(zhuān)門(mén)取得他的Mail File,
Code
Document docKey = view.getDocumentByKey("zheng yun");
if (docKey == null)
System.out.println("docKey not found!");
else
{
strMailFile = docKey.getItemValueString("MailFile");
if (strMailFile == null)
System.out.println("strMailFile is null!");
else
System.out.println("strMailFile = " + strMailFile);
}
輸出結果就是:mail\zyun.nsf或者mail\zyun。
這樣,我們就知道了該用戶(hù)的郵箱所在的數據庫文件的路徑了。
打開(kāi)郵箱數據庫文件:
知道了一名用戶(hù)的郵箱文件名稱(chēng),我們可以再用session的getDatabase方法打開(kāi)該數據庫:
Code
Database dbMail = s.getDatabase(s.getServerName(),
"mail\\zyun.nsf", false);
if(dbMail == null)
System.out.println("cannot open database");
遍歷郵箱數據庫的所有Document:
根據DocumentCollection dc = dbMail.getAllDocuments();我們獲得了該數據庫中存儲的所有Document的集合,這就是所有的郵件。于是可以遍歷了:
Code
if (dbMail != null)
{
DocumentCollection dc = dbMail.getAllDocuments();
System.out.println("Mail database : " +
dbMail.getTitle() + " is " +
((int)(dbMail.getSize()/1024)) + "KB long and has " +
dc.getCount() + " documents");
String fn = dbMail.getFileName();
String title = dbMail.getTitle();
System.out.println(fn.toUpperCase() + " - " + title);
Document doc = dc.getFirstDocument();
while (doc != null) {
System.out.println(
doc.getItemValueString("Subject"));
System.out.println("~~~~~~~~~~~~~~~~~~~~\r\n");
System.out.println("From=" + doc.getItemValueString("From"));
System.out.println("~~~~~~~~~~~~~~~~~~~~\r\n");
System.out.println("Body=" + doc.getItemValueString("Body"));
System.out.println("~~~~~~~~~~~~~~~~~~~~\r\n");
String readFlag = doc.getItemValueString("Readed");
if(readFlag == null || readFlag!= "1" )
{
doc.appendItemValue("Readed ",
"1");
if (doc.save())
System.out.println("Document created and saved");
else
System.out.println("Something went wrong");
}
else
System.out.println("發(fā)現已經(jīng)打上了標記!");
String docNoteID = doc.getNoteID();
System.out.println("NoteID = " + docNoteID);
String docNoteURL = doc.getNotesURL();
System.out.println("NoteURL = " + docNoteURL);
doc.recycle();
doc = dc.getNextDocument(); }
我們通過(guò)String readFlag = doc.getItemValueString("Readed");可以獲得這個(gè)郵件的“Readed”字段(自定義字段)。如果這個(gè)字段不存在,說(shuō)明我們是第一次瀏覽該封郵件。這樣的話(huà),我們通過(guò)doc.appendItemValue("Readed ", "1");以及doc.save(),給該封郵件增加這個(gè)已瀏覽標示字段。
另外,轉《通過(guò)JAVA-CORBA訪(fǎng)問(wèn)Domino》中一段很有幫助的話(huà):
如何從lotus.domino.NotesException 中獲取錯誤信息:
在你編寫(xiě)domino的java/corba應用程序時(shí),不可避免的要同異常處理打交道,NotesException當然是每個(gè)開(kāi)發(fā)人員都不愿見(jiàn)到的但又不得不經(jīng)常面對的問(wèn)題。
如果你在寫(xiě)程序時(shí)盡是簡(jiǎn)單的采用
try{
….
}catch(Exception e){
e.printStackTrace();
}
的形式捕捉異常,那么一旦代碼拋出異常,你將變得一籌莫展,因為屏幕上不會(huì )打印出任何對你提供幫助的信息,這方面的資料更是鳳毛翎角, 連IBM的官方文檔中都沒(méi)有豐富的錯誤信息提示。錯誤捕捉代碼應該這樣寫(xiě):
try{
….
}catch(Exception e){
if(ex instanceof lotus.domino.NotesException){
System.out.println( "通過(guò)CORBA訪(fǎng)問(wèn)數據庫發(fā)生錯誤,錯誤代碼為"
+((lotus.domino.NotesException)ex).id);
}
e. printStackTrace();
}
這是屏幕上將打印出錯誤代碼,有了錯誤代碼,我們還要知道錯誤代碼的含義,這就要到IDL文件中去查了。在corba.dll文件中NotesError這個(gè)接口定義了全部錯誤代碼(自己要做一下簡(jiǎn)單的加法才能知道那里面錯誤代碼的具體值),錯誤代碼的變量名正是錯誤信息。這樣你便可以對出現的問(wèn)題了然于胸了,對你解決突發(fā)性事件很有幫助。
參考資料:
1:《Java對Domino Objects的訪(fǎng)問(wèn)》,by Robert Perron,Steve
2:《用Java通過(guò)DIIOP遠程操作Domino服務(wù)器》
3:《通過(guò)JAVA-CORBA訪(fǎng)問(wèn)Domino》
4:《LotusNotes和Eclipse管理和運行Java程序》
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Java中通過(guò)Notes API訪(fǎng)問(wèn)Domino數據庫
Lotus Domino 和 IBM WebSphere 集成解決方案: Domino JSP 標簽庫
理解 IBM Lotus Domino 郵件數據庫的限額
如何在 Lotus Domino V8.5 中設置和啟用 Domino 附件和對象服務(wù)(D...
Common Object Request Broker Architecture
Lotus]NSD is running 問(wèn)題
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久