Форум программистов, компьютерный форум, киберфорум
Наши страницы

Java и базы данных

Войти
Регистрация
Восстановить пароль
 
Gibby
152 / 152 / 5
Регистрация: 16.10.2012
Сообщений: 354
Записей в блоге: 1
#1

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

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

Изучая 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.11.2013, 11:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Hibernate, c3p0 connection pool, Oracle DB - не выдает исключение о неправильном пароле (Java БД):

Не могу установить connection pool C3P0 - Java БД
import com.mchange.v2.c3p0.ComboPooledDataSource; Как мне импортировать эту библиотеку? я скачал файл c3p0.jar вроде как его ...

Проблема с поиском connection pool - Java БД
при старте jboss пишет: ... XA Connection pool DefaultDS bound to java:/DefaultDS ... я пишу в коде: Context context = new...

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

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

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

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

2
Skipy
1991 / 1414 / 57
Регистрация: 25.11.2010
Сообщений: 3,611
06.11.2013, 14:16 #2
А сколько соединений в пуле по умолчанию? Он же, небось, для каждого соединения пытается стукнуться.
0
Gibby
152 / 152 / 5
Регистрация: 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.11.2013, 14:19
Привет! Вот еще темы с ответами:

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

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

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

JBoss Connection Pool. После 20-ого обращения к базе "No managed connections available within configured blocking timeout (30000 [ms])" - Java EE
Настроил Connection Pool в JBoss, макс. количество соденений 20 - по умолчанию, но после 20-ого обращения к базе у меня вылазит No managed...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru