【问题标题】:Issue with JNDI resource with Tomcat 6 on Linux with WAR file带有 WAR 文件的 Linux 上的 Tomcat 6 的 JNDI 资源问题
【发布时间】:2010-11-03 09:54:29
【问题描述】:

我对 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 配置文件和网络应用程序之间匹配。

【问题讨论】:

    标签: java spring tomcat jndi


    【解决方案1】:

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

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

    您可以在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 进行连接池)。

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

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-22
      • 2021-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多