tomcat oracle数据源

时间:2009-12-16 18:43:30

标签: java oracle tomcat jndi

我的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) 

2 个答案:

答案 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>中定义了这些内容。