我正在使用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>
任何人都可以帮我解决问题?????
答案 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版,存在大量有用的信息。按照以下说明创建连接:
您应该考虑以下几点:
将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的示例。