0

我正在使用 Sap Jco 连接到前端为 Java(JSF) 的 SAP 数据库,当我连接到 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'”

谁能帮我解决这个问题??????

4

3 回答 3

1

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

干杯塞巴斯蒂安

于 2011-03-19T12:32:09.247 回答
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 的示例。

于 2013-09-22T15:45:17.350 回答
0

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

于 2011-03-23T15:37:05.043 回答