【发布时间】:2011-05-12 20:47:52
【问题描述】:
我已经在本地 PC 上设置了 Postgres 9.0.1 SQL 服务器和 Tomcat 5.5.28。两者都运行良好。但我无法配置 Tomcat 以通过 JNDI 使 DataSource 可用。我想我已经从 Tomcat 页面一直遵循 JNDI HOW-TO(以及从其他页面尝试了其他一些操作方法)。但每次 Tomcat 启动时,他都会显示错误消息:
SEVERE: Null component Catalina:type=DataSource,path=/MyApp,host=localhost,class=javax.sql.DataSource,name="jdbc/postgres"
尽管如此,Tomcat 确实启动了,但我的数据库代码无法运行,因为我的 InitialContext.lookup 最终什么都没有。
将postgres驱动“postgresql-8.4-701.jdbc4.jar”复制到以下文件夹中:
I:\Apache Software Foundation\Tomcat 5.5\common\lib
I:\Apache Software Foundation\Tomcat 5.5\webapps\MyApp\WEB-INF\lib
这是我的 MyApp/META-INF/context.xml:
<Context path="/MyApp" docBase="MyApp" crossContext="true" reloadable="true" debug="1">
<Resource name="jdbc/postgres"
auth="Container"
type="javax.sql.DataSource"
username="postgres"
password="xxx"
driverClassName="org.postgresql.Driver"
url="jdbc:postgresql://localhost/MyDatabase"
maxWait="1000"
maxActive="20"
maxIdle="10">
</Resource>
</Context>
这是我的 MyApp/WEB-INF/web.xml 的摘录:
<web-app>
…
<resource-ref>
<description>
Postgres resource reference to a factory
</description>
<res-ref-name>
jdbc/postgres
</res-ref-name>
<res-type>
javax.sql.DataSource
</res-type>
<res-auth>
Container
</res-auth>
</resource-ref>
</web-app>
Eclipse 将我的项目部署为 WAR,Tomcat 在启动时将 WAR 作为文件夹展开。现在奇怪的是:如果我不手动启动 Tomcat,而是通过 Eclipse,一切正常!!! Tomcat 没有提供上面的错误信息。 我发现 Eclipse 在启动 Tomcat 本身时使用它自己的 server.xml、context.xml 等,但即使在将这些文件与 Tomcat 的常规配置文件进行比较之后,到目前为止我发现的唯一区别是 Eclipse 服务器中的以下附加行。关闭“主机”标签之前的 xml:
<Context docBase="MyApp" path="/MyApp" reloadable="true" source="org.eclipse.jst.j2ee.server:MyApp"/>
但是,即使我将这一行复制到 Tomcat 自己的 server.xml 中(没有“源”属性),如果没有 Eclipse,它也无法工作。所以 Eclipse 必须做一些“额外的”事情,这使得找到 DataSource 成为可能,而“正常”的 Tomcat 配置失败。因为我必须在不同的服务器上部署 WAR(没有 Eclipse),所以我需要帮助才能在没有 Eclipse 的情况下运行它。我认为我的代码没问题,因为它适用于 Eclipse 的 Tomcat,但我对 Tomcat 5.5 的配置肯定有问题。有什么想法吗?
【问题讨论】:
标签: java eclipse tomcat datasource jndi