我的Windows框上有apache tomcat 5.5.28,我正在尝试部署一个在其他服务器上运行良好的Web应用程序(WAR)。
但是我在创建数据源时遇到了问题。我不确定格式。 db是oracle。
这是我在server.xml中的内容。
<GlobalNamingResources>
<Environment
name="simpleValue"
type="java.lang.Integer"
value="30"/>
<Resource
name="tomdb11"
type="oracle.jdbc.pool.OracleDataSource"
maxActive="4"
maxIdle="2"
username="tomdb11"
maxWait="5000"
driverClassName="oracle.jdbc.driver.OracleDriver"
validationQuery="select * from dual"
password="remotedb11"
url="jdbc:oracle:thin:@dbserver:1521:orcl"/>
<Resource
auth="Container"
description="User database that can be updated and saved"
name="UserDatabase"
type="org.apache.catalina.UserDatabase"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml"/>
</GlobalNamingResources>
如何在web.xml中访问它,通常我在其他服务器上工作的是
<context-param>
<param-name>databaseUser</param-name>
<param-value>tomdb11</param-value>
</context-param>
<context-param>
<param-name>databasePassword</param-name>
<param-value>tomdb11</param-value>
</context-param>
<context-param>
<param-name>databaseSchema</param-name>
<param-value>TOMDBADMINN11</param-value>
</context-param>
我也错过了什么吗?
修改:我收到以下异常:
javax.naming.NameNotFoundException: Name tomdb11 is not bound in this Context
at org.apache.naming.NamingContext.lookup(NamingContext.java:770)
at org.apache.naming.NamingContext.lookup(NamingContext.java:153)
at org.apache.naming.SelectorContext.lookup(SelectorContext.java:137)
at javax.naming.InitialContext.lookup(Unknown Source)
at com.taw.database.DatabaseService.<init>(DatabaseService.java:19)
at com.taw.database.DatabaseServices.init(DatabaseServices.java:40)
答案 0 :(得分:3)
如果异常告诉它在JNDI上下文中找不到jdbc
,那么它大致意味着您尝试获取DataSource
,如下所示
dataSource = new InitialContext().lookup("jdbc/tomdb11");
,而您的server.xml
文件告诉以下内容:
<Resource
name="tomdb11"
>
这些名称不相同。事实上,你应该使用过:
dataSource = new InitialContext().lookup("tomdb11");
但是,在Tomcat中,InitialContext
并未直接指向java:comp/env/
,因此您需要将其替换为:
dataSource = new InitialContext().lookup("java:comp/env/tomdb11");
但是,通常的做法是使用jdbc
前缀指定JDBC数据源。所以我将资源重命名为
<Resource
name="jdbc/tomdb11"
>
并通过
访问它dataSource = new InitialContext().lookup("java:comp/env/jdbc/tomdb11");
在webapp的web.xml
中,您还应该拥有以下资源声明:
<resource-env-ref>
<resource-env-ref-name>jdbc/tomdb11</resource-env-ref-name>
<resource-env-ref-type>javax.sql.DataSource</resource-env-ref-type>
</resource-env-ref>
有关Tomcat JNDI的更多详细信息,请查看此HOWTO:http://tomcat.apache.org/tomcat-6.0-doc/jndi-resources-howto.html。希望这会有所帮助。
答案 1 :(得分:2)
首先......确保$ TOMCAT_HOME / common / lib中有一个Oracle JDBC Jar。
第二...确保您的web.xml还包含这样的块...
<resource-ref>
<description>Oracle Datasource</description>
<res-ref-name>tomdb11</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
</resource-ref>
对于您的<context-param>
,我不确定是否正在执行任何操作,因为您已经在<Resource>
中定义了这些内容。