Обработка смены пароля с помощью C3P0 - PullRequest
0 голосов
/ 06 мая 2020

Мы используем C3P0 для управления нашими пулами соединений для некоторых приложений java (некоторые используют JBoss, некоторые используют Hibernate). Проблема в том, что администраторы баз данных хотят иметь возможность менять пароли в базах данных.

Пароли хранятся во внешнем хранилище, поэтому, если пароль в базе данных изменяется, хранилище обновляется одновременно. Наше приложение может отреагировать на изменение пароля, закрыв существующие ComboPooledDataSources, получив новый пароль и создав новый ComboPooledDataSource. Но он может сделать это, только если знает, что пароль был изменен.

К сожалению, кажется, что когда C3P0 обнаруживает исключение при попытке создать соединение, он просто регистрирует исключение и отбрасывает его. Таким образом, изменение пароля приведет к неудачному созданию соединения, появлению сообщения журнала и, в конечном итоге, к повторной попытке. Прежде чем мы сможем каким-либо образом заметить ошибку, учетная запись будет уже заблокирована.

Решение, которое я представляю, будет обратным вызовом исключения: когда C3P0 пытается создать соединение и терпит неудачу, а не просто регистрирует и отбросив исключение, у нас будет возможность указать обратный вызов для обработки исключения. Затем мы могли бы написать код, который идентифицировал бы исключение с неправильным паролем и реагировал, закрыв ComboPooledDataSource, а приложение получало новый пароль и создавало новый.

Возможно ли это? Возможно ли что-нибудь подобное?

...