Форум программистов, компьютерный форум, киберфорум
Java: Базы данных
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
154 / 154 / 10
Регистрация: 16.10.2012
Сообщений: 354
Записей в блоге: 1
1

Hibernate, c3p0 connection pool, Oracle DB - не выдает исключение о неправильном пароле

06.11.2013, 11:52. Показов 2086. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Изучая Hibernate наткнулся на то, что использовать встроенный Connection Pool - не комильфо. Взял из предложенных вариантов c3p0 и прикрутил его в настройках.

Содержимое файла hibernate.cfg.xml:

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property> 
    <property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
    <property name="hibernate.connection.url">jdbc:oracle:oci:@TREASURY</property>
    <property name="hibernate.connection.username">test</property>
    <property name="hibernate.current_session_context_class">thread</property>
    <property name="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
    <property name="hibernate.c3p0.min_size">1</property> <!--Minimum number of JDBC connections in the pool. Hibernate default: 1-->
    <property name="hibernate.c3p0.max_size">5</property> <!--Maximum number of JDBC connections in the pool. Hibernate default: 100-->
    <property name="hibernate.c3p0.timeout">300</property> <!--When an idle connection is removed from the pool (in second). Hibernate default: 0, never expire.-->
    <property name="hibernate.c3p0.max_statements">50</property> <!--Number of prepared statements will be cached. Increase performance. Hibernate default: 0 , caching is disable.-->
    <property name="hibernate.c3p0.idle_test_period">3000</property> <!--idle time in seconds before a connection is automatically validated. Hibernate default: 0-->
    <mapping resource="ru/feib/popov/HibernateTutorial/Event.hbm.xml"/>
    <mapping resource="ru/feib/popov/HibernateTutorial/Person.hbm.xml"/>
  </session-factory>
</hibernate-configuration>
Получение сессии:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class Util {
    private static final SessionFactory sessionFactory = buildSessionFactory();
    
    private static SessionFactory buildSessionFactory() {
        try {
            Configuration config = new Configuration();
            ConnectionDialog d = new ConnectionDialog();
            d.setVisible(true);
            if(!d.isCanceled()) {
                config.setProperty("hibernate.connection.password", d.getPassword());
                return config.configure().buildSessionFactory();
            } else {
                throw new HibernateException("Password not entered");
            }
        } catch (HibernateException e) {
            System.err.println("Initial SessionFactory creation failed. " + e);
            throw new ExceptionInInitializerError(e);
        }
    }
    
    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }
}
Проблема в том, что если я ввожу неправильный пароль, программа не выбрасывает мне исключение, а продолжает стучаться в закрытые ворота, пока не превышает лимит и не блокирует пользователя. В логи пишет:

WARNING: com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask@9b7670 -- Acquisition Attempt Failed!!! Clearing pending acquires. While trying to acquire a needed new resource, we failed to succeed more than the maximum number of allowed acquisition attempts (30). Last acquisition attempt exception:
java.sql.SQLException: ORA-28000: the account is locked
<...>
Честно говоря, все настройки делал по гайдам из сети, так что я тут как обезьяна с гранатой - где когда и почему шандарахнуло понять не в состоянии.

Добавлено через 11 минут
Напишите, если нужны будут полные логи

Добавлено через 19 часов 25 минут
Так, с этой проблемой я справился. Надо было создать файл c3p0-config.xml и переопределить в нем свойство "acquireRetryAttempts", которое по умолчанию стоит на 30:

XML
1
2
3
4
5
<c3p0-config> 
    <default-config>
        <property name="acquireRetryAttempts">1</property>
    </default-config>   
</c3p0-config>

Вопрос такой - можно ли поймать именно ошибку подключения?

Добавлено через 15 минут
При этом аккаунт в базе блокируется после второго раза, хотя ограничение на количество неправильный попыток в базе прописано на 20. Т.е. такое ощущение, что не смотря на acquireRetryAttempts = 1 он все равно больше 10 раз стучится базу (но меньше 20, так как после первой неправильной попытки аккаунт еще не заблокирован).

Добавлено через 1 минуту
В общем, жду гуру Хибернейта, мне тут самому похоже не разобраться.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.11.2013, 11:52
Ответы с готовыми решениями:

Не могу установить connection pool C3P0
import com.mchange.v2.c3p0.ComboPooledDataSource; Как мне импортировать эту библиотеку? я...

Connection Pool
Здравствуйте. Решил в web приложениии использовать пул соединений к БД. Посмотрев достаточно много...

Проблема с поиском connection pool
при старте jboss пишет: ... XA Connection pool DefaultDS bound to java:/DefaultDS ... я пишу...

Не создаёт JDBC Connection Pool
При создании JDBC Connection Pool выбивает следующую ошибку, как вылечить?

2
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
06.11.2013, 14:16 2
А сколько соединений в пуле по умолчанию? Он же, небось, для каждого соединения пытается стукнуться.
0
154 / 154 / 10
Регистрация: 16.10.2012
Сообщений: 354
Записей в блоге: 1
06.11.2013, 14:19  [ТС] 3
XML
1
2
    <property name="hibernate.c3p0.min_size">1</property> <!--Minimum number of JDBC connections in the pool. Hibernate default: 1-->
    <property name="hibernate.c3p0.max_size">5</property> <!--Maximum number of JDBC connections in the pool. Hibernate default: 100-->
Если я правильно понимаю, при инициализации пула создается столько, сколько указано в min_size.
0
06.11.2013, 14:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.11.2013, 14:19
Помогаю со студенческими работами здесь

Jdbc нужен ли pool connection
Собственно нужно ли заморачиваться и реализовывать или драйвер уже все реализовал за нас?

Кaк лучше нaписaтъ Connection Pool?
Привет всем, Хoтелoсь нaписaть Connection Pool, тoлькo вoт прaктики не хвaтaет чтoбы...

Postgres+JDBC+Connection pool+LS2J
В одном Web прикладе активно используются LS агенты, которые через LS2J обращаются к базе postgres...

NPGSQL System.Exception: Timeout while getting a connection from pool
Пытаюсь конекнуться к базе и вылазит такое. Кто сталкивался - в чем может быть проблема?...

JDBC Connection Pool error. Не удается установить соединение с БД PostgreSQL
Доброго времени суток! Пожалуйста помогите понять в чем проблема! Я пытаюсь написать простое...

Org.hibernate.exception.JDBCConnectionException: Cannot open connection
Здравствуйте! СУБД - SQL MS 2012. ORM - Hibernate JDBC Driver - JTDC.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru