gpt4 book ai didi

java - 以编程方式将数据源添加到嵌入式 tomcat 7 中的 JNDI 上下文

转载 作者:搜寻专家 更新时间:2023-11-01 02:26:44 24 4
gpt4 key购买 nike

我试图在服务器启动之前注册一个新的数据源,但是在查找执行时我得到了

javax.naming.NameNotFoundException: Name [jdbc/db] is not bound in this Context. Unable to find [jdbc].

这是我启动 tomcat 的方式:

    Tomcat tomcat = new Tomcat();
//...
ContextResource resource = new ContextResource();
resource.setName("jdbc/db");
resource.setAuth("Container");
resource.setType("javax.sql.DataSource");
resource.setScope("Sharable");
resource.setProperty("driverClassName", "org.hsqldb.jdbc.JDBCDriver");
resource.setProperty("url", "jdbc:hsqldb:hsql://localhost:1234/mydb1");

tomcat.getServer().getGlobalNamingResources().addResource(resource);
tomcat.start();
tomcat.getServer().await();

查找:

    Connection conn = null;
try {
Context initContext = new InitialContext();
Context envContext = (Context) initContext.lookup("java:/comp/env");
DataSource ds = (DataSource) envContext.lookup("jdbc/db");

conn = ds.getConnection();
conn.createStatement()....
} catch (Exception e) {
e.printStackTrace();
}

我在这里错过了什么?

最佳答案

哦,好吧,我想通了!而不是将其添加到 GlobalNamingResources

tomcat.getServer().getGlobalNamingResources().addResource(resource);

我在命名资源中添加了它

Context rootCtx = tomcat.addContext("", base.getAbsolutePath());
//...
rootCtx.getNamingResources().addResource(resource);

而且有效!

如果有人能告诉我 globalNamingResources 和(本地)NamingResources 之间的区别以及如何查找 globalNamingResource,请给我留言!

关于java - 以编程方式将数据源添加到嵌入式 tomcat 7 中的 JNDI 上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20860283/

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