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
中使用<Resource>
,您使用的是<ResourceLink>
,因此<Resource>
在context.xml
中可能具有的任何属性都无关紧要。 <ResourceLink>
有足够的属性来引用 <Resource>
,它在其他地方完全定义,包括它的 factory
属性。
【讨论】:
我指的是server.xml
中的<Resource>
属性。这似乎没有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
我认为全局和本地“<Resource>
声明”之间没有区别。您将全局属性与<ResourceLink>
一起使用,并且期望具有完全相同的属性。否则,您无法在全局范围内声明“完整”资源。
我关心的是:context.xml
中的resource
作为嵌套组件在doc的链接中定义为具有factory
属性。但是resource
作为嵌套组件在server.xml
(嵌套在globalresources
中)好像没有。你是说这个元素在两个xml文件(server.xml
和context.xml
)中都是一样的吗?以上是关于Tomcat:我搞砸了我的 jndi 连接设置还是啥?的主要内容,如果未能解决你的问题,请参考以下文章
具有express-sessions和express-mysql-session的NodeJS没有设置会话。我搞砸了哪里?