在上篇中介绍了从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()。
分享到:
相关推荐
Java 访问 Domino 对象需要首先连接到 Domino 服务器,然后获取目录对象,以便访问到对应的 Domino 对象。 Domino 消息处理概述 Domino 消息处理是指 Domino 中的消息处理机制。Domino 服务器可以处理各种类型的...
Java远程访问Domino邮箱数据是通过使用Lotus Domino Java API(Lotus Domino JNA或Lotus Domino Access for Java)来实现的。这个过程涉及到多个步骤和技术,包括理解Lotus Domino的架构、设置Java环境以及使用特定...
Lotus Domino Java 代理获取传递值 JSON Lotus Domino 是一种基于Notes技术的服务器端应用程序, Lotus Domino Java 代理是指在 Domino 服务器上运行的 Java 代理程序,可以用来处理用户请求、提供数据服务等。今天...
java访问domino,通过http访问Domino,java快速访问Domino,java集成lotus domino 完全提供源码 界面请查阅 https://blog.csdn.net/weijia3624/article/details/113108704
总结起来,Java连接Lotus Domino邮件服务器并读取邮件内容和附件涉及的主要知识点包括:JNDI或LotusJCA连接、Domino API的使用、数据库操作、邮件和附件的读取、日期转换以及数据模型的设计。通过理解和运用这些知识...
### Java调试Domino邮件常见问题 #### 背景与目的 在企业级应用开发过程中,经常需要通过Java来调用Domino服务器发送邮件。为了确保邮件能够顺利发送,需要进行一系列配置及调试工作,包括开启Domino服务器的DIIOP...
在IT领域,Java是一种广泛使用的编程语言,而Lotus Domino是一种流行的企业级应用平台,尤其在协同工作和信息管理方面。本压缩包“java访问domino数据库.rar”提供了关于如何利用Java来访问和操作Domino数据库的重要...
这篇文档将详细介绍如何使用Java与Lotus Domino进行交互,并基于提供的压缩包文件内容展开讨论。 首先,Java连接到Domino通常涉及以下知识点: 1. **JDBC驱动**:尽管Lotus Domino本身并不直接支持JDBC(Java ...
lotus domnio java代理获取domino安装路径
以下是一个使用Java读取Domino数据库并将数据写入XML文件的示例代码: ```java package test; import lotus.domino.*; import java.util.*; import java.io.*; public class ReadThread1 implements Runnable { ...
- Java API为开发者提供了通过Java应用程序操作Domino数据库的能力,使得可以在Java应用中实现对Domino数据的增删查改等功能。 3. **基本概念**: - **NotesThread**: 用于初始化和清理线程环境。 - **Sessions*...
NCSO.jar 在 Domino 服务器或 Domino Designer 的数据目录下,domino\java 子目录中。 本地调用使用 createSession 时,没有参数、第一个参数为 null、或第一个参数为空字符串都表示本地调用。例如: Session s = ...
Notes.jar lotus.domino.* java连接domino 没有分数的可以到 http://www.ibm.com/developerworks/apps/download/index.jsp?contentid=50943&filename=DominoJSPArticle.zip&method=http&locale=worldwide
在提供的压缩包文件中,"flash在domino中的使用"可能包含有关如何在Domino环境中使用Flash的详细指南,"java在domino中的使用"可能会讲解如何创建和部署Java Web服务,而"Webservice在domino中的使用"则可能涵盖了...
2. **JavaAgent类**:在Domino环境下,JavaAgent是一种特殊的Java类,用于执行特定的任务,如定时任务或响应数据库事件。 3. **Domino API**:这是用于与Domino服务器交互的API集,包括对数据库、文档、视图等对象的...
这是一个java通过domino的diiop连接domino的类。希望对大家有用
当我们谈论“Domino的Java编程”时,是指使用Java语言来操作和扩展Domino的功能。Java为开发人员提供了丰富的API,可以方便地访问和操作Domino的各个组件。以下是一些主要的Java编程概念和步骤: **1. Domino对象**...
Java对Domino的访问是IBM Lotus Domino开发中的一个重要主题,它允许开发者利用Java语言与Domino服务器进行交互,实现各种功能,如数据存取、邮件处理、应用逻辑控制等。在IBM官网上,这一主题被详细解读并分为上下...
3. **访问Notes API**:使用Lotus Domino Java API,可以与Notes数据进行交互,如打开、读取、更新和删除文档。 四、Java在Domino中的应用场景 1. **数据处理**:Java可以高效地处理大量数据,例如批量更新数据库...
在本场景中,我们将深入探讨如何使用Java Mail API来访问Lotus Domino邮箱系统。Lotus Domino是由IBM开发的企业级协作平台,其中包含了电子邮件、日历、任务等功能。 首先,为了与Lotus Domino服务器进行交互,你...