4

我正在尝试从外部 Java 应用程序连接到 Lotus DB - 我的代码对位于我的测试(本地)服务器上的数据库完美运行,但在针对生产 DB 运行时失败(不返回数据)。

Diiop正在生产服务器上运行,我拥有生产数据库的编辑器访问权限。

我可以通过我的 Java 代码创建与 Domino 服务器的会话,但无法打开 Lotus DB。

Session session = NotesFactory.createSession("<Server>","UserID","password"); 
System.out.println("connected");
Database db = session.getDatabase("Server","<DB Path>" );
System.out.println("Access level: "+ db.getCurrentAccessLevel());
View vw = db.getView("Viewname");

在与 Domino 服务器创建会话后,我尝试打开数据库,此时出现错误XXX.nsf has not been opened yet

我也尝试过使用IsOpenandopen方法,但没有成功。

4

5 回答 5

2

如果数据库的 ACL 禁止 Internet 访问(这意味着 http 任务),您的数据库将不会以 Java 代码打开。检查 ACL 的高级选项卡,属性“最大 Internet 名称和密码”。至少应该是 Depositor 才能打开它,或者 Reader 才能从中读取数据。

于 2012-04-20T09:43:33.690 回答
2

要使 diiop 工作,服务器必须启用允许 HTTP 客户端浏览数据库设置。此设置可在 中找到Server document->Internet Protocols->HTTP->R5 Basics。值得注意的是,即使在现代 Domino 服务器实例中,此设置也会生效。我的猜测是此设置的当前值(设置为“否”)是您的问题所在。

您还应该确保正确配置了 diiop。对此的第一个测试是访问http://hostname.domain.com/diiop_ior.txt。访问此 URL 应该会显示一个页面,其中包含一个简单的文本字符串,其中包含 32 个(看似)随机字符。

当我需要让 diiop 工作时,我通常会参考这个页面。

于 2012-04-23T08:46:11.763 回答
1

只是出于好奇,打印是什么:

session.getUserName();

..就在getCurrentAccessLevel()演出前?是否有一个模棱两可的用户名,并且您最终被认证为您不期望的人?

于 2012-04-20T10:15:32.747 回答
1

首先尝试使用代码中的名称/密码通过浏览器访问数据库。如果这不起作用,要么 HTTP 未运行,要么存在与您的代码无关的另一个问题。

对于这样的问题,我从信息中心中的示例代码开始。

http://publib.boulder.ibm.com/infocenter/domhelp/v8r0/topic/com.ibm.designer.domino.main.doc/H_EXAMPLES_GETDATABASE_METHOD_JAVA.html

例如。

Database db = session.getDatabase("<SERVER>", "<DBNAME>");

if (!db.isOpen())

    System.out.println("DB does not exist.");

  else

    System.out.println("Title of database: \"" + db.getTitle()+ "\"") ;

看看是否打印出任何东西。

错误消息通常意味着数据库被服务器锁定或损坏。因此,请尝试另一个您知道必须有权访问的数据库(例如 names.nsf )。

于 2012-04-20T08:21:39.387 回答
0

我遇到了同样的错误

Database xxx.nsf has not been opened yet

我的问题是由于使用正斜杠而不是反斜杠。这更正了它:

var db = session.getDatabase(session.getServerName(), "path/dbname.nsf");

我注意到上述问题中没有任何地方确定了数据库路径,因此可能使用了错误的斜杠。

令人恼火的部分是,NotesException 消息不是返回错误消息“找不到文件”,而是pathdbname.nsf has not been opened yet实际上找不到它......

于 2015-02-25T23:09:18.677 回答