无法加载中间件层';com.sap.mw.jco.rfc.MiddlewareRFC';

无法加载中间件层';com.sap.mw.jco.rfc.MiddlewareRFC';,sap,jco,Sap,Jco,我使用Sap Jco连接Sap数据库,前端为Java(JSF),连接Sap时使用: try { mConnection =JCO.createClient("400", // SAP client "c3026902", // userid "********", // password "EN", // language "iwdf5020", // host name "00"); // system number mConnection.connect(); } c

我使用Sap Jco连接Sap数据库,前端为Java(JSF),连接Sap时使用:

try {
 mConnection =JCO.createClient("400", // SAP client
  "c3026902", // userid
  "********", // password
  "EN", // language
  "iwdf5020", // host name
  "00"); // system number
 mConnection.connect();
}
catch (Exception ex) {
 ex.printStackTrace();
 System.exit(1);
}
我面临的问题是,当第一次运行应用程序时,会显示数据,但当我重新运行时,它会显示“无法加载中间件层'com.sap.mw.jco.rfc.MiddlewareRFC'”


有人能帮我解决这个问题吗????

这听起来好像API无法加载本机驱动程序文件。 SAP Java Connector由一个执行实际通信的本机运行时部分和一个用Java API包装此功能的Java API组成。 Java API位于sapjco.jar中,本机驱动程序位于例如librfc32.dll和sapjcorfc.dll中的windows上。 将这些dll放入您的系统路径(例如windows:C:\windows\system32),它应该会运行

干杯
Sebastian

您的DLL是否位于Windows system32文件夹中?如果是这样,您是否可能使用了错误的体系结构?(32位上的x64 DLL,反之亦然)
此外,DLL是否与JavaAPI的版本相同?如果安装了SAP GUI,可能会有较旧的DLL。

定义SAP连接:

对于sapjco库的3,0版,有大量有用的信息。要创建连接,请按照中的说明进行操作:

您应该考虑以下几点:

将dll文件放在与jar相同的位置。 dll必须是适合您的操作系统和体系结构的正确版本,否则将出现本机库错误

创建到服务器的连接的代码示例

public class StepByStepClient
{
    static String DESTINATION_NAME1 = "ABAP_AS_WITHOUT_POOL";
    static String DESTINATION_NAME2 = "ABAP_AS_WITH_POOL";
    static
    {
        Properties connectProperties = new Properties();
        connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST, "ls4065");
        connectProperties.setProperty(DestinationDataProvider.JCO_SYSNR,  "85");
        connectProperties.setProperty(DestinationDataProvider.JCO_CLIENT, "800");
        connectProperties.setProperty(DestinationDataProvider.JCO_USER,   "homofarber");
        connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD, "laska");
        connectProperties.setProperty(DestinationDataProvider.JCO_LANG,   "en");
        createDestinationDataFile(DESTINATION_NAME1, connectProperties);
        connectProperties.setProperty(DestinationDataProvider.JCO_POOL_CAPACITY, "3");
        connectProperties.setProperty(DestinationDataProvider.JCO_PEAK_LIMIT,    "10");
        createDestinationDataFile(DESTINATION_NAME2, connectProperties);

    }

    static void createDestinationDataFile(String destinationName, Properties connectProperties)
    {
        File destCfg = new File(destinationName+".jcoDestination");
        try
        {
            FileOutputStream fos = new FileOutputStream(destCfg, false);
            connectProperties.store(fos, "for tests only !");
            fos.close();
        }
        catch (Exception e)
        {
            throw new RuntimeException("Unable to create the destination files", e);
        }
    }


    public static void step1Connect() throws JCoException
    {
        JCoDestination destination =    JCoDestinationManager.getDestination(DESTINATION_NAME1);
        System.out.println("Attributes:");
        System.out.println(destination.getAttributes());
        System.out.println();
    }
}
在SAPJco 3.0中,连接是根据“目的地”中包含的信息构建的

文档示例使用属性文件保存“目的地”。但是,保留连接信息是一种不安全的方式。正如文档中高亮段落所示,您可以在下一个链接中看到


如果您创建自定义“DestinationDataProvider”,则可以在数据库或任何其他存储系统上保留连接信息。在SAPJco库提供的示例中,有一个如何创建自定义DestinationDataProvider的示例。

感谢您的回复Sebastian。.我已经尝试过这样做,但仍然是一样的。