Доступ к Websphere datasource из автономного приложения Java без указания имени пользователя / пароля

#java #websphere #websphere-liberty #websphere-7

#java #websphere #websphere-liberty #websphere-7

Вопрос:

Я пишу автономное приложение, которое получит источник данных с Websphere Application Server, получит подключение к БД и выполнит некоторую бизнес-логику.

 import java.sql.Connection;
import java.sql.SQLException;
import java.util.Hashtable;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

public class TestDS {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Hashtable<String, String> pdEnv = new Hashtable<String, String>();
        pdEnv.put(Context.INITIAL_CONTEXT_FACTORY,"com.ibm.websphere.naming.WsnInitialContextFactory");             
        pdEnv.put(Context.PROVIDER_URL, "iiop://localhost:2809");
        System.out.println("Getting connection");
        Context initialContext;
        try {
            System.setProperty("com.ibm.CORBA.Debug","true");
            System.setProperty("com.ibm.CORBA.CommTrace","true");
            System.setProperty("com.ibm.CORBA.Debug.Output","/usr/app/corba.log");
            initialContext = new InitialContext(pdEnv);
            System.out.println("Getting initial context");
            DataSource datasource = (DataSource)initialContext.lookup("jdbc/sampleDB");
            System.out.println("Getting datasource");
            Connection connection = null;
            System.out.println("Datasoure is "  datasource);
            if (datasource != null) {
              //connection = datasource.getConnection("username","password"); // DB credintials
                connection = datasource.getConnection();
            } else {
              System.out.println("Failed to lookup datasource.");
            }
        } catch (NamingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
    }

}
  

Это выдает следующую ошибку

исключение java.sql.SQLNonTransientException: [jcc][t4][10205][11234][4.21.29] Нулевой идентификатор пользователя не поддерживается. КОД ОШИБКИ =-4461, SQLSTATE=42815 DSRA0010E: состояние SQL = 42815, код ошибки = -4 461

Но если указать идентификатор пользователя / пароль, все работает нормально

  connection = datasource.getConnection("username","password");
  

Как мне заставить его работать без указания идентификатора пользователя / пароля при получении подключений к БД

Ответ №1:

Большинство поставщиков драйверов JDBC позволяют устанавливать пользователя и пароль для своих источников данных, которые затем используются по умолчанию для всех подключений, запрашиваемых без пользователя / пароля. Если вы перейдете к настройке вашего источника данных в WebSphere Application Server, а затем к «Пользовательским свойствам», вы сможете добавить свойства для «user» и «password», которые затем должны быть применены к источнику данных, если поставщик JDBC поддерживает его.