Соединение системы AS400 с JNDI

Я могу понять, как подключиться к AS400 через jt400 с ресурсами JNDI:

    Connection conn = null;
    Statement stmt = null;
    try {
        Context ctx = (Context) new InitialContext().lookup("java:comp/env");
        conn = ((DataSource) ctx.lookup("jdbc/AS400")).getConnection();
        System.out.println(conn.getClientInfo());

        stmt = conn.createStatement();
        //SQL data fetch using the connection
        ResultSet rs = stmt.executeQuery("SELECT * FROM LIBRARY.TABLE");
        while (rs.next()) {
            System.out.println(rs.getString("COLUMN1"));
        }
        conn.close();
        conn = null;
    }
    catch(Exception e){System.out.println(e);}

Однако другая часть приложения использует DataQueues (из той же библиотеки jt400):

    String queue = "/QSYS.LIB/" + libraryName +".LIB/" + queueName +".DTAQ";

    try{
        system = new AS400(server, user, pass);
        DataQueue dq = new DataQueue(system, queue);

        // Convert the Data Strings to IBM format
        byte[] byteData = message.getBytes("IBM285");

        dq.write(byteData);
        System.out.println("Wrote to DataQueue");

    }catch(Exception e){
        e.printStackTrace();
        System.err.println(e);
    }finally{
        // Make sure to disconnect
        if(system != null){
            try{
                system.disconnectAllServices();
                System.out.println("Disconnected from DataQueue.");
            }catch(Exception e){
                System.err.println(e);
            }
        }
    }

Внутри этого рабочего кода для DataQueues есть ссылки server, user, pass, что не идеально.

Я хотел бы использовать уже настроенное соединение AS400 JNDI, но каждый пример, который я вижу о подключении Java к DataQueues, ссылается на пример, очень похожий на этот.

документация все указывают на Системные объекты AS400, которые являются жестко запрограммированными ссылками на имя сервера, пользователя, пароль и т. д.

Есть ли лучший способ использовать DataQueue() со ссылкой JNDI?


person Shawn    schedule 19.01.2017    source источник
comment
Хм, здесь есть две вещи: с одной стороны у вас есть доступ к DataSource через JNDI (т. е. доступ к БД), с другой стороны, доступ к объектам AS400 через jtopen API (т. е. доступ к системным объектам), это две разные вещи.   -  person    schedule 19.01.2017
comment
Так что ответ - нет (AFAIK)   -  person    schedule 19.01.2017
comment
Они оба используют драйвер jt400, только на данный момент двумя разными способами.   -  person Shawn    schedule 19.01.2017
comment
Мне кажется, что должна быть возможность зарегистрировать объект в JNDI, который содержит необходимую информацию для создания такого объекта очереди для вас (точно так же, как это делается с этим DataSource); просто (вероятно) нет стандартного способа настроить это.   -  person Mark Rotteveel    schedule 19.01.2017
comment
Я согласен с твоим мнением, @MarkRotteveel. Я попытался разобрать контекст, который вернулся после поиска, но похоже, что я SOL, пытаясь получить пароль от этого ресурса.   -  person Shawn    schedule 19.01.2017
comment
Я не уверен, что хранить объект As400 — это хорошая идея. Под словом «нет» я имел в виду, что вы не можете использовать источник данных для доступа к очереди данных (также есть вероятность, что ваш пользователь sql не имеет доступа к файлу очереди данных)   -  person    schedule 20.01.2017
comment
Думаю, теперь я понимаю. Источником данных, с которым я работаю, является массивный экземпляр DB2, работающий на AS400. Я ошибочно принял строку подключения JNDI за универсальную строку подключения, которую мог бы использовать даже в случае не-JDBC. Похоже, мне придется прибегнуть к каким-то строкам подключения в файле свойств.   -  person Shawn    schedule 20.01.2017


Ответы (1)


Как предполагается в комментариях выше, ссылка DataQueue вообще не является частью соединения JDBC, его нельзя использовать для настройки соединения для чтения и записи в DataQueue. Поскольку это так, он также не может совместно использовать методы подключения, которые использует JDBC, даже если библиотека jt400 подключается к JDBC. Файл свойств или другие серверные решения требуются, если в DataQueue/Java не указано жестко закодированное соединение примеры онлайн (Все 1 из них).

person Shawn    schedule 25.01.2017