2010-09-22 1 views
0

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

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

Теперь я получаю SQLNestedException: Невозможно создать PoolableConnectionFactory («» @ «локальный» (используя пароль: ДА))

Прежде всего сюрпризов мне, что пользователь является пустым, потому что я указал «корень» в контексте .xml. Что касается невозможности создания PoolableConnectionFactory, я видел пару примеров файлов context.xml с заводским атрибутом. Нужно ли мне это? Если да, то какой класс я должен там указывать?

Мой 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 elemnt для 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 Я бы также перечислены трассировки стека, но по какой-то причине он появляется в консоли, но не в журналах.

Update:

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

ответ

2

Tomcat docs for JNDI Datasources содержит полные примеры, как настроить источники данных 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 во второй раз.

+0

Привет Аарон, Большое спасибо за Ваш ответ – Joe

+0

Я не развертываются мое приложение с помощью файла WAR, а просто перенося файлы через вручную в данный момент. Вам нужно иметь WAR-файл, чтобы Tomcat мог правильно найти файл context.xml в каталоге META-INF данного веб-приложения? – Joe

+0

Я проверил, и я определенно удалил context.xml из каталога conf сейчас. Документы Tocat говорят, что я могу либо иметь файл в $ CATALINA_BASE/conf/[enginename]/[hostname] [webappname] .xml, либо в $ CATALINA_BASE/webapps/[webappname] /META-INF/context.xml. Я обновил детали в обоих случаях и попробовал удалить первый, но он просто снова вставлен в качестве полной копии второй. Поэтому я теперь получаю то же сообщение о PoolableConnectionFactory. Я использую Tomcat 6, и webapp является очень простой моей, поэтому я не понимаю, почему возникнут эти проблемы. – Joe