Попробуйте создать пул соединений с Tomcat 6 - PullRequest
0 голосов
/ 22 сентября 2010

У меня действительно кошмарная настройка Tomcat для настройки пула соединений. Я много читал различные форумы и документы от Tomcat, но мне нужно спросить здесь в качестве последнего средства. Это первый раз, когда я пытался получить соединения из контейнера, поэтому для меня все это ново.

У меня возникли исключения NameNotFoundException, которые, похоже, исправляются, только когда я помещаю файл context.xml обратно из MyApp / META-INF / context.xml в Tomcat 6.0 / conf / context.xml, поэтому по какой-то причине он не видит файл context.xml в каталоге META-INF MyApp. Есть идеи?

Теперь я получаю исключение SQLNestedException: не удается создать PoolableConnectionFactory ('' @ 'localhost' (используя пароль: YES))

Прежде всего меня удивляет, что пользователь пуст, потому что я указал "root" в context.xml. Что касается невозможности создания PoolableConnectionFactory, я видел пару примеров файлов context.xml, которые имели атрибут factory. Это нужно мне? Если да, то какой класс мне там указывать?

Мой context.xml:

<?xml version='1.0' encoding='utf-8'?>
<Context>

<!-- Configure a JDBC DataSource for the user database -->
<Resource name="jdbc/searchdb" 
          type="javax.sql.DataSource" 
          auth="Container" 
          user="root" 
          password="mypassword" 
          driverClassName="com.mysql.jdbc.Driver" 
          url="jdbc:mysql://localhost:3306/search" 
          maxActive="8" 
          maxIdle="4"/>

<!-- Default set of monitored resources -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<!--<WatchedResource>META-INF/context.xml</WatchedResource>-->

</Context>

Я видел context.xml с элементом WatchedResource для META-INF / context.xml. Я попробовал это, но это, казалось, не имело никакого значения, и мне кажется странным, поэтому я прокомментировал это. Должен ли я на самом деле включать это?

Мой тестовый сервлет:

package search.web;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import java.sql.*;
import javax.sql.*;
import javax.naming.*;
import search.model.*;
public class ConPoolTest extends HttpServlet {

    public void doGet(HttpServletRequest request,
                  HttpServletResponse response) 
                  throws IOException, ServletException {
        Context ctx = null;
        DataSource ds = null;
        Connection conn = null;
        try {
            ctx = new InitialContext();
            ds = (DataSource)ctx.lookup("java:comp/env/jdbc/searchdb");
            conn = ds.getConnection();
            if(conn != null) {
                System.out.println("have a connection from the pool");
            }
        } catch(SQLException e) {
            e.printStackTrace();
        } catch(NamingException e) {
            e.printStackTrace();
        } finally {
            try {
                if(conn!=null) {
                    conn.close();
                }
            } catch(SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

Я с нетерпением жду ваших предложений.

Большое спасибо

Джо

PS Я бы также перечислил трассировку стека, но по какой-то причине она отображается в консоли, а не в журналах.

Обновление:

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

1 Ответ

2 голосов
/ 22 сентября 2010

Документы Tomcat для источников данных JNDI содержат полные примеры настройки источников данных JDBC в context.xml

Некоторые комментарии к вашему вопросу:

  1. Tomcat должен скопировать context.xml из WAR вашего приложения в conf/Catalina/localhost/app.xml во время развертывания (когда он распаковывает ваше приложение). Файл должен , а не перейти к conf/. Проверьте, не лежит ли в этих местах старая копия, и почистите ее.

  2. Ошибка, связанная с использованием неверного пользователя, также предполагает, что существует более одного context.xml, а вы смотрите не тот.

  3. Вам не нужно PoolableConnectionFactory с Tomcat 6. Это может быть ошибочным из-за обновления от Tomcat 5 или что-то сломалось, они попробовали несколько вещей и забыли очистить файл конфигурации.

  4. Tomcat автоматически смотрит web.xml; нет необходимости делать это WatchedResource во второй раз.

...