проблема с источником данных JNDI в Tomcat - PullRequest
2 голосов
/ 01 декабря 2009

Мне было трудно заставить работать источник данных JNDI. Следуя инструкциям на http://tomcat.apache.org/tomcat-5.5-doc/jndi-resources-howto.html Я подключаюсь к оракулу с Tomcat5.5 Я могу подключиться нормально, если я использую прямое соединение JDBC в коде.

Вот что у меня есть: в моем META-INF / context.xml:

<Resource name="jdbc/mydb" auth="Container"
          type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"
          url="jdbc:oracle:thin:theserver:1521/mydb"
          username="user" password="password" maxActive="20" maxIdle="10"
/>

вот что находится в web.xml:

<resource-ref>
  <description>please work</description>
  <res-ref-name>jdbc/mydb</res-ref-name>
    <res-type>
    javax.sql.DataSource
    </res-type>
    <res-auth>Container</res-auth>
  </resource-ref>

вот код:

   Connection conn = null;
    try{
    InitialContext ic = new InitialContext();
    DataSource ds = (DataSource) ic.lookup("java:comp/env/jdbc/mydb");
    conn = ds.getConnection();
    } catch ....... etc.

Я перепробовал множество различных конфигураций и начал новый простой проект, чтобы убедиться, что никакие дополнительные файлы jar не конфликтуют или что-то в этом роде, но.

Может ли кто-нибудь увидеть что-то, что выглядит неправильно?

ошибка на сервере указывает на исключение NullPointerException, когда я пытаюсь использовать объект conn. извините, сначала он предлагает: org.apache.tomcat.dbcp.dbcp.SQLNestedException: Невозможно создать PoolableConnectionFactory (Io исключение: сетевой адаптер не может установить соединение)

Ответы [ 3 ]

4 голосов
/ 01 декабря 2009

URL базы данных мне кажется неработоспособным.

попробовать:

jdbc:oracle:thin:@theserver:1521/mydb
3 голосов
/ 01 декабря 2009

«Сетевой адаптер не может установить соединение»

Это ваша подсказка. Это не может достигнуть базы данных. Убедитесь, что ваш сервер и порт указаны правильно, проверьте, доступны ли они с вашего компьютера.

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

Я отвечаю на комментарии в ответе Себастьяна.

Когда я вижу org.apache.commons.dbcp, это означает, что Tomcat использует встроенную библиотеку пула соединений с базой данных Apache Commons вместо библиотеки в драйвере JDBC Oracle.

Драйвер JDBC Oracle, отсутствующий в общем каталоге, обычно является первой проблемой, которую я пытаюсь решить. Похоже, это не ваша проблема.

Во-вторых, при запуске приложения, если возникла проблема с созданием источника данных JNDI, Tomcat может использовать библиотеку Commons. Это может быть ваш случай из-за неправильного URL базы данных. Исправление context.xml или скопированного / переименованного файла в каталоге conf / Catalina / localhost может не решить проблему без остановки и перезапуска Tomcat. Поэтому я бы рекомендовал остановить и перезапустить Tomcat и посмотреть, исправит ли это проблему.

Последнее замечание, ссылка, которую вы предоставляете, предназначена для настройки библиотеки Common. Мне понадобилось время, чтобы понять это. Ниже приведен пример одного из моих определений источника данных JNDI Oracle.

  <Resource auth="Container" name="jdbc/mydb" 
    type="oracle.jdbc.xa.client.OracleXADataSource"
    driverClassName="oracle.jdbc.driver.OracleDriver"
    factory="oracle.jdbc.pool.OracleDataSourceFactory"
    url="jdbc:oracle:thin:@theserver:1521:mydb" 
    connectionCachingEnabled="true"
    connectionCacheProperties="{InactivityTimeout=1800,PropertyCheckInterval=300,MaxStatementsLimit=125,ValidateConnection=true}"
    implicitCachingEnabled="true"/>

Я не уверен, имеет ли значение тип в вашем случае, и я считаю, что пользователь и пароль все еще являются атрибутами тега Resource. На что я хочу обратить внимание - это атрибут connectionCacheProperties. Здесь, где указать, вы указываете максимальное и минимальное количество подключений. Перейдите к Свойства кэша соединений для получения дополнительной информации об этом атрибуте.

Надеюсь, это поможет.

...