источник данных о кошачьих оракулах - PullRequest
1 голос
/ 16 декабря 2009

На моем компьютере с Windows установлен apache tomcat 5.5.28, и я пытаюсь развернуть веб-приложение (WAR), которое отлично работает на других серверах.

Однако у меня проблемы с созданием источника данных. Я не уверен в формате. БД оракул.

Вот что у меня есть в 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 ]

3 голосов
/ 16 декабря 2009

Если исключение говорит о том, что оно не может найти jdbc в контексте JNDI, то это примерно означает, что вы пытались получить 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");

В веб-приложении 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. Надеюсь, это поможет.

2 голосов
/ 16 декабря 2009

Сначала ... Убедитесь, что у вас есть JDBC Jar Oracle в вашем каталоге $ TOMCAT_HOME / common / lib.

Второе ... Убедитесь, что ваш 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>.

...