Я использую пул соединений в TOmcat 6, и я настроил этот способ в файле context.xml
<Resource name="jdbc/myoracle" auth="Container"
type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@127.0.0.1:1521:ORCLE"
username="scott" password="tiger" maxActive="20" maxIdle="10"
maxWait="-1"/>
И это мой класс Factory для получения соединения с использованием источника данных
public class ConnPoolFactory {
private static DataSource dataSource;
private static Connection connection;
private ConnPoolFactory() {
}
public static synchronized Connection getConnection() throws SQLException {
try {
if (connection == null) {
Context initContext = new InitialContext();
Context envContext = (Context) initContext
.lookup("java:/comp/env");
dataSource = (DataSource) envContext.lookup("jdbc/myoracle");
connection = dataSource.getConnection();
} else {
return connection;
}
} catch (NamingException e) {
e.printStackTrace();
}
return connection;
}
}
И из моего сервлета внутри блока finally я закрываю его таким образом
try {
connection = ConnPoolFactory.getConnection();
finally
{
if(conn!=null)
con.close();
}
Из моего пользовательского интерфейса я могу давать различные команды (нажатие кнопки), такие как Вставка, Обновление, Удалить, Выбрать --.
Проблема, с которой я сталкиваюсь, заключается в том, что приложение запускается только для одной команды, то есть, например, если я нажал кнопку «Вставить», оно прекрасно вставляет запись и после этого, если еще разя даю любую команду, что на консоли сервера есть исключение, говорящее о том, что соединение закрыто.
Если я удаляю этот блокирующий код внутри моего сервлета, то приложение работает нормально для любого количества команд
Может кто-нибудь, пожалуйста, дайте мне знать, что не так с этим блоком finnaly ??