У меня действительно кошмарная настройка 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?