javax.naming.NameNotFoundException: 名称 [jdbc/mydb] 未在此上下文中绑定
javax.naming.NameNotFoundException: Name [jdbc/mydb] is not bound in this Context
我知道这个问题已经被问过好几次了。我找到了一些链接 here and here 作为我发现的示例。但是我尝试了他们的解决方案,我的问题还没有解决...
所以我复制我有的:
- Eclipse 中的一个 J2EE 项目。我构建了一个新的 .war 以安装在应用程序服务器中
- 我在 Eclipse 中创建了一个
Tomcat 7 Server
并添加了我的 .war 以在本地部署它
所以在我的项目中,物理上我有一个 .war
项目和一个 Servers
项目,当您在 Eclipse 中创建一个新的服务器时自动创建。
我尝试连接到本地 as400 db
但是当我这样做时,我发现了这个错误:
Error com.myprojectpackage.xxx: Name XXX is not bound in this Context
我尝试添加一个 ResourceLink
,如我附加的其中一个链接所述:
<ResourceLink name="jdbc/mydb"
global="jdbc/mydb"
type="javax.sql.DataSource" />
首先,我尝试像这样在我的应用程序中创建它:
在我的web.xml
<resource-ref>
<description>Datasource for my db</description>
<res-ref-name>jdbc/mydb</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
我创建了一个自定义 context.xml
文件并添加了
<ResourceLink name="jdbc/mydb"
global="jdbc/mydb"
type="javax.sql.DataSource" maxActive="50" maxIdle="30" maxWait="10000"
username="myuser" password="mypass" auth="Container"
driverClassName="com.ibm.as400.access.AS400JDBCDriver" url="jdbc:as400://192.168.1.1;naming=system;errors=full;" />
第一次尝试没有成功。所以我去了服务器端,并添加了以下内容:
- 在
context.xml
文件中:
<ResourceLink name="jdbc/mydb"
global="jdbc/mydb"
type="javax.sql.DataSource" maxActive="50" maxIdle="30" maxWait="10000"
username="myuser" password="mypass" auth="Container"
driverClassName="com.ibm.as400.access.AS400JDBCDriver" url="jdbc:as400://192.168.1.1;naming=system;errors=full;" />
- 在
server.xml
中我在Context
中添加了相同的ResourceLink
第二次尝试也失败了。
所以,问题是什么?我该如何解决这个问题?
您的第一种方法失败了,因为您必须为您的数据源提供一个工厂 class,以便 Tomcat 成为 war 如何创建连接、使用什么驱动程序等等上。
第二个失败,因为没有正确使用 ResourceLink 元素。
如 Tomcat 的文档所述:
This element is used to create a link to a global JNDI resource.
相反,您应该在 META-INF/context.xml 文件中创建以下声明:
<Context>
<Resource name="jdbc/mydb"
global="jdbc/mydb"
type="javax.sql.DataSource" maxActive="50" maxIdle="30"
maxWait="10000"
username="myuser" password="mypass" auth="Container"
driverClassName="com.ibm.as400.access.AS400JDBCDriver"
url="jdbc:as400://192.168.1.1;naming=system;errors=full;"/>
</Context>
然后确保 META-INF 文件夹位于正确的位置 - 您必须将其包含在 [=26= 的 /webapp 文件夹中].war包.
现在您可以使用以下名称通过 JNDI 引用您的数据源:
"java:comp/env/jdbc/mydb"
我知道这个问题已经被问过好几次了。我找到了一些链接 here and here 作为我发现的示例。但是我尝试了他们的解决方案,我的问题还没有解决...
所以我复制我有的:
- Eclipse 中的一个 J2EE 项目。我构建了一个新的 .war 以安装在应用程序服务器中
- 我在 Eclipse 中创建了一个
Tomcat 7 Server
并添加了我的 .war 以在本地部署它
所以在我的项目中,物理上我有一个 .war
项目和一个 Servers
项目,当您在 Eclipse 中创建一个新的服务器时自动创建。
我尝试连接到本地 as400 db
但是当我这样做时,我发现了这个错误:
Error com.myprojectpackage.xxx: Name XXX is not bound in this Context
我尝试添加一个 ResourceLink
,如我附加的其中一个链接所述:
<ResourceLink name="jdbc/mydb"
global="jdbc/mydb"
type="javax.sql.DataSource" />
首先,我尝试像这样在我的应用程序中创建它:
在我的
web.xml
<resource-ref> <description>Datasource for my db</description> <res-ref-name>jdbc/mydb</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref>
我创建了一个自定义
context.xml
文件并添加了
<ResourceLink name="jdbc/mydb"
global="jdbc/mydb"
type="javax.sql.DataSource" maxActive="50" maxIdle="30" maxWait="10000"
username="myuser" password="mypass" auth="Container"
driverClassName="com.ibm.as400.access.AS400JDBCDriver" url="jdbc:as400://192.168.1.1;naming=system;errors=full;" />
第一次尝试没有成功。所以我去了服务器端,并添加了以下内容:
- 在
context.xml
文件中:
<ResourceLink name="jdbc/mydb"
global="jdbc/mydb"
type="javax.sql.DataSource" maxActive="50" maxIdle="30" maxWait="10000"
username="myuser" password="mypass" auth="Container"
driverClassName="com.ibm.as400.access.AS400JDBCDriver" url="jdbc:as400://192.168.1.1;naming=system;errors=full;" />
- 在
server.xml
中我在Context
中添加了相同的
ResourceLink
第二次尝试也失败了。
所以,问题是什么?我该如何解决这个问题?
您的第一种方法失败了,因为您必须为您的数据源提供一个工厂 class,以便 Tomcat 成为 war 如何创建连接、使用什么驱动程序等等上。
第二个失败,因为没有正确使用 ResourceLink 元素。
如 Tomcat 的文档所述:
This element is used to create a link to a global JNDI resource.
相反,您应该在 META-INF/context.xml 文件中创建以下声明:
<Context>
<Resource name="jdbc/mydb"
global="jdbc/mydb"
type="javax.sql.DataSource" maxActive="50" maxIdle="30"
maxWait="10000"
username="myuser" password="mypass" auth="Container"
driverClassName="com.ibm.as400.access.AS400JDBCDriver"
url="jdbc:as400://192.168.1.1;naming=system;errors=full;"/>
</Context>
然后确保 META-INF 文件夹位于正确的位置 - 您必须将其包含在 [=26= 的 /webapp 文件夹中].war包.
现在您可以使用以下名称通过 JNDI 引用您的数据源:
"java:comp/env/jdbc/mydb"