在上篇中介绍了从JAVA中获取Domino数据库中的文档信息,但有一个缺点,就是必须要有本地Notes,即限制了只能在Windows下使用,在有些情况下,可能需要在其他操作系统中通过JAVA获取Domino数据,本文即为介绍在JAVA中使用CORBA实现跨操作系统访问Domino。本文介绍的Domino版本应该要在R5以上,R5以下版本未经验证,无法确认是否可行。注意,本文中需要使用lotus.domino.corba包,网络上找到这个库源码非常不容易,作者也是花费了不少时间才从国外一个小网站上下载到,如果有需要,请联系作者。Corba访问Domino过程比较复杂,大致如下:

String ior = http://127.0.0.1/diiop_ior.txt;

Properties props = new Properties();

props.put("org.openorb.orb.core.ORB", "org.openorb.orb.core.ORB");

ORB orb = ORB.init(new String[]{}, props);

// 通过 IOR 得到 IObjectServer 对象

org.omg.CORBA.Object obj = orb.string_to_object(ior);

IObjectServer ios = IObjectServerHelper.narrow(obj);

// 通过 IObjectServer 获得 ISession

ProtocolVersion maxVersion = new ProtocolVersion(IBase.DOM_MAJOR_MINIMUM_VERSION, IBase.DOM_MINOR_MINIMUM_VERSION);

ProtocolVersion minVersion = new ProtocolVersion(IBase.DOM_MAJOR_VERSION,IBase.DOM_MINOR_VERSION);

SessionData sd = ios.createSession(maxVersion, minVersion, ((CrawlTask)job.getCrawltask()).getAccount() , ((CrawlTask)job.getCrawltask()).getPassword());

session = sd.sesObject;

通过账号和密码访问登录Domino后获得session,然后通过session获得数据库信息,如下:

// 使用 ISession

dbCache = session.getDatabase(sd.serverName, properties.getProperty("database"), false);

dCdata = dbCache.db.getAllDocuments();//iDatabase.search("1=1", null, 10);

IDatabaseHolder idatabaseholder = new IDatabaseHolder();

IntHolder intholder = new IntHolder();

IDocument document = dCdata.dcObject.getFirstDocMDB(idatabaseholder, intholder);

一样是或得到document,类型为IDocument,dCdata.dcObject即是文档列表,对此对象遍历即可

document = dCdata.dcObject.getNextDocMDB(document ,idatabaseholder, intholder);

对IDocument对象的遍历也和DIIOP也有一些差别:

ItemData[] id = fieldDoc.getData().items;

for (int i = 0; i < id.length; i++) {

MetaType metaType = new MetaType(id[i].name,String.valueOf(id[i].type)) ;

ItemValue item = id[i].values;

if (id[i].type == 1280) { //表示是文本

metaType.setValue(item.StringValue()) ;

} else if (id[i].type == 1024) { //表示是时间

DateTime dateTime = item.TimeObject() ;

if(dateTime!=null){

metaType.setValue(String.valueOf(dateTime.toString())) ;

}

} else if (id[i].type == 768) { //表示是整型

metaType.setValue(String.valueOf(String.valueOf(item.DoubleValue()))) ;

} else if (id[i].type == 1) { //表示是rtf域

//获得RTF域的附件信息

} else{

metaType.setValue(item.StringValue()) ;

}

}

类型代码和上篇中介绍的都是一样的,但RTF域的附件信息获取方式不太一样,需要对items[i].RTObject对象进行进一步处理,处理过程如下:

IRichTextItem rtf = items[i].RTObject ;

if(item.StringValue()!=null){

outputText.getMetadata().add(items[i].name, item.StringValue()) ;

}else if(rtf.getValueAsString()!=null){

outputText.getMetadata().add(items[i].name, rtf.getValueAsString()) ;

}

{

NameAndObject[] ed = rtf.getEmbeddedObjects() ;

if(ed.length>0){

for(NameAndObject nameObject : ed){

EmbeddedData eo = document.getAttachment(nameObject.name) ;

if(eo!=null && eo.embedObject!=null && eo.embedObject.getFileSize()>0){

BooleanHolder holder = new BooleanHolder(true);

IntHolder inholder = new IntHolder();

byte[] data = null ;

java.io.ByteArrayOutputStream output = new java.io.ByteArrayOutputStream() ;

try{

while((data = eo.embedObject.getFile(inholder, holder))!=null && data.length>0){

output.write(data) ;

}

}catch(Exception ex){

ex.printStackTrace();

}

java.io.ByteArrayInputStream input = new ByteArrayInputStream(output.toByteArray()) ;

//获得输入流,自定义后续处理过程

input.close() ;

}

}

}

}

最后是关闭session,调用 session.recycle()。

