(Enterprise GlassFish v3 build 11) Проблема со связью (MySQL DB) - PullRequest
2 голосов
/ 09 апреля 2010

Я получаю сбой линии связи, когда приложение пытается установить соединение с БД.

[#|2010-04-08T20:09:57.825+0300|SEVERE|glassfish3.0|javax.enterprise.system.std.com.sun.enterprise.v3.services.impl|_ThreadID=24;_ThreadName=Thread-1;|Cannot connect to database server = com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.|#]

Именно в этой строке:

Statement s = conn.createStatement();

, где conn определяется следующим образом:

private static java.sql.Connection conn;

Для этого приложения я установил пул соединений с параметрами по умолчанию, и в настоящее время оно (приложение) использует как JPA, так и прямые запросы JDBC. Восстановление пула соединений ничего не дало, ping пула соединений дал следующее сообщение:

Ping Connection Pool for pool is Failed. Ping failed Exce
ption - Connection could not be allocated because: Communications lin
k failure%%%EOL%%%%%%EOL%%%The last packet sent successfully to the s
erver was 0 milliseconds ago. The driver has not received any packets
from the server. Please check the server.log for more details.%%%EOL
%%%Ping failed Exception - Connection could not be allocated because:
Communications link failure

и очистка пула соединений дала:

com.sun.enterprise.admin.cli.CommandException: remote failure: Failed to flush connection pool ...

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

Кто-нибудь имеет представление о том, что происходит или как решить проблему?

Ответы [ 3 ]

3 голосов
/ 10 апреля 2010

Такая проблема может быть, если у вас есть сервер MySQL и сервер Glassfish на одном хосте, и в конфигурации MySQL у вас есть опция привязки к некоторому общему адресу (например, 192.168.0.1 интерфейса eth0), который обычно успешно работает с простым jdbc / jpa использует user @ localhost, но в случае JTA из Glassfish они не привязываются, а вместо того, чтобы связываться с некоторыми локальными адресами, вы получаете ошибку ссылки. Как правило, вы не можете привязать какие-либо локальные (localhost / 127.0.0.1) адреса такого хоста mysql, если представлен публичный адрес.

Пример:

my.cnf

bind-address = 127.0.0.1

bind-address = 192.168.0.1

127.0.0.1 - назначить интерфейсу lo

192.168.0.1 - назначить интерфейсу eth0

Это ошибка Glassfish-MySQL.

В настоящее время для использования JTA не следует связывать mysql с таким адресом. (удалите "bind-address = 192.168.0.1" из my.cnf). Или используйте user@192.168.0.1, что менее безопасно.

0 голосов
/ 19 июня 2018

В моем случае я установил: URL: jdbc: mysql: //10.81.35.66: 3306 / testDB а также url: jdbc: mysql: //10.81.31.76: 3306 / vectordb

оба При задании значений при создании пула соединений в дополнительной части свойства на стекле рыба консоль администратора.

0 голосов
/ 10 апреля 2010

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

Вы подключаетесь к той же базе данных? Если да, возможно, проверьте, что вы используете тот же драйвер JDBC.

...