尝试通过Java应用程序访问Lotus DB - 获取错误消息“XXX.nsf尚未打开”

时间:2012-04-20 07:05:59

标签: java lotus-notes

我正在尝试从外部Java应用程序连接到Lotus 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

我也尝试过使用IsOpenopen方法,但没有运气。

5 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

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

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

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

答案 2 :(得分: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)。

答案 3 :(得分:1)

出于好奇,打印是什么:

session.getUserName();

..在getCurrentAccessLevel()展示之前?是否有一个含糊不清的用户名,你最终被认证为你不期望的人?

答案 4 :(得分:0)

我遇到了同样的错误

Database xxx.nsf has not been opened yet

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

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

我注意到在上面的问题中没有找到db路径,所以也许正在使用错误的斜杠。

令人恼火的部分是,而不是返回错误消息'找不到文件',而事实上它无法找到,因此NotesException消息是pathdbname.nsf has not been opened yet ...

相关问题