2012-03-01 93 views
0

我正在使用Tomcat的7连接池。我的配置如下:
server.xmlTomcat:我搞砸了我的jndi连接设置或什么?

<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工厂吗?

回答

0

Tomcat 7 documentation告诉我们,你是配置是否正确使用数据源工厂:

Tomcat的连接池被配置为The Tomcat JDBC documentation描述,唯一的区别是,你要的资源指定工厂属性和值设置为org.apache.tomcat.jdbc.pool.DataSourceFactory

documentation进一步提到:

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

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

+0

在给出的链接中,引用是在'context.xml'中定义的'Resource',但是我在'server.xml'中使用'GlobalNamingResources'.Am我错误地使用'server.xml '?我看过很多例子,使用'server.xml'搜索google0001 – Jim 2012-03-01 08:16:43

+0

我看到全局和本地“'''声明”没有区别。你用''来使用全局变量,并且期望有相同的属性。否则,您无法在全球范围内声明“完整”资源。 – 2012-03-01 08:26:25

+0

我的关注点如下:'context.xml'中的'resource'作为嵌套组件被定义为在doc的链接中具有'factory'属性,但是'resource'作为'server.xml'中的嵌套组件(嵌套在'globalresources'中)似乎没有一个。你说这个元素在两个xml文件('server.xml'和'context.xml')中是相同的吗? – Jim 2012-03-01 08:30:01

1

但你不使用context.xml一个<Resource>,您使用的是<ResourceLink>,所以无论属性一<Resource>可能在context.xml是无关紧要的。 <ResourceLink>只具有足够的属性来引用<Resource>,该属性在其他地方完全定义,包括其factory属性。

+0

我指的是'server.xml'中的''属性。这似乎没有'factory'属性 – Jim 2012-03-01 12:15:00

+0

@Jim'context.xml'中的同一件事物没有工厂属性。我会尝试它。 – EJP 2012-03-03 09:08:50