以编程方式将数据源添加到嵌入式 tomcat 7 中的 JNDI 上下文
Posted
技术标签:
【中文标题】以编程方式将数据源添加到嵌入式 tomcat 7 中的 JNDI 上下文【英文标题】:Adding datasource programmatically to JNDI context in embedded tomcat 7 【发布时间】:2014-01-18 13:30:51 【问题描述】:我试图在服务器启动之前注册一个新的数据源,但在执行查找时我得到了
javax.naming.NameNotFoundException:名称 [jdbc/db] 未绑定在此上下文中。找不到 [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();
我在这里错过了什么?
【问题讨论】:
【参考方案1】:哦,好吧,我想通了!而不是将其添加到 GlobalNamingResources
tomcat.getServer().getGlobalNamingResources().addResource(resource);
我在 NamingResources 中添加了它
Context rootCtx = tomcat.addContext("", base.getAbsolutePath());
//...
rootCtx.getNamingResources().addResource(resource);
它有效!
如果有人能告诉我 globalNamingResources 和(本地)NamingResources 之间的区别以及如何查找 globalNamingResource,请给我留言!
【讨论】:
【参考方案2】:您没有向我们展示您是如何查找 JNDI 资源的。但是,无论如何,您的资源的完整 JNDI 名称是 java:comp/env/jdbc/db
即您需要查找的名称。
这里有进一步阅读:https://***.com/a/4099163/131929
【讨论】:
以上是关于以编程方式将数据源添加到嵌入式 tomcat 7 中的 JNDI 上下文的主要内容,如果未能解决你的问题,请参考以下文章