所以我最近开始在一个新的项目中工作。这些人以这种方式声明了Datasource连接:
Context init = new InitialContext();
Context context = (Context) init.lookup("java:comp/env");
ds = (DataSource)context.lookup("jdbc/WhateverDS");
我不知道为什么他们这样宣布。我一直都这样看过:
DataSource ds = new InitialContext().lookup("java:comp/env/jdbc/WhateverDS");
首先,你们知道为什么他们会分两步完成这项工作?
我的第二个问题是,有时我们会收到以下错误,如果它可能与上面的代码有关:
Caused by: javax.naming.NameNotFoundException: The name comp/env is not bound in this context
at org.apache.naming.NamingContext.lookup(NamingContext.java:818)
at org.apache.naming.NamingContext.lookup(NamingContext.java:166)
at org.apache.naming.SelectorContext.lookup(SelectorContext.java:157)
at javax.naming.InitialContext.lookup(InitialContext.java:411)
... 19 more
我们使用MySQL而不是Tomcat使用jdbc。
编辑: 他们对web.xml中声明的数据库一无所知。 context.xml(以及其他参数)如下所示:
Resource driverClassName="com.mysql.jdbc.Driver"
name="jdbc/WhateverDS"
type="javax.sql.DataSource"
url="jdbc:mysql://localhost:3306/someDB"
答案 0 :(得分:1)
回答您的第一个问题:DataSource
的两步和一步查找之间没有任何有效差异。
您的第二个问题似乎与javax.naming.NameNotFoundException: Name [comp/env] is not bound in this Context
重复