首页 > 编程开发 > JAVA访问IBM Domino服务器(java,diiop)

JAVA访问IBM Domino服务器(java,diiop)

2010年4月19日 liangdi 发表评论 阅读评论

由于项目的需要,要对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/

分类: 编程开发 标签: , , ,
  1. 2010年8月12日17:47 | #1

    Good brief and this post helped me alot in my college assignement. Say thank you you on your information.

  1. 本文目前尚无任何 trackbacks 和 pingbacks.