从独立的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");

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

解决方法

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...