java 无法加载中间件层“com.sap.mw.jco.rfc.MiddlewareRFC”

lawou6xi  于 2023-05-05  发布在  Java
关注(0)|答案(3)|浏览(274)

我使用SAP JCo连接到SAP系统的前端是Java(JSF),当我连接到SAP系统与下面的代码,我有一个问题时,第一次运行应用程序,数据显示,但当我重新运行它说
无法加载中间件层“com.sap.mw.jco.rfc.MiddlewareRFC”
谁能帮我解决这个问题?????
验证码:

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);
}
mxg2im7a

mxg2im7a1#

这听起来像是API无法加载本机驱动程序文件。SAP Java Connector由一个执行实际通信的本地运行时部分和一个使用java API Package 此功能的Java API组成。Java API位于sapjco.jar中,本地驱动程序位于librfc32.dll和sapjcorfc.dll中的Windows上。将这些dll文件放到您的系统路径中(例如windows:C:\WiNDOWS\system32),它应该运行。
干杯塞巴斯蒂安

jjhzyzn0

jjhzyzn02#

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

noj0wjuj

noj0wjuj3#

定义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的示例。

相关问题