java - 配置数据源并将其注册到 JNDI

标签 java datasource jndi

我跟进了java文档java doc对于数据源。

我不明白下面的代码片段。

我创建一个连接池数据源并使用 jndi 注册。

cpds.setServerName("creamer");
cpds.setDatabaseName("COFFEEBREAK");
cpds.setPortNumber(9040);
cpds.setDescription("Connection pooling for " + "COFFEEBREAK DBMS");

Context ctx = new InitialContext();
ctx.bind("jdbc/pool/fastCoffeeDB", cpds);

现在我们可以检索此连接池数据源

Context ctx = new InitialContext();
ctx.lookup("jdbc/pool/fastCoffeeDB");

我创建另一个数据源并注册它。

com.applogic.PooledDataSource ds = new 
com.applogic.PooledDataSource();
ds.setDescription("produces pooled connections to COFFEEBREAK");
ds.setDataSourceName("jdbc/pool/fastCoffeeDB");

Context ctx = new InitialContext();
ctx.bind("jdbc/fastCoffeeDB", ds);

现在我们可以检索此连接池数据源

ctx = new InitialContext();
ds = (DataSource)ctx.lookup("jdbc/fastCoffeeDB");

我不清楚setDataSourceName。

我们将 ConnectionPoolDS 添加到 PoolDataSource 中。

当我们检索数据源时

 ds = (DataSource)ctx.lookup("jdbc/fastCoffeeDB");

那么这里返回的数据源是PoolDataSource类型还是ConnectionPoolDS类型?

最佳答案

使用这个

jdbc/pool/fastCoffeeDB JNDI you are directly pointing to COFFEEBREAK database.

在第二个 JNDI

jdbc/fastCoffeeDB

您正在使用以下语句

ds.setDataSourceName("jdbc/pool/fastCoffeeDB");

在上面您指向旧的 JNDI 名称,这意味着您间接指向 COFFEEBREAK 数据库

所以来自声明 ds = (DataSource)ctx.lookup("jdbc/fastCoffeeDB"); 您将获得 ConnectionPoolDS。

关于java - 配置数据源并将其注册到 JNDI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53993424/

相关文章:

java - 在 Jython 中捕获 java 异常

java - IntelliJ 15 运行缓慢并占用 1GB 内存

c# - 电灯开关数据源错误中的共享点

datasource - c3p0 连接池是否确保最大池大小?

jakarta-ee - EJB 3.1 |通过 JNDI 调用远程 session bean 时出错

maven - 无法使用 jmeter-maven-plugin 实例化类 : org. apache.activemq.jndi.ActiveMQInitialContextFactory

java - 提高 Jpa 图像加载时间的性能

java - Netbeans IDE 错误 : A java. lang.NoClassDefFoundError 异常发生

java - context.lookup ("datasource")返回 org.jboss.jca.adapters.jdbc.WrapperDataSource

java - 获取在应用程序服务器中配置的数据源实例?