带有WAR文件的Linux上带有Tomcat 6的JNDI资源问题

时间:2010-11-03 09:54:29

标签: java spring tomcat jndi

我对Tomcat和Java Web开发相当陌生,而且我正面临着一个遇到问题的问题。

我有一个在我的本地方框(windows xp)上工作正常的Web应用程序,我安装了Tomcat 6,并将WAR文件部署到webapps文件夹和c:/apache-tomcat-6.0.18/conf/ Catalina / localhost /目录我有“myApp.xml”。

myApp.xml包含以下内容:

<Context path="/myApp" docBase="/myApp.war" debug="1" reloadable="true" cookies="true">
  <Resource name="jdbc/sql-connection" scope="Shareable" type="javax.sql.DataSource" auth="Container" username="test" password="test" factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" driverClassName="net.sourceforge.jtds.jdbc.Driver" url="jdbc:jtds:sqlserver://xxxx:xxxx;appName=myApp" removeAbandoned="true" logAbandoned="true" /> 
  </Context>

然后在我的网络应用程序中,我的applicationContext文件中包含以下信息

<bean id="myDatasource" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiName">
            <value>java:comp/env/jdbc/sql-connection</value>
        </property>
    </bean> 

现在我已经完成了在本地盒子上正常工作以将其部署在Linux机器上,但是当我在那里部署它时,完全相同的设置只是tomcat从“opt / apache-tomcat-运行6.0.18" 。每当我尝试在盒子上启动Tomcat时,它将解压缩WAR文件但不会启动它,并且每当我尝试通过管理器启动时都会给出以下错误:

Error creating bean with name 'myDatasource' defined in file [/opt/apache-tomcat-6.0.18/webapps/myApp/WEB-INF/classes/applicationContext.xml]: Invocation of init method failed; nested exception is javax.naming.NameNotFoundException: Name jdbc is not bound in this Context

我试过在互联网上寻找答案,但似乎没有什么问题完全相同,而且tomcat配置文件和网络应用程序之间的名称似乎相符。

1 个答案:

答案 0 :(得分:2)

首先,Tomcat不理解myApp.xml(除非你明确指出它,我不知道如何)。 Tomcat基于上下文工作,可以为您的Web应用程序配置。 Tomcat只允许部署Web Aplication Archive(WAR)文件。

要为您的应用程序创建上下文,请在您的Web应用程序context.xml文件夹中创建一个META-INF(所有小型大写,区分大小写)文件

您可以在Tomcat 6 Config/Context上找到有关配置上下文的参考指南。您会看到属性debug 已弃用

Tomcat 6的JNDI资源HOW-TO也是available

在META-INF文件夹中创建context.xml后,请粘贴以下代码(摘自您的示例):

<Context path="/myApp" docBase="/myApp.war" reloadable="true" cookies="true">
    <Resource name="jdbc/sql-connection" type="javax.sql.DataSource" auth="Container" username="test" password="test" driverClassName="net.sourceforge.jtds.jdbc.Driver" url="jdbc:jtds:sqlserver://xxxx:xxxx;appName=myApp" removeAbandoned="true" logAbandoned="true" /> 
</Context>

(默认情况下,Tomcat使用PoolableDataSource进行连接池)。

完成后,请在<resource-env-ref>中配置WEB-INF/web.xml。这将允许您创建可共享范围。请参阅link上提供的Tomcat 6 JNDI, HOW-TO

我希望这会对你有所帮助。