JAVA访问IBM Domino服务器(java,diiop)
由于项目的需要,要对Domino服务器上的文档以及其附件做索引,提供搜索.所以自己也先整理一下思路.程序中使用DIIOP协议连接服务器(需要NCSO.jar),遍历视图中的文档,再读取其附件,以及需要建索引的字段,然后建索引,由于一个文档可能包含多个附件,所以要将各附件解析后h合并再建索引.
本文先完成对Domino文档以及其附件的读取.步骤比较简单
1.获得Sessio,需要用户,密码以及IOR.
Session session = NotesFactory.createSessionWithIOR(IOR, user, pass);
2.选择数据库和视图
Database db = session.getDatabase(null, “datastorge01.nsf”);
View view = db.getView(“(SWSearch_main)”);
3.遍历文档,读取字段信息以及拆解附件.
view.getFirstDocument();
view.getNextDocument(doc);
Vector attNames = session.evaluate(“@AttachmentNames”,doc);//附件
JAVA代码:
package notesdemo;
import java.io.File;
import java.util.Vector;
import lotus.domino.Database;
import lotus.domino.Document;
import lotus.domino.EmbeddedObject;
import lotus.domino.NotesException;
import lotus.domino.NotesFactory;
import lotus.domino.Session;
import lotus.domino.View;
public class Main {
public Integer attCount = 0;
public Long attSize = new Long(0);
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws NotesException {
// TODO code application logic here
String basePath ="/root/Desktop/notesfiles/";
Main demo = new Main();
Long t = System.currentTimeMillis();
System.out.println("开始:");
demo.Connection();
System.out.println("耗时: " + (System.currentTimeMillis()- t)/1000 + "秒 附件数量:" + demo.attCount + " 附件总大小:" + demo.attSize/1024/1024 + "MB");
}
public void Connection() throws NotesException{
String basePath ="/root/Desktop/notesfiles/";
String user= "username";
String pass="password";
//192.30.1.132
String IOR="IOR:010002022900000049444c3a6c6f7475732f646f6d696e6f2f636f7262612f494f626a6563745365727665723a312e3000000000010000000000000070000000010101020d0000003139322e33302e312e3133320000acf6310000000438353235363531612d656336382d313036632d656565302d303037653264323233336235004c6f7475734e4f490100010000000100000001000000140000000100020201000105000000000001010000000000";
//IOR="";
//本地
//IOR =NotesFactory.getIOR("192.168.126.128");
//IOR="IOR:0101af002900000049444c3a6c6f7475732f646f6d696e6f2f636f7262612f494f626a6563745365727665723a312e300000000001000000000000007400000001010100100000003139322e3136382e3132362e31323800acf60000310000000438353235363531612d656336382d313036632d656565302d303037653264323233336235004c6f7475734e4f490100010000000100000001000000140000000101af0001000105000000000001010000000000";
//IOR = NotesFactory.getIOP("192.168.1.105");
IOR = "IOR:0101af002900000049444c3a6c6f7475732f646f6d696e6f2f636f7262612f494f626a6563745365727665723a312e3000000000010000000000000070000000010101000e0000003139322e3136382e312e31303500acf6310000000438353235363531612d656336382d313036632d656565302d303037653264323233336235004c6f7475734e4f490100010000000100000001000000140000000101af0001000105000000000001010000000000";
try{
Session session = NotesFactory.createSessionWithIOR(IOR, user, pass);
Document doc;
Database db = session.getDatabase(null, "datastorge01.nsf");
View view = db.getView("(SWSearch_main)");
System.out.println("view = " + view);
doc = view.getFirstDocument();
int j =0;
while(doc !=null && attCount <100){
String UID =doc.getUniversalID();
Vector attNames = session.evaluate("@AttachmentNames",doc);
String author = doc.getItemValueString("txtCreator");
String title = doc.getItemValueString("txtTitle");
String lastUpdate = doc.getItemValueString("txtUpdate");
String txtSource = doc.getItemValueString("txtSource");
String txtDescription = doc.getItemValueString("txtDescription");
String txtKey = doc.getItemValueString("txtKey");
String txtSort = doc.getItemValueString("txtSort");
System.out.println("\n");
System.out.println("UID = " + UID);
System.out.println("文档信息: title:" + title + " 最后更新:" + lastUpdate + "Doc.lastModified:" + doc.getLastModified().toString());
if(txtDescription.length() >=10){
txtDescription = txtDescription.substring(0,10);
}
System.out.println("资料来源:" + txtSource + " 备注:" + txtDescription + " 关键字:" + txtKey + " 文档分类:" + txtSort);
for (int i = 0; i < attNames.size(); i++) {
if(true){
break;
}
String object = (String)attNames.elementAt(i);
EmbeddedObject obj = doc.getAttachment(object);
File p = new File(basePath + UID);
if(!p.exists()){
p.mkdir();
}
if(obj !=null){
this.attCount ++;
Long t = System.currentTimeMillis();
String attName = obj.getName();
obj.extractFile(p+ "/" +attName);
File attFile = new File(p+ "/" +attName);
System.out.println("文件路径: " + attFile.getCanonicalPath());
Long len = attFile.length();
this.attSize += len;
System.out.println("提取附件时间: "+ (System.currentTimeMillis()- t) + "毫秒" + " 附件大小:" + attFile.length()/1024 + "KB");
}
}
if(doc ==null){
break;
}
doc = view.getNextDocument(doc);
}
}catch(Exception ex){
ex.printStackTrace();
}
}
}
总得来说,DIIOP的接口还是比较简单的.
文章作者:liangdi 最后修改:2010.04.19 转载请注明来自:[自由的心灵]
原文链接:http://liangdi.icentos.net/2010/04/19/java_connect_domino_with_diiop/
Good brief and this post helped me alot in my college assignement. Say thank you you on your information.