我对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配置文件和网络应用程序之间的名称似乎相符。
答案 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。
我希望这会对你有所帮助。