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

时间:2011-03-18 10:50:37

标签: 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();
}
catch (Exception ex) {
 ex.printStackTrace();
 System.exit(1);
}

问题我面临的问题是,第一次运行应用程序时,会显示数据,但是当我重新运行时,显示“无法加载中间件层'com.sap.mw.jco.rfc.MiddlewareRFC'”< / p>

任何人都可以帮我解决问题?????

3 个答案:

答案 0 :(得分:1)

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

干杯         塞巴斯蒂安

答案 1 :(得分:0)

您的DLL是否位于Windows system32文件夹中?如果是这样,你可能使用错误的架构? (32位上的x64 DLL,反之亦然) 此外,DLL是否与java api版本相同?如果安装了SAP GUI,则可能存在较旧的DLL。

答案 2 :(得分:0)

定义SAP连接:

对于sapjco库的3,0版,存在大量有用的信息。按照以下说明创建连接:

http://www.browseye.com/linkShare.html?url=http://help.sap.com/saphelp_nwpi711/helpdata/en/46/fb807cc7b46c30e10000000a1553f7/content.htm?bwsCriterion=%22Setting%20Up%20Connection%22&bwsMatch=1&bwsCriterion=%22Setting%20Up%20Connection%22&bwsMatch=1

您应该考虑以下几点:

将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中,连接是根据“目标”中包含的信息构建的。

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

http://help.sap.com/saphelp_nwpi711/helpdata/en/48/5fb9f9b523501ee10000000a421937/content.htm?bwsCriterion=%22In%20practice%20you%20should%20avoid%20this%20for%20security%20reasons.%22&bwsMatch=1

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