Сбой подключения JDBC к удаленному MySql

В Glassfish (3.1.2) я создал пул соединений JDBC (и ресурс JDBC) для удаленной базы данных MySql. Когда вы делаете пинг-тест в Glassfish, он проходит успешно.

Мое приложение Java EE 6 использует этот блок сохранения (persistence.xml):

<persistence-unit name="remotePU" transaction-type="JTA">
    <jta-data-source>jdbc/remotePU</jta-data-source>
    <properties> 
    </properties>
</persistence-unit>

В дао я ввожу контекст сохранения:

@PersistenceContext(unitName = "remotePU")
private EntityManager em;

Затем я просто использую этот диспетчер сущностей для запроса.

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

Стек исключений, который я получаю при запросе:

Internal Exception: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
....
Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed.
....
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
....
Caused by: java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost.

Удаленное соединение просто медленное? Это пинг до сервера удаленной базы данных:

Pinging xxxxx.net [xx.xx.xx.xx] with 32 bytes of data:
Reply from xx.xx.xx.xx: bytes=32 time=29ms TTL=54
Reply from xx.xx.xx.xx: bytes=32 time=28ms TTL=54
Reply from xx.xx.xx.xx: bytes=32 time=28ms TTL=54
Reply from xx.xx.xx.xx: bytes=32 time=28ms TTL=54

Ping statistics for xx.xx.xx.xx:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 28ms, Maximum = 29ms, Average = 28ms

Могу ли я настроить некоторые параметры пула соединений JDBC в Glassfish, чтобы иметь лучшее соединение?


person BigJ    schedule 08.11.2012    source источник
comment
Вы можете подключиться к серверу mysql из команды? mysql -u user -p -h xx.xx.xx.xx   -  person GregD    schedule 08.11.2012
comment
Да, это работает. Я также выполнил запрос через CL, и это сработало.   -  person BigJ    schedule 08.11.2012
comment
Поскольку я не специалист по Java, я не могу вам в этом помочь, но (1) дважды проверьте синтаксис, если он правильный, (2) попробуйте тестовое соединение с другим хостом, и если это не работает, тогда (3) /очень длинный выстрел/ проверьте настройки брандмауэра.   -  person GregD    schedule 09.11.2012
comment
Брандмауэр также должен вызвать сбой команды mysql, если это было проблемой. Возможно, просто невозможно подключиться к базе данных на другом континенте с пулом подключений.   -  person BigJ    schedule 09.11.2012