javax.naming.NameNotFoundException:在此上下文中未绑定名称[jdbc / mydb]

时间:2018-04-03 09:45:23

标签: java-ee tomcat7 jndi ibm-midrange

我知道这个问题已被问过好几次了。我找到了一些链接herehere作为我发现的一个例子。但我尝试他们的解决方案,我的问题还没有解决......

所以我复制了我的内容:

  • Eclipse中的J2EE项目。我构建了一个新的.war来安装在应用服务器中
  • 我在Eclipse中创建了一个Tomcat 7 Server并将我的.war添加到其中以在本地部署它

在我的项目中,我有一个.war项目和在Eclipse中创建新服务器时自动创建的Servers项目。

我尝试连接到本地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" />

首先,我尝试在我的应用程序中创建它:

  1. 在我的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>

  2. 我创建了一个自定义context.xml文件并添加了

  3. <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;" />

    这第一次尝试不起作用。所以我去了服务器端,并添加了以下内容:

    1. context.xml档案中:
    2. <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;" />

      1. server.xml我在ResourceLink
      2. 中添加了相同的Context

        第二次尝试也失败了。

        那么,问题是什么?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

您的第一个方法失败了,因为您必须为您的DataSource提供工厂类,以便Tomcat知道如何创建连接,使用什么驱动程序等等。

第二个失败是因为没有正确使用 ResourceLink 元素。

如Tomcat的文档中所述:

  

此元素用于创建指向全局JNDI资源的链接。

相反,您应该在 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文件夹位于正确的位置 - 您必须将其包含在 .war / webapp 文件夹中封装

现在,您可以使用以下名称通过 JNDI 引用您的DataSource:

<强>&#34;的java:comp / env的/ JDBC / mydb的&#34;