Tomcat:我搞砸了我的 jndi 连接设置还是啥?

Posted

技术标签:

【中文标题】Tomcat:我搞砸了我的 jndi 连接设置还是啥?【英文标题】:Tomcat: Have I messed up my jndi connection set up or what?Tomcat:我搞砸了我的 jndi 连接设置还是什么? 【发布时间】:2012-03-01 07:59:34 【问题描述】:

我使用的是 Tomcat 的 7 连接池。我的配置如下: 在server.xml

<GlobalNamingResources>
    <!-- Editable user database that can also be used by
         UserDatabaseRealm to authenticate users
    -->
    <Resource name="jdbc_DS" auth="Container"   
              type="javax.sql.DataSource"  
              factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"  
              driverClassName="org.h2.Driver"  
              url="jdbc:h2:file:absolutePathtodatabase"  
              username="root" password=""  
              maxActive="20" maxIdle="10" maxWait="-1"  
              />
  </GlobalNamingResources>   

在 context.xml 中:

<ResourceLink name="jdbc/myDS"  
        global="jdbc_DS"  
        type="javax.sql.DataSource"/>    

它似乎有效,但我注意到以下内容: 在资源here:global resources 的属性中,它没有提到factory 作为Resource 的属性。尽管如此我已经在server.xml 中定义了它并且没有错误。 这是什么意思?我不是在这里使用org.apache.tomcat.jdbc.pool.DataSourceFactory 工厂吗?

【问题讨论】:

【参考方案1】:

但是您没有在context.xml 中使用&lt;Resource&gt;,您使用的是&lt;ResourceLink&gt;,因此&lt;Resource&gt;context.xml 中可能具有的任何属性都无关紧要。 &lt;ResourceLink&gt; 有足够的属性来引用 &lt;Resource&gt;,它在其他地方完全定义,包括它的 factory 属性。

【讨论】:

我指的是server.xml中的&lt;Resource&gt;属性。这似乎没有factory属性 @Jim context.xml 中的相同内容确实具有工厂属性。我会试试看。【参考方案2】:

Tomcat 7 documentation 告诉我们,您的配置对于使用数据源工厂是正确的:

Tomcat 连接池配置为The Tomcat JDBC documentation 中描述的资源,唯一的区别是您必须指定工厂属性并将值设置为org.apache.tomcat.jdbc.pool.DataSourceFactory

documentation 进一步提到:

必须还使用 Resource 元素上的属性定义任何其他需要的参数,以配置要使用的对象工厂(如果 Tomcat 还不知道),以及用于配置该对象的属性工厂。

这是另一个提示,有效元素列表不完整。

【讨论】:

在您给出的链接中,引用的是context.xml 中定义的Resource。但我在server.xml 中使用GlobalNamingResources。我使用server.xml 是不是错了?很多例子我在谷歌上看到使用server.xml 我认为全局和本地“&lt;Resource&gt; 声明”之间没有区别。您将全局属性与&lt;ResourceLink&gt; 一起使用,并且期望具有完全相同的属性。否则,您无法在全局范围内声明“完整”资源。 我关心的是:context.xml中的resource作为嵌套组件在doc的链接中定义为具有factory属性。但是resource作为嵌套组件在server.xml(嵌套在globalresources中)好像没有。你是说这个元素在两个xml文件(server.xmlcontext.xml)中都是一样的吗?

以上是关于Tomcat:我搞砸了我的 jndi 连接设置还是啥?的主要内容,如果未能解决你的问题,请参考以下文章

我搞砸了,我该如何卸载我的程序?

具有express-sessions和express-mysql-session的NodeJS没有设置会话。我搞砸了哪里?

scikit-learn 回归预测结果太好了。我搞砸了啥?

hibernate 搞砸了我的查询

Outlook 自动清理我的换行符并搞砸了我的电子邮件格式

Gradle 在 Android Studio 中搞砸了我的应用程序,如何修复?