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