首页 > 解决方案 > 从独立的 Java 应用程序访问 Websphere 数据源而不指定用户名/密码

问题描述

我正在编写一个独立的应用程序,它将从 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] 不支持空用户 ID。ERRORCODE=-4461,SQLSTATE=42815 DSRA0010E: SQL 状态 = 42815,错误代码 = -4,461

但是如果提供用户名/密码,它工作正常

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

获取数据库连接时如何在不指定用户名/密码的情况下使其工作

标签: javawebspherewebsphere-libertywebsphere-7

解决方案


大多数 JDBC 驱动程序供应商允许在其数据源上设置用户和密码,然后将其用作所有请求的默认连接,而无需用户/密码。如果您转至 WebSphere Application Server 中数据源的配置,然后转至“自定义属性”,您应该能够为“用户”和“密码”添加属性,如果JDBC 供应商支持它。


推荐阅读