从独立 java 应用程序访问 Websphere 数据源而不指定 username/password
Access Websphere datasource from standalone java application without specifying username/password
我正在编写一个独立的应用程序,它将从 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
但如果提供userid/password,它工作正常
connection = datasource.getConnection("username","password");
如何在获取数据库连接时不指定 userid/password 使其工作
大多数 JDBC 驱动程序供应商允许在他们的数据源上设置用户和密码,然后将其用作所有没有 user/password 请求的连接的默认值。如果您转到 WebSphere Application Server 中的数据源配置,然后转到“自定义属性”,您应该能够为“用户”和“密码”添加属性,如果JDBC供应商支持。
我正在编写一个独立的应用程序,它将从 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
但如果提供userid/password,它工作正常
connection = datasource.getConnection("username","password");
如何在获取数据库连接时不指定 userid/password 使其工作
大多数 JDBC 驱动程序供应商允许在他们的数据源上设置用户和密码,然后将其用作所有没有 user/password 请求的连接的默认值。如果您转到 WebSphere Application Server 中的数据源配置,然后转到“自定义属性”,您应该能够为“用户”和“密码”添加属性,如果JDBC供应商支持。