我正在尝试从使用 eclipse(indigo、jdk1.7)的 java web 应用程序连接 Lotus Notes Domino (8.5.1) 对象。这就是我所做的: 1.在eclipse的Java Build Path的Librairies中添加notes.jar, 2. 将“C:\Program Files (x86)\IBM\Lotus\Notes”的路径变量添加到我本地计算机的环境变量路径中。 然后我在 Eclipse 中创建了这个简单的 Java 代码,如下所示:
import lotus.domino.*;
public class platform3
{
public static void main(String argv[])
{
try
{
NotesThread.sinitThread();
Session s = NotesFactory.createSession();
String p = s.getPlatform();
System.out.println("Platform = " + p);
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
NotesThread.stermThread();
}
}
}
上面的代码编译没有问题,但是当我运行的时候,却出现了这个错误: 线程“main”中的异常 java.lang.UnsatisfiedLinkError:C:\Program Files (x86)\IBM\Lotus\Notes\nlsxbe.dll:无法在 AMD 64 位平台上加载 IA 32 位 .dll 我在网上查了一下,好像Lotus Domino 8.5.1是32位的,而我的java项目(jdk1.7)是64位的,所以不兼容。但我无法将我的 java (eclipse) 更改为 32 位,因为我需要它来开发 64 位 Web 项目。 有人知道如何在不将我的 Java 从 64 位更改为 32 位的情况下使其工作吗?
最佳答案
正如@maksimov 在评论中指出的那样,64 位 JVM 无法加载 32 位 Notes DLL。然而,有一个 64 位版本的 DLL,但您必须在您的机器上以及将运行 Web 应用程序的任何机器上安装和配置 Lotus Domino 服务器(64 位 Windows 版本)。您只需在每台机器上运行一次 Domino 服务器,即可对其进行全面配置。为了让您的代码访问 DLL,它不必一直运行,但您必须保持安装状态。但是,您必须与管理您的 IBM 关系的任何人核实,并可能与 IBM 核实,以确定在以这种方式安装 Domino 服务器代码之前是否存在任何许可和成本影响。 (进一步注意:为了在机器上干净地安装 64 位 Domino 服务器代码并确保该特定版本的 nlsxbe.dll 是您的代码加载的版本,最好卸载并彻底清理现有的 32 位 Notes 客户端安装。通过清理,我将删除 lotus.ini 文件,以及卸载后可能遗留的所有 notes.ini 文件和与 Notes 相关的注册表项。)
还有另一种选择。您的代码在 notes.jar 中使用“本地”版本的 Notes Java API。还有一个 CORBA/IIOP 版本的 API,它不使用任何 Notes 或 Dominbo DLL。事实上,它不需要安装任何 Lotus 代码,也没有许可方面的问题。为此,您只需要将 NCSO.jar 的副本添加到您的项目中。您确实需要注意,API 的 NCSO.jar 版本的功能与本地版本略有不同,设置 session 的代码略有不同,身份验证不依赖于 Notes ID 文件,并且 Domino 服务器您连接到的必须正在运行 IIOP 任务——默认情况下不会是这种情况,因此您可能必须与管理这些服务器的人员协商。
注意 - 删除了建议使用 OpenNTF API 作为替代方案的更新。这只是暂时的困惑。它不可能有帮助。
关于java.lang.UnsatisfiedLinkError : C:\Program Files (x86)\IBM\Lotus\Notes\nlsxbe. dll AMD 64 位平台上的 : Can't load IA 32-bit . dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27868284/