gpt4 book ai didi

java - JCO_ERROR_RESOURCE : Destination ABAP_AS_WITHOUT_POOL does not exist. ..通过 JCo 连接时出错

转载 作者:行者123 更新时间:2023-12-02 09:52:31 33 4
gpt4 key购买 nike

我正在开发一个 Java 应用程序,需要从 SAP 表中的 SAP 系统获取数据。我尝试使用 SAP Java Connector 3.X 将软件与 SAP 系统连接,但我在使用目标时遇到问题。

我使用了 SAP Java 连接器附带的代码示例。

public class CustomDestinationDataProvider {

static class MyDestinationDataProvider implements DestinationDataProvider {
private DestinationDataEventListener eL;
private HashMap<String, Properties> secureDBStorage = new HashMap<String, Properties>();

public Properties getDestinationProperties(String ABAP_AS) {
try {
//read the destination from DB
Properties p = secureDBStorage.get(ABAP_AS);

if(p!=null) {
//check if all is correct, for example
if(p.isEmpty())
throw new DataProviderException(DataProviderException.Reason.INVALID_CONFIGURATION, "destination configuration is incorrect", null);

return p;
}

return null;
} catch(RuntimeException re) {
throw new DataProviderException(DataProviderException.Reason.INTERNAL_ERROR, re);
}
}

//An implementation supporting events has to retain the eventListener instance provided
//by the JCo runtime. This listener instance shall be used to notify the JCo runtime
//about all changes in destination configurations.
public void setDestinationDataEventListener(DestinationDataEventListener eventListener) {
this.eL = eventListener;
}

public boolean supportsEvents() {
return true;
}

//implementation that saves the properties in a very secure way
void changeProperties(String ABAP_AS, Properties properties) {
synchronized(secureDBStorage) {
if(properties==null) {
if(secureDBStorage.remove(ABAP_AS)!=null)
eL.deleted(ABAP_AS);
} else {
secureDBStorage.put(ABAP_AS, properties);
eL.updated(ABAP_AS); // create or updated
}
}
}
} // end of MyDestinationDataProvider

//business logic
void executeCalls(String ABAP_AS) {
JCoDestination dest;
try {
dest = JCoDestinationManager.getDestination(ABAP_AS);
dest.ping();
System.out.println("Destination " + ABAP_AS + " works");
} catch(JCoException e) {
e.printStackTrace();
System.out.println("Execution on destination " + ABAP_AS + " failed");
}
}

static Properties getDestinationPropertiesFromUI() {
//adapt parameters in order to configure a valid destination
Properties connectProperties = new Properties();
connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST, "XXX");
connectProperties.setProperty(DestinationDataProvider.JCO_SYSNR, "XX");
connectProperties.setProperty(DestinationDataProvider.JCO_CLIENT, "XXX");
connectProperties.setProperty(DestinationDataProvider.JCO_USER, "XXX");
connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD, "XXX");
connectProperties.setProperty(DestinationDataProvider.JCO_LANG, "XX");
createDestinationDataFile(ABAP_AS, connectProperties);
return connectProperties;
}

static void createDestinationDataFile(String ABAP_AS, Properties connectProperties) {
File destCfg = new File(ABAP_AS + ".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);
}
}

}

这是我从 NetBeans 收到的错误消息:

Destination ABAP_AS_WITHOUT_POOL works
Execution on destination ABAP_AS_WITHOUT_POOL failed
com.sap.conn.jco.JCoException: (106) JCO_ERROR_RESOURCE: Destination
ABAP_AS_WITHOUT_POOL does not exist
at com.sap.conn.jco.rt.DefaultDestinationManager.update(DefaultDestinationManager.java:217)
at com.sap.conn.jco.rt.DefaultDestinationManager.searchDestination(DefaultDestinationManager.java:382)
at com.sap.conn.jco.rt.DefaultDestinationManager.getDestinationInstance(DefaultDestinationManager.java:100)
at com.sap.conn.jco.JCoDestinationManager.getDestination(JCoDestinationManager.java:104)
at jcotest2.CustomDestinationDataProvider.executeCalls(CustomDestinationDataProvider.java:92)
at jcotest2.Main.main(Main.java:39)
BUILD SUCCESSFUL (total time: 2 seconds)

最佳答案

看起来您的代码将登录数据保留在 HashMap“secureDBStorage”中。你在哪里填充这个HashMap?

另外:如果您使用的是 HashMap 而不是文件,您需要“createDestinationDataFile()”方法做什么?

编辑:由于这篇文章已被审核删除,我现在正在努力使其更加准确。所以你的代码有两个问题:

  1. 您将后端系统的登录参数保存在名为“secureDBStorage”的 HashMap 中,但没有使用名为“ABAP_AS_WITHOUT_POOL”的系统/目标的参数填充此映射。

  2. 您的代码仍然包含方法“createDestinationDataFile()”,该方法可能是从示例程序中复制的,然后忘记删除。由于您的程序使用 HashMap 来存储登录参数而不是文件系统,因此您可以删除此方法。 (只会混淆程序。)

关于java - JCO_ERROR_RESOURCE : Destination ABAP_AS_WITHOUT_POOL does not exist. ..通过 JCo 连接时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56221250/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com