我正在维护一个 Java Web 应用程序。在某个时候,它会运行以下代码:
javax.naming.InitialContext ctx = new javax.naming.InitialContext();
java.net.URL url;
try {
url = (java.net.URL) ctx.lookup("url/example");
} catch (Exception ex) {
logger.warn(ex)
url = null
}
在进行查找时,它崩溃了,并且出现此错误:javax.naming.NameNoutFoundException:名称 [url/example] 在此上下文中未绑定。
在我的context.xml(位于myProject/WebContent/META-INF/)中,我定义了一个工作正常的资源(数据源):
<Resource name="jdbc/exampleDB"
auth="Container"
type="javax.sql.DataSource"
username="myUserName"
password="myPass"
... />
我尝试对我的“url/example”资源做类似的事情,考虑到它应该是一个 URL 或一个带有指向 myProject.properties 文件(位于 myProject/WebContent/WEB-INF/ 中)的路径的字符串,而不是一个数据源。比如:
<Resource name="url/example"
auth="Container"
type="java.net.URL" />
或者
<Resource name="url/example"
auth="Container"
type="java.lang.String" />
但仍然遇到同样的错误。我缺少什么?我是否还可以在 Tomcat 文件夹中的 context.xml 或 web.xml 中配置任何内容?
我想我取得了一些进步。我替换了这个:
javax.naming.InitialContext ctx = new javax.naming.InitialContext();
有了这个:
Context ctx = (Context) new InitialContext().lookup("java:comp/env");
现在我收到此错误:
javax.naming.NamingException:无法创建资源实例
也许我的资源定义不正确? (我想我应该以某种方式为 URL 定义一个值......)
<Resource name="url/example"
auth="Container"
type="java.net.URL" />