Ошибка AS400FileRecordDescription.retrieveRecordFormat на защищенном соединении - PullRequest
0 голосов
/ 17 октября 2018

Основная цель нижеприведенной java-программы - использовать класс AS400FileRecordDescription из jtopen (версия 9.6) для получения формата записи физического файла на iseries.Это делается путем вызова метода retrieveRecordFormat () в этом классе.

Эта программа отлично работает, если соединение является незащищенным (URL-адрес соединения не содержит параметр secure = true).Но при защищенном соединении (URL-адрес соединения содержит параметр secure = true) оно завершилось ошибкой: «javax.net.ssl.SSLHandshakeException: удаленное соединение закрыло соединение во время рукопожатия».Есть идеи, что я тут делаю не так?

import java.sql.Connection;
import java.sql.DriverManager;
import com.ibm.as400.access.AS400;
import com.ibm.as400.access.AS400FileRecordDescription;
import com.ibm.as400.access.AS400JDBCConnection;
import com.ibm.as400.access.RecordFormat;

public class TestIseriesSecureConnection {

    public static void main(String[] args) {

        Connection conn = null;
        AS400 system = null;
        try {
            // get standard jdbc connection
            Class.forName("com.ibm.as400.access.AS400JDBCDriver");
            // notice the secure=true parameter, if that is removed, the program works fine.
            conn = DriverManager.getConnection("jdbc:as400://myiseries;secure=true;naming=system;errors=full;prompt=false;libraries=*LIBL;timeFormat=iso;dateFormat=iso;dateSeparator=-", "myuser", "mypassword");

            // cast connection into AS400 jdbc connection class to get the AS400 object
            AS400JDBCConnection as400Conn = (AS400JDBCConnection) conn;
            system = as400Conn.getSystem();

            // get the record format of a file on iseries
            RecordFormat recordFormats[] = null;
            AS400FileRecordDescription fileRecordDescription = new AS400FileRecordDescription(system, "/QSYS.LIB/%LIBL%.LIB/MYFILE.FILE");

            // This is where it error out if the connection is a secure connection 
            recordFormats = fileRecordDescription.retrieveRecordFormat();

            for (int myIx = 0; myIx < recordFormats.length; myIx++) {
                System.out.println(recordFormats[myIx].toString());
            }
            conn.close();
        }
        catch(Exception ex) {
            ex.printStackTrace();
        }
        finally {
            try {
                if (conn != null) {
                    conn.close();
                }
            }
            catch (Exception ex) {
                ex.printStackTrace();
            }
        }

        System.exit(0);
    }

}

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Пройдя немного вперед и назад с поддержкой IBM, мы наконец-то выяснили, что проблема была вызвана методом retrieveRecordFormat, использующим сервис DDM / DRDA для обслуживания запроса.Мы установили ssl-сертификат на нескольких серверах diff, но не на DDM / DRDA.Это объясняет, почему другие типы запросов работают нормально под ssl.Итак, как только я установил сертификат на хост-сервер DDM / DRDA, программа отлично работает даже с простым старым объектом AS400.

0 голосов
/ 17 октября 2018

Какая версия IBM i OS?

Какая версия Java?

Нередко можно увидеть на IBM i 7.1, поскольку она не поддерживает последние версии TLS и шифров.

...