У меня есть веб-приложение, которое обращается к MySQL, используя Hibernate в качестве поставщика JPA. Хотя с моей установкой для разработки все в порядке, после развертывания WAR на моем сервере я получаю следующую ошибку:
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is javax.persistence.PersistenceException: org.hibernate.exception.JDBCConnectionException: Cannot open connection
На машине разработчика работает Ubuntu 10.10 и сервер 10.04; оба используют предоставленный пакет MySQL и Apache (не Ubuntu) tomcat6. Я более чем трижды проверил, что база данных запущена, учетные данные верны и драйвер доступен.
У меня есть это определение ресурса в tomcat context.xml:
<Resource
name="jdbc/phenome_repository"
auth="Container"
type="javax.sql.DataSource"
username="correctUserName"
password="correctPassword"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost/correctDatabaseName"
/>
Поскольку веб-приложение работает локально, я считаю, что его конфигурация правильная (в его web.xml есть ссылка на ресурс). Что касается MySQL, он настроен на прослушивание 127.0.0.1, и указанный выше «правильный пользователь» имеет все необходимые привилегии (на localhost и 127.0.0.1).
Кто-нибудь знает менее обычные причины "Невозможно открыть соединение"?
В моем случае оказалось, что другой админ отказал ALL: ALL
в hosts.deny
и hosts.allow
был пуст. Размещение mysqld: 127.0.0.1
в hosts.allow
исправил проблему.
Для справки, вот все возможные причины ошибок, подобных описанной мной:
hosts.allow
и hosts.deny
В каждом из этих случаев полная трассировка стека будет немного отличаться. Отсутствующий драйвер будет более очевиден в трассировке стека, чем другие причины, перечисленные здесь.
Пожалуйста, предложите любые элементы, отсутствующие в приведенном выше списке.