在Tomcat 8应用程序中使用多个连接池时命名错误

时间:2015-10-26 13:24:58

标签: java tomcat connection-pooling jdbc-pool

我有一个使用内置Tomcat连接池的应用程序,并且大部分都可以使用。当我尝试使用另一个池从同一个数据库获取不同的连接集时,但是来自不同的用户名/密码(它是使用2个用户名访问不同命名空间的oracle数据库)时会出现问题表和功能)。

接受第一个游泳池,但对于第二个游泳池,我收到此错误

15:09:47.157 [http-nio-8081-exec-5] ERROR com.applicationname.providers.ConnectionManager - NamingException in MyDataSource
javax.naming.NameNotFoundException: Name [appdb_two] is not bound in this Context. Unable to find [appdb_two].
    at org.apache.naming.NamingContext.lookup(NamingContext.java:818) ~[catalina.jar:8.0.15]

这是我的配置:

server.xml中

<GlobalNamingResources>
    <!-- Editable user database that can also be used by
    UserDatabaseRealm to authenticate users-->

    <Resource name="UserDatabase" 
              auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />

    <Resource name="jdbc/appdb_two"
              auth="Container"
              type="javax.sql.DataSource"
              driverClassName="oracle.jdbc.driver.OracleDriver"
              factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"/>

    <Resource name="jdbc/appdb_one"
              auth="Container"
              type="javax.sql.DataSource"
              driverClassName="oracle.jdbc.driver.OracleDriver"
              factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"/>

</GlobalNamingResources>

context.xml中

<ResourceLink name="jdbc/appdb_two" 
              auth="Container"             
              username="DBONE"
              password="xxxx" 
              type="javax.sql.DataSource" 
              url="jdbc:oracle:thin:@xx.xxx.xxx.xxx:1521:XE"
              initialSize="20"
              maxActive="50"
              maxIdle="20"
              factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"/>

<ResourceLink name="jdbc/appdb_one" 
              auth="Container"
              username="DBTWO"
              password="xxxx" 
              type="javax.sql.DataSource" 
              url="jdbc:oracle:thin:@xx.xxx.xxx.xxx:1521:XE"
              initialSize="20"
              maxActive="50"
              maxIdle="20"
              factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"/>
...

1 个答案:

答案 0 :(得分:1)

我认为您正在通过名称"appdb_two"查找第二个数据源,但是应该使用"jdbc/appdb_two" - 仅从堆栈跟踪中很难看到,查找代码会很有帮助。

同时检查您的web.xml是否包含对两个数据源(<resource-ref>元素)的引用。