java.lang.UnsatifiedLink错误:C:\Program Files(x86)\IBM\Lotus\Notes\nlsxbe.dll:Can';t在AMD 64位平台上加载IA 32位.dll

java.lang.UnsatifiedLink错误:C:\Program Files(x86)\IBM\Lotus\Notes\nlsxbe.dll:Can';t在AMD 64位平台上加载IA 32位.dll,java,eclipse,32bit-64bit,lotus-domino,Java,Eclipse,32bit 64bit,Lotus Domino,我试图从一个使用eclipse(indigo,jdk1.7)的java web应用程序连接LotusNotesDomino(8.5.1)对象。这就是我所做的: 1.将notes.jar添加到eclipse中的Java构建路径库中, 2.将路径变量“C:\Program Files(x86)\IBM\Lotus\Notes”添加到本地计算机环境变量的路径中。 然后,我在eclipse中创建了以下简单java代码: import lotus.domino.*; public class plat

我试图从一个使用eclipse(indigo,jdk1.7)的java web应用程序连接LotusNotesDomino(8.5.1)对象。这就是我所做的: 1.将notes.jar添加到eclipse中的Java构建路径库中, 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.UnsatifiedLink中出现异常错误:C:\Program Files(x86)\IBM\Lotus\Notes\nlsxbe.dll:无法在AMD 64位平台上加载IA 32位.dll 我从互联网上搜索,看起来LotusDomino8.5.1是32位的,而我的java项目(jdk1.7)是64位的,所以它们不兼容。但是我不能将java(eclipse)更改为32位,因为我需要它来开发64位web项目。
有人知道如何在不将java从64位更改为32位的情况下使其工作吗?

正如@maksimov在评论中指出的,64位JVM无法加载32位Notes DLL。然而,有一个64位版本的DLL,但是您必须在您的机器上以及运行web应用程序的任何机器上安装和配置LotusDomino服务器(64位Windows版本)。您只需在每台机器上运行一次Domino服务器,即可对其进行完全配置。它不必一直运行才能让代码访问DLL,但您必须让它保持安装状态。但是,在以这种方式安装Domino服务器代码之前,您必须与管理您的IBM关系的人(可能还有IBM)进行检查,以确定是否存在任何许可和成本影响。(还有一点需要注意:为了在机器上干净地安装64位Domino服务器代码,并确保特定版本的nlsxbe.dll是代码加载的版本,最好卸载并完全清理现有的32位Notes客户端安装y notes.ini文件和卸载后可能遗留的notes相关注册表项。)

还有另一种选择。您的代码正在Notes.jar中使用Notes Java API的“本地”版本。还有一个CORBA/IIOP版本的API,它不使用任何Notes或Dominbo DLL。事实上,它不需要安装任何Lotus代码,也不涉及许可问题。您所需要的只是添加到项目中的NCSO.jar的副本。您需要注意的是,API的NCSO.jar版本的功能与本地版本略有不同,设置会话的代码略有不同,身份验证不依赖Notes ID文件,并且您连接到的Domino服务器必须运行IIOP任务—默认情况下不是这样,因此,您可能需要与管理这些服务器的人员进行协商


注意-删除了一个建议使用OpenNTF API作为替代的更新。这是暂时的混乱。这不可能有帮助。

您不能用64位JVM加载i386库。您是否可以在amd64 JDK的旁边安装i386 JDK-仅用于此项目?将它们两个放在同一台机器上没有问题。非常感谢,正如我在帖子中提到的,我的java web项目是一个大型应用程序,它必须使用jdk64bit,此外,我请求连接Lotus是一个小要求,如果需要jdk32bit,我们可以将此要求更改为其他方式,我不希望这个需求对我的java项目有任何影响。嗨,Richard,看来要让它工作起来并不容易。正如我在文章中提到的,我的java web项目使用JDK64位,这是不能改变的,因为我的lotus连接是一个小需求。由于这个要求,我们的domino服务器可能没有配置为64位,因为它会影响所有公司员工使用的domino,我不认为domino管理员会喜欢这样做。CORBA/IIOP还需要配置domino服务器,我认为管理员也不愿意这样做。您是否在与整个公司使用的domino服务器相同的机器上运行web应用程序?我假设它们是不同的机器,因为这是正常的。如果它们是独立的机器,那么对其他所有人都没有影响,因为您可以在web应用程序机器上安装64位Domino服务器,而在主Domino服务器上保留32位。正如我所说,您甚至不必运行64位服务器,只需运行一次即可对其进行配置。在此之后,它可以保持关闭状态,但您的web应用程序代码仍然可以使用64位Domino API DLL。Domino 64位DLL与32位Domino服务器通信不会有问题。Domino软件被设计为无论版本、操作系统和位大小如何都可以进行互操作。如果这两台机器是分开的,您唯一要做的就是检查许可问题,看看您的组织是否需要为安装额外的服务器软件副本支付任何费用。实际上,它甚至不作为服务器运行;安装它只是为了成为web应用程序的客户端API DLL,但只有IBM可以告诉您许可的含义。再次感谢您的帮助,对于我们的案例,Java web应用程序与domino服务器位于不同的服务器机器上。所以基本上,让我们的Domino服务器32位机器位于Server1上,我的Java web应用程序位于Server2上,然后我必须在Server2上安装Domino(8.5.1)64位服务器,以便将Java web应用程序安装到用户notes.jar(64位)文件中。正如我提到的,考虑到许可问题,我们需要维护一个独立的Domino64位服务器,即使我们不需要运行它,我们也可以考虑其他方法。问题已经得到解决