【发布时间】:2012-08-31 01:33:09
【问题描述】:
我正在开发一个小的 java 客户端程序来通过 JNDI 查找从 WAS 连接池中检索数据库连接。但是这个 java 客户端位于 WAS 范围之外。代码详情如下:
import java.util.*;
import javax.naming.*;
import javax.naming.directory.*;
import java.io.*;
import java.sql.*;
import javax.sql.*;
public class WASORB {
/**
* @param args
* @throws NamingException
*/
public static void main(String[] args) throws Exception {
InitialContext initialContext = getInitialContext();
javax.sql.DataSource ds = (DataSource)initialContext.lookup("jndi/local");
Connection cn = ds.getConnection("*****", "*****");
if(cn != null)
System.out.println ("Connection ok");
String sql = "select * from ACT";
Statement st = cn.createStatement();
ResultSet rs = st.executeQuery(sql);
while(rs.next()){
System.out.println (rs.getString(2));
}
}
public static InitialContext getInitialContext() throws NamingException {
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.ibm.websphere.naming.WsnInitialContextFactory");
env.put(Context.PROVIDER_URL,"iiop://localhost:2811");
InitialContext context = new InitialContext(env);
return context;
}
}
代码运行正常并正确返回结果。但是我这里有两个问题不明白:
为什么在调用getConnection方法时必须提供用户名/密码?据我了解,我已经在 WAS DataSource 中配置了此身份验证凭证。当我的 java 客户端尝试获取连接时,WAS 扮演了可能的代理角色。如果是这样,我为什么要在这里重新输入?
在我看来,一旦客户端代码开始运行,在 WAS 特定的数据库连接池中应该有一个连接。但我没有看到在连接池中创建任何连接。那么为什么会这样呢?还是我理解错了?
谢谢
【问题讨论】:
标签: java jakarta-ee websphere websphere-7 websphere-6.1