Я использую Spring 3.0.5, Hibernate 3.6.7, Atomikos TransactionEssentials 3.7.0 и MySQL 5.5
Недавно я столкнулся с проблемой, состоящей в том, что соединения в моем пуле соединений истекли через 8 часов и были сброшенысервер, вызывающий сообщение "резюме для XID '???'поднял 0: неизвестно
Вот моя конфигурация источника данных:
<bean id="myDataSource"
class="com.atomikos.jdbc.AtomikosDataSourceBean"
init-method="init"
destroy-method="close"
depends-on="myConfigurer">
<property name="uniqueResourceName" value="myPUDataSource" />
<property name="xaDataSourceClassName" value="$CONF{database.XAdriver}" />
<property name="poolSize" value="10" />
<property name="xaProperties">
<props>
<prop key="user">$CONF{database.user}</prop>
<prop key="password">$CONF{database.password}</prop>
<prop key="URL">$CONF{database.url}</prop>
<prop key="pinGlobalTxToPhysicalConnection">true</prop>
<prop key="autoReconnect">true</prop>
</props>
</property>
</bean>
Во время расследования я обнаружил, что параметр autoReconnect = true только повторно соединяет мое ошибочное соединение после задержки в 2 секунды (который настраивается, я думаю). Просматривая веб-страницы, я нашел решения, предлагающие увеличить wait_timeout на MySQL-сервере, что, я думаю, не является реальным решением. Приложение должно иметь возможность обрабатывать неработающие соединения и автоматически переподключаться, поскольку могут быть другиепроблемы, вызывающие потерю соединения. (И я не хочу давать какие-либо директивы серверам, какого бы рода приложение не использовалось).
Наконец-то я нашел для этого хорошее решение, которое я опубликую в ответчтобы помочь людям, сталкивающимся с такими же или похожими проблемами.