Использование неправильного номера порта (30015) в геосервере при попытке создать хранилище данных, база данных SAP HANA CLOUD - PullRequest
1 голос
/ 11 марта 2019

Гео-сервер использует неправильный номер порта, когда я пытаюсь создать хранилище данных , из-за этого я не могу создать хранилище. База данных sap Hana cloud .

Из SAP Hana cloud Я запускаю геосервер 2.14 . В геосервер war я добавил gt-jdbc-hana-21.0.jar (предоставленный геотуром) и ** ngdbc.jar **.

Из облака я запустил геосервер, а затем создал рабочее пространство. Затем я пытаюсь создать хранилище данных. Я заполнил все поля, которые обязательны для заполнения. Но номер порта, который я даю 30047 (мой номер порта в облаке hana), но он пытается подключить номер порта 30015, которого там нет. Из-за этого я не могу создать хранилище данных, пожалуйста, помогите, кто в чем проблема и как ее решить.

Я получаю сообщение об ошибке

Error creating data store, check the parameters. 
Error message: Unable to obtain connection: 
Cannot create PoolableConnectionFactory (SAP DBTech JDBC: Cannot connect to jdbc:sap://vadbi1l.nwtrial.od.sap.biz// [Cannot connect to host vadbi1l.nwtrial.od.sap.biz:30015 [Connection refused (Connection refused) (local port 58788 to address 0.0.0.0, remote port 30015 to address 10.117.96.92 (vadbi1l.nwtrial.od.sap.biz))], -813.].)

enter image description here

База данных Hana с номером порта enter image description here enter image description here

enter image description here

enter image description here

Geoserver log

Ответы [ 3 ]

2 голосов
/ 12 марта 2019

При быстром взгляде на код кажется, что хранилище данных Hana не использует предоставленную информацию о порте.

public String buildUrl() {
    StringBuilder sb = new StringBuilder();
    sb.append("jdbc:sap://");
    sb.append(host);
    sb.append("/?instanceNumber=");
    sb.append(Integer.toString(instance));
    if ((database != null) && !database.isEmpty()) {
        sb.append("&databaseName=");
        sb.append(database);
    }
    return sb.toString();
}

Я недостаточно знаю о Хане, чтобы сказать, если это ошибка или нет.Но вы можете получить отчет об ошибке или запрос на улучшение в проекте jira .

1 голос
/ 20 марта 2019

Загрузить исходный код gt-jdbc-hana-21.0 из mvnrepository изменить код в следующем классе

В классе HanaDataStoreFactory измените метод getJDBCUrl

     @SuppressWarnings({"rawtypes", "unchecked"})
        @Override
        protected String getJDBCUrl(Map params) throws IOException {
                    String host = (String) HOST.lookUp(params);
                    int instance = (Integer) INSTANCE.lookUp(params);
                    String database = (String) DATABASE.lookUp(params);
              Integer port = (Integer) PORT.lookUp(params);
                   HanaConnectionParameters cp = new HanaConnectionParameters(host, instance,
             database,port);
                 return cp.buildUrl();
    } 

В классе HanaConnectionParameters

/*
 *    GeoTools - The Open Source Java GIS Toolkit
 *    http://geotools.org
 *
 *    (C) 2018, Open Source Geospatial Foundation (OSGeo)
 *
 *    This library is free software; you can redistribute it and/or
 *    modify it under the terms of the GNU Lesser General Public
 *    License as published by the Free Software Foundation;
 *    version 2.1 of the License.
 *
 *    This library is distributed in the hope that it will be useful,
 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *    Lesser General Public License for more details.
 */
package org.geotools.data.hana;

/**
 * SAP HANA connection parameters.
 *
 * @author Stefan Uhrig, SAP SE
 */
public class HanaConnectionParameters {

    /**
     * SAP HANA connection parameters constructor.
     *
     * @param host The database host.
     * @param instance The database instance.
     * @param database The name of the tenant database. Set to null or empty string if the database
     *     is a single-container system. Set to SYSTEMDB to connect to the system database of a
     *     multi-container system.
     */
    public HanaConnectionParameters(String host, int instance, String database,int port) {
        super();
        this.host = host;
        this.instance = instance;
        this.database = database;
        this.port = port;
    }

    private String host;

    private Integer  instance;

    private String database;

    private Integer port;

    public String getHost() {
        return host;
    }

    public Integer getInstance() {
        return instance;
    }

    public String getDatabase() {
        return database;
    }

    public Integer getPort() {
        return this.port;
    }
    /**
     * Builds a JDBC connection URL.
     *
     * @return Returns the JDBC connection URL corresponding to these parameters.
     */
    public String buildUrl() {

         String url = "jdbc:sap://" + this.host + ":" + this.port;
         return url;

    }
}

после изменения в соответствующем классе скопируйте содержимое pom из gt-jdbc-hana-21.0. построй свою девицу и возьми банку.

0 голосов
/ 14 марта 2019

нет номер порта не является обязательным для HANA, так как номер экземпляра используется для его получения.

Номер порта построен вокруг номера экземпляра: 3

Итак, если вы подключаетесь с использованием номера экземпляра, тогда ваш клиент сначала свяжется с БД SYSTEM.

Суффикс порта по умолчанию для SYSTEM DB - 13.

При использовании HANA 1.0, где номер экземпляра по умолчанию - 00, поэтому для связи с SYSTEM DB будет использоваться порт 30013.А при использовании HANA 2.0 номер экземпляра по умолчанию равен 90, поэтому для связи с БД SYSTEM будет использоваться порт 39013.

Затем ваш клиент спросит БД SYSTEM, какой суффикс порта для БД вы хотите использоватьподключиться или порт БД по умолчанию.БД по умолчанию обычно называется HDB (или HXE для SAP HANA, экспресс-издание.

Суффикс порта по умолчанию для БД по умолчанию: 15.

Тогда ваш клиент подключится напрямую к нужному порту.

Итак, вот как это происходит, когда вы не предоставляете номер порта, чтобы сделать его коротким: - перейдите к системной базе данных и спросите правильный порт, затем подключитесь к нему

Что-тодействительно важно убедиться, что ваши брандмауэры не препятствуют подключению (вы можете проверить это с помощью telnet).

Поэтому, чтобы это работало, вам нужно установить номер порта в экземпляр свойство.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...