Зачем мне нужно каждый раз переустанавливать пул подключений?
Я успешно подключился к удаленному серверу MySQL через Glassfish, однако каждый раз, когда я вношу изменения в файлы кода или XHTML, мне нужно открыть панель администратора Glassfish и очистить пул соединений, иначе я получу следующая ошибка, когда я просто обновляю страницу. Кто-нибудь испытал это? Я могу отправить код или другую информацию, если это необходимо.
Состояние HTTP 500 -
Тип отчета об исключении
сообщение
descriptionСервер обнаружил внутреннюю ошибку(), которая предотвратила это от выполнения этого запроса.
исключения
javax.servlet.ServletException: WELD-000049 Невозможно вызвать [метод] @PostConstruct public com.myapp.QuestionController.initialize() on [email protected]
Основная причина
org.jboss.weld.exceptions.WeldException: WELD-000049 Невозможно вызвать [метод] @PostConstruct public com.myapp.interfaces.QuestionController.initialize() on [email protected]
Основная причина
java.lang.reflect.InvocationTargetException
Основная причина
javax.ejb.EJBException
Основная причина
javax.persistence.PersistenceException: Исключение [EclipseLink-4002] (Eclipse Persistence Services - 2.3.0.v20110604-r9504): org.eclipse.persistence.exceptions.DatabaseException Внутренний Исключение: java.sql.SQLException: ошибка при распределении соединения. Причина: java.lang.RuntimeException: Получено исключение во время XAResource.start: Код ошибки: 0
Основная причина
Исключение [EclipseLink-4002] (службы сохранения состояния Eclipse - 2.3.0.v20110604-r9504): org.eclipse.persistence.exceptions.DatabaseException Внутренние Исключение: java.sql.SQLException: ошибка при распределении соединения. Причина: java.lang.RuntimeException: Получено исключение во время XAResource.start: Код ошибки: 0
Основная причина
java.sql.SQLException: ошибка при распределении соединения. Причина: java.lang.RuntimeException: Получено исключение во время XAResource.start:
Основная причина
javax.resource.spi.ResourceAllocationException: ошибка при распределении подключение. Причина: java.lang.RuntimeException: Получено исключение во время XAResource.start:
Основная причина
com.sun.appserv.connectors.internal.api.PoolingException: java.lang.RuntimeException: Получено исключение во время XAResource.start:
Основная причина
com.sun.appserv.connectors.internal.api.PoolingException: java.lang.RuntimeException: Получено исключение во время XAResource.start:
Основная причина
java.lang.RuntimeException: Получено исключение во время XAResource.start:
Основная причина
javax.transaction.xa.XAException: com.sun.appserv.connectors.internal.api.PoolingException: javax.resource.spi.LocalTransactionException: ссылка для связи неисправность
Последний пакет, успешно полученный с сервера, был 435 × 409 миллисекунд назад. Последний пакет, успешно отправленный на сервер, был 7 миллисекунд назад.
Изображение конфигурации
Сохранение XML
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="SertifikatPU" transaction-type="JTA">
<jta-data-source>jdbc/sertifikatdb</jta-data-source>
</persistence-unit>
</persistence>
В "Дополнительные свойства" в настройках пула соединений Glassfish я только что сконфигурировал: имя_сервера, URL, пользователя и пароль.
Я РЕШИЛ ЭТУ ПРОБЛЕМУ
![enter image description here]()
Я создал свою собственную двойную таблицу, похожую на ту, что в Oracle.
CREATE TABLE dual
(
x VARCHAR(1)
);
INSERT INTO dual(x) VALUES('y');
Ответы
Ответ 1
Ваша основная причина, PoolingException: javax.resource.spi.LocalTransactionException: Communications link failure
связана с этой ошибкой Glassfish, которая объясняет (на вкладке комментариев внизу), что вы можете необходимо обновить недопустимые подключения.
Комментарий Jagadish об ошибке, чтобы проверить тип проверки соединения. Если для него установлено значение "autocommit" (по умолчанию), драйверы JDBC могут кэшировать предыдущие данные проверки соединения, и при последующих проверках подключения не произойдет реального взаимодействия с базой данных.
Чтобы устранить проблему, установите connection-validation-method="table"
и validation-table-name="any_table_you_know_exists"
(замените any_table_you_know_exists
на имя любой существующей таблицы). Это заставляет соединения разговаривать с базой данных, а не с кешем; если соединение недействительно, оно будет удалено и воссоздано. Возможно, вам также потребуется указать is-connection-validation-required="true"
.
Статьи, которые помогут с дополнительной конфигурацией:
Текст из блога Jagadish:
AS_INSTALL_ROOT/bin/asadmin set domain.resources.jdbc-connection-pool.DerbyPool.is-connection-validation-required=true
domain.resources.jdbc-connection-pool.DerbyPool.is-connection-validation-required = true
AS_INSTALL_ROOT/bin/asadmin set domain.resources.jdbc-connection-pool.DerbyPool.connection-validation-method=table
domain.resources.jdbc-connection-pool.DerbyPool.connection-validation-method = table
bin/asadmin set domain.resources.jdbc-connection-pool.DerbyPool.validation-table-name=sys.systables
domain.resources.jdbc-connection-pool.DerbyPool.validation-table-name = sys.systables
Обратите внимание, что пример кода относится к sys.systables
, который представляет собой таблицу MS SQL, которая, как гарантируется, существует. Для Oracle обратитесь к гарантированной таблице dual
. Для MySQL создайте таблицу с 1 столбцом исключительно для целей проверки; играть в нее безопасно и предварительно заполнять таблицу, вставив одну строку данных.
Ответ 2
Следует ли использовать этот драйвер?
com.mysql.jdbc.jdbc2.optional.MysqlXADataSource
Я вижу, что вы используете другой драйвер из прикрепленного образа...