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

标签 java saprfc sapjco3

我正在开发一个 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/

相关文章:

c# - 功能模块RSAQ_REMOTE_QUERY_CALL选择参数

jco - SAP JCo 客户端与服务器

java - 为什么我无法从本地网络访问 glassfish 服务器

java - 方法 Mockito.when().thenReturn() 和 Mockito.doreturn().when() 不返回指定的模拟值

java - 如何提取部分录制的音频字节

java - 从java监控笔记本电脑的电池或电源

python-3.x - 使用pyrfc获取FAGLL03H报告

debugging - 以其他用户身份调试

abap - Eclipse : ABAP communication layer is not configured. .. java.library.path 中没有 sapjco3

java - java.library.path Eclipse 中没有 sapjco3