gpt4 book ai didi

java - 不了解WAS连接池通过JNDI的数据库连接

转载 作者:行者123 更新时间:2023-12-02 07:36:08 25 4
gpt4 key购买 nike

我正在开发一个小型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;
}

}

代码工作正常并正确返回结果。但我这里有两个问题不明白:

  1. 为什么在调用方法 getConnection 时必须提供用户 ID/密码?据我了解,我已经在 WAS DataSource 中配置了此身份验证凭据。当我的 java 客户端尝试获取连接时,WAS 扮演了可能的代理角色。如果是这样,为什么我需要在这里再次输入?

  2. 一旦客户端代码开始运行,从我的角度来看,WAS 特定数据库连接池中应该有一个连接。但我没有看到连接池中创建任何连接。那么为什么会发生这种情况呢?还是我理解错了?

谢谢

最佳答案

想一想,如果任何人都可以通过引导到 JNDI 来连接到您组织的数据库,那么会产生怎样的安全后果。服务器应用程序的部署者通过将应用程序的资源引用映射到数据源的 JNDI 条目来保证部署在服务器上的应用程序的身份。由于无法对任意客户端进行此类审查,因此有必要对它们进行身份验证。

至于您的连接,它无法由服务器管理,因为它不是来自服务器。您的连接实例正在您的客户端中运行(很可能是不同的 JVM)。服务器仅管理服务器中运行的应用程序的连接。

关于java - 不了解WAS连接池通过JNDI的数据库连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12207843/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com