代码之家  ›  专栏  ›  技术社区  ›  Grofit

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

  •  1
  • Grofit  · 技术社区  · 14 年前

    我对Tomcat和Java web开发还不太熟悉,我的头撞到了墙上,我遇到了一个问题。

    我有一个web应用程序在本地机器上运行良好(windows xp),我安装了Tomcat 6,并将WAR文件部署到webapps文件夹中,在c://apache-Tomcat-6.0.18/conf/Catalina/localhost/目录中我有“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>
    

    然后在我的web应用程序中,我的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”运行它。每次我尝试在box上启动Tomcat时,它都会解压缩WAR文件,但不会启动它,并且每当我尝试通过manager启动它时,都会出现以下错误:

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

    1 回复  |  直到 14 年前
        1
  •  2
  •   Buhake Sindi Tesnep    14 年前

    首先,Tomcat不明白 myApp.xml (除非你明确指出,我不知道怎么说)。Tomcat基于 上下文

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

    有关配置上下文的参考指南,请参见 Tomcat 6 Config/Context . 你会看到这个属性 debug 不赞成

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

    一旦您创建了 上下文.xml 在META-INF文件夹中,粘贴以下代码(取自示例):

    <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>
    

    完成后,配置 <resource-env-ref> 在你的 WEB-INF/web.xml link 提供于 Tomcat 6 JNDI, HOW-TO .