Исключение слишком рано - PullRequest
0 голосов
/ 27 июля 2010

Справочная информация: Hibernate подключается к базе данных, используя имя пользователя и пароль, введенные в GUI.При неудаче вместо распространения ошибки в виде исключения она отображается как трассировка стека в регистраторе.Я не знаю, где происходит исключение.Также небольшим беспокойством является следующий блок:

if (reason != null)    {
    println("getConnection failed: " + reason);
    throw reason;
}

Моя точка останова установлена ​​на строке выброса (и успешно срабатывает), но оператор println никогда не генерирует вывод (MySQL использует какую-то настройку логгера Iне могу найти руку для открытого файла).Какие-нибудь хитрости для обнаружения, где ловится исключение?

РЕДАКТИРОВАТЬ 1:

Я звоню

sessionFactory = /*AnnotationConfiguration*/ ac.buildSessionFactory();

Исключение ловится Hibernateгде-то между java.sql.DriverManager классом и моим HibernateUtil классом.Я предполагаю, что мы можем обвинить Hibernate, решив, что я действительно не хочу видеть исключение.Я хочу убедить спящий режим позволить мне увидеть исключение.

РЕДАКТИРОВАТЬ 2:

Мой стек такой:

java.sql.SQLException: Access denied for user 'user'@'machine' (using password: YES)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:910)
    at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:3923)
    at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1273)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2031)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:718)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:302)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:282)
/* Exception is thrown on the next line (1st code block in original post). */
    at java.sql.DriverManager.getConnection(DriverManager.java:582)
    at java.sql.DriverManager.getConnection(DriverManager.java:154)
/* Begin hidden source calls */
    at org.hibernate.connection.DriverManagerConnectionProvider.getConnection(DriverManagerConnectionProvider.java:110)
    at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:84)
    at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2009)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1292)
    at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:859)
/* End hidden source calls */
    at com.****.****.util.HibernateUtil.initialize(HibernateUtil.java:34)

Я могу 'Получите отладчик для просмотра любой точки над стеком, кроме DriverManager.java:582.Все, что находится за стеком, не видно в отладчике.

Ответы [ 3 ]

1 голос
/ 27 июля 2010

Прежде всего, поскольку вы упоминаете, что есть регистратор, вы должны заменить все операторы println вызовами журнала.

Вы также можете добавить дополнительные сообщения журнала, чтобы определить, что происходит внутри приложения.В качестве альтернативы (или в сочетании с описанным выше) вы можете пройти по критической части кода в отладчике, чтобы увидеть, где на самом деле происходит исключение.

1 голос
/ 28 июля 2010

Вот конечный результат: строка 116 из org.hibernate.cfg.SettingsFactory перехватывает исключение sql и выводит его в журнал.Нет конфигурации для изменения этого.Похоже, я не смогу сказать своему конечному пользователю, почему их соединение не установилось, если я не использую журналы.

Netbeans, по какой-то раздражающей причине после того, как я дал его, источник для Hibernate все еще хотел вызвать всеэтого «скрытого источника звонков».Некоторое время с VIM и чтением номеров строк позже, я все выяснил.

0 голосов
/ 27 июля 2010

Установите точку останова для сгенерированного исключения, и когда отладчик запускает один шаг, чтобы посмотреть, что произойдет. Вам, вероятно, потребуется всего несколько шагов, прежде чем произойдет печать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...