Java 到 Lotus Notes 的连接问题

Posted

技术标签:

【中文标题】Java 到 Lotus Notes 的连接问题【英文标题】:Java to Lotus Notes connection issue 【发布时间】:2018-10-31 07:31:21 【问题描述】:

我正在尝试将 Lotus Notes 数据库中的数据访问到外部 Java 程序中,但没有成功。

在我的笔记本电脑上,我配置了 IBM Domino 9.0.1 服务器,并在其中创建了一个演示数据库。我的目标是通过外部 Java 代码访问该数据库中的数据。我还在配置 Domino 服务器的同一台笔记本电脑上安装了 Netbeans 和 Eclipse。现在,我正在尝试使用 Notes.jar 包中提供的类访问我的 java 程序(netbeans/eclipse)中的演示 lotus notes 数据库,但无法打开数据库。

为了完成任务,我遵循了以下步骤:

将路径“C:\Program Files\IBM\Domino”添加到“Path”系统变量,并重新启动笔记本电脑。 在 Netbeans 中(也在 Eclipse 中尝试过),创建 Java 类(控制台应用程序),在类路径中添加 Notes.jar 文件(IBM/Domino/JVM/lib/ext/Notes.jar)(在 netbeans 中,添加 Notes.jar)。 jar 在 Resources 部分。在 Eclipse 中,将 Notes.jar 复制到 lib 文件夹中)。

在类中添加了以下代码: (假设 lotus.domino.* 已经在代码中导入)

    public static void main(String [] args)
    
        try
            NotesThread.sInitThread();
            //Case1
            Session session = NotesFactory.createSession()//Connect the server with server ID. Throws error 'Database has not been opened yet';
            //Also tried following options. Note that I have assigned full access/manager rights to anonymous user on the demo database
            //Case2
            //Session session = NotesFactory.createSession((String)null);//Same result as first one [NotesFactory.createSession()]
            //Case3
            //Session session = NotesFactory.createSession((String)null,"Romil Handoo/dev","My_Domino_Internet_Password");//Connect the server as Romil Handoo/dev login. Throws error- Invalid User Id/Password. I am giving correct ID/password
            //Case4
            //Session session = NotesFactory.createSession((String)null,"","");//Access with anonymous user. Throws error 'Database has not been opened yet'**
            Database dbDemo = session.getDatabase(session.getServer(), "demo/DemoDB.nsf");
            //session.getServer() is returning my server name, which is Development/home. 
            //Also tried these, but same result each time: 
            //session.getDatabase("localhost:9595","demo/DemoDB.nsf")
            //session.getDatabase("localhost","demo/DemoDB.nsf")
            //session.getDatabase("127.0.0.1:9595","demo/DemoDB.nsf")
            //session.getDatabase("127.0.0.1","demo/DemoDB.nsf")
            //session.getDatabase("","demo/DemoDB.nsf")
            //session.getDatabase((String)null,"demo/DemoDB.nsf")
            //Following line throws exception 'Database has not been opened yet'
            View vwDemo = dbDemo.getView("vwDemo");
        
        catch(Exception ex)
        
            System.out.println(ex.toString());
            //For case 1, case 2, and case 4, error message is 'Database has not been opened yet'
            //For case 3, error message is 'Invalid login id/password'

        
        finally
        
            NotesThread.stermThread();
        
    

请有人指导我如何通过外部 java 代码连接到 domino 数据库?对于所有这些步骤,我参考了页面https://www.ibm.com/support/knowledgecenter/en/SSVRGU_9.0.1/basic/H_NOTESDATABASE_CLASS_JAVA.html

非常感谢

【问题讨论】:

【参考方案1】:

检查 DemoDB.nsf 的 ACL。如果我不得不做出一个疯狂的猜测,我会说本地域服务器组位于 ACL 中,并且它被标记为“服务器组”,但是您的代码正在建立客户端连接,所以这就是案例 1、2、和4失败。如果不是这样,则可能是其他一些访问问题。

案例 3 失败,因为您提供的是 Internet 密码,而不是您的实际用户 ID 文件的密码。 (使用 Internet 密码仅适用于 NCSO.jar 和 IIOP 访问,不适用于 Notes.jar 和 NRPC 访问。)

【讨论】:

感谢@Richard 的观察。实际上在我的环境中,notes和internet密码是完全一样的,所以代码应该不会抛出不正确的id/password错误。 Richard,还询问您是否可以帮助我解决案例 1,2 和 4 的问题。我检查了数据库 ACL 并发现服务器组条目“LocanDomainServers”具有“经理”访问权限,并且“ “其他域服务器”“无权访问”。 即使密码相同,情况 3 仍然不起作用,因为您使用的是用户 name 和密码,而不是用户 id 文件和密码。通过 Notes.jar 的 NRPC 连接需要用户 ID 和密码。 在 ACL 中,将 LocalDomainServers 的“用户类型”下拉列表从“服务器组”更改为“未指定”。或者只是将服务器名称添加到 ACL 并使其成为“未指定”。如果这没有帮助,您可能需要检查许多事情。如果我为您咨询,我要做的第一件事是检查 session.username 的值,以确认您在评论中的假设,即您正在连接服务器 ID 文件。 谢谢理查德。我会试试这个。当我在此处打印“有效用户名”时,在案例 1 和案例 2 中显示服务器名称 (MyServerName/dev)。对于案例 4,它显示为“匿名”,案例 3 对我不起作用。

以上是关于Java 到 Lotus Notes 的连接问题的主要内容,如果未能解决你的问题,请参考以下文章

在 Lotus Notes 代理上管理不稳定的 SQL 连接

在 IIOP 连接后,Lotus Notes 连接器从副本运行代理

lotus notes8.5软件出现问题!!!

如何从 Lotus Notes Java 代理检查浏览器版本/名称?

42. Lotus Notes中的垃圾回收之Java

如何使用 Lotus Notes API 从 Java 创建和运行代理