我只是想知道你何时/为什么要在web.xml文件中定义resource-ref元素?
我原本以为它会在您的web/app服务器中使用JNDI定义,然后在Java代码中查找JNDI引用?
资源引用定义对我来说似乎有点多余,我无法想到什么时候它可能有用.例:
<resource-ref>
<description>Primary database</description>
<res-ref-name>jdbc/primaryDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>CONTAINER</res-auth>
</resource-ref>
Run Code Online (Sandbox Code Playgroud) 是什么意思java:comp/env
?
看起来像什么:
Context envContext = (Context)initContext.lookup("java:comp/env");
Run Code Online (Sandbox Code Playgroud)
做什么?
我明白这样的查找:
(DataSource)envContext.lookup("jdbc/MyDatasource")
Run Code Online (Sandbox Code Playgroud)
MyDatasource
在context.xml
或中查找名称web.xml
以获取数据库的URL.是这样吗 ?!但是前者看起来做了什么?
我正在尝试在服务器启动之前注册一个新的数据源,但是我正在查找执行的查找
javax.naming.NameNotFoundException:名称[jdbc/db]未绑定在此Context中.无法找到[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();
Run Code Online (Sandbox Code Playgroud)
查找:
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();
}
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么?