Domino开发使用JAVA,起点R3使用JAVA获取Domino数据(上篇)相关推荐

  1. Java yahoo 雅虎 股票接口获取股票交易数据

    /*** 股票实体类* @ 2013.01.02*/ public class StockData {private String code; // 股票编码private String name; ...

  2. Windows驱动开发第10课(R3与R0通信交换数据第一节)

    首先,先解释一下R3与R0是什么意思,R是Ring的首字母(中文:环).在计算机技术里把对CPU的访问控制的权限抽象成一环套着一环,分为4个级别,Ring0-Ring3.Ring0层拥有最高的权限,在 ...

  3. java中available用法,java – 使用available()时没有获取整个数据

    我有时候在读取inputStream时没有获得整个数据(收到somtime完整数据). private String readInputStream(InputStream in) { Pushbac ...

  4. java调用企业微信接口---获取考勤数据

    Static和new的区别? static : 不需要创建实例可直接使用, 会直到程序关闭才会释放资源,类的一个成员被static修饰后,该成员就属于类的成员了,被所有对象共享. new 对象: 每次 ...

  5. java $.getjson_JQuery 获取json数据$.getJSON方法的实例代码

    jQuery系列 第八章 jQuery框架Ajax模块 第八章 jQuery框架Ajax模块 8.1 jQuery框架中的Ajax简介 Ajax技术的核心是XMLHTTPRequest对象,该对象是A ...

  6. java 请求url 返回数据_java后台发起get请求获取响应数据|chu

    本文实例为大家分享了java后台发起get请求获取响应数据,供大家参考,具体内容如下 学习记录: 话不多说直接上代码: package com.jl.chromeTest; import java.i ...

  7. Java企业搜索平台:起点R3(Rivulet ES) V5.0 使用简介

    最近接到的任务是搜索平台模块需求研究,网上搜到佛山一家专做企业搜索的公司开源的一个工程R3.关于起点R3企业搜索的相关介绍如下: 起点R3企业级搜索引擎是起点软件提供的企业搜索解决方案,支持企业环境下 ...

  8. domino流程图_OA实施工程师一线解读Java与Domino优劣

    南宁OA软件泛微运营中心云腾为您分享: 作为企业的CIO,不仅要面对企业内部的各类需求,还需要管理理念以及对市面上的信息化系统和技术了如指掌,否则很有可能在自己的职业生涯中划上遗憾的一笔.固然是吃一堑 ...

  9. java网络编程是java开发吗,22年最新

    凭借编程大牛最新版Java核心开发手册,掌握了能进阿里.面对市场需求缩水的时期,老关的朋友是如何拿到阿里offer的呢?别着急!今天就来分享一下我朋友的蜜拓蜜武器:阿里大牛整理的Java核心开发手 J ...

最新文章

  1. blf文件用什么软件打开_如何用皕杰流程创建一个blf演示流程文件?
  2. 技术大佬们都推荐的vim学习指南来了,值得收藏!
  3. 西里尔字 - 俄罗斯
  4. 最长回文子串动态规划_九章算法 | 微软面试题:最长回文子串
  5. inodemac_校园网客户端Mac版-Inode7.0 for mac下载 V7.0-PC6苹果网
  6. Vue3 Composition API(二)——computed、watchEffect、setup中使用ref
  7. sqlserver java odbc_Java JDBC------------------ODBC(SQLServer)链接
  8. 一些关于爱情的心理学事实
  9. 饭卡 01背包 DP
  10. 在Windows上安装Nexus
  11. python单引号双引号三引号_python中的单引号、双引号和三引号有何区别
  12. 拓端tecdat|Python中的Apriori关联算法-市场购物篮分析
  13. mysql 的 show profile 相关属性
  14. php redis stream,php redis-close() 之后为什么还能使用 $redis-get('key') 获取数据?
  15. 莫兰指数stata命令_一文读懂16个sp系列stata空间计量命令及应用
  16. 备查:ASCII码表
  17. ICT通信运营企业的重建之服务升级(三)----如何打造ICT服务满意度
  18. 英文论文写作小贴士(2)
  19. 【js】js获取今日和昨日0点和23点59分59秒
  20. 求生2本地服务器怎么修改参数,求生之路2服务器指令及难度参数设置

热门文章

  1. MAC显示/恢复隐藏文件
  2. 【状压DP】CQBZOJ3646 炼金术师
  3. 气相色谱几种定量方法的优缺点分析
  4. 数据库设计:SQL server 网上图书管理系统
  5. 高速公路智能化转型,阿里云高速云控平台如何赋能?
  6. 系统提示缺少xinput1_3.dll怎么办?
  7. HTML标签marquee实现滚动效果
  8. Windows tesseract-OCR 的安装和简单测试
  9. matlab计算潮差程序,航海气象与海洋学模拟题试题及答案 1
  10. c语言gets,getc,C++_C语言的getc()函数和gets()函数的使用对比,C语言getc()函数:从流中读取字 - phpStudy...