Я использую JNDI ressource в Tomcat8 для подключения к базе данных MS-SQL (Azure). Случайно я испытываю исключение Connection closed
, в конечном итоге претерпела Connection peer reset
событий. Когда это произойдет, служба мертва (работает в Connection closed
для каждого запроса), и перезапуск tomcat (redploying) - это единственный шанс получить его снова.Шаблон для источника данных JDNI
На моем пути, пытаясь решить эту проблему, я дважды (тройной) проверил каждый метод для незакрытых соединений. Уверяю, что каждое соединение открывается как try-with-ressource
.
В настоящее время я пытаюсь получить лучшее представление о ресурсах JNDI и пуле соединений, я спрашиваю, какой предпочтительный шаблон для реализации класса сервиса, который вводится в другие службы. Например. вопросы
Где должен
DataSource
выделяться по телефонуctx.lookup()
? На уровне метода или классе? Например. при использовании аннотации hk2@Service
кажется, что служба создается только один раз, а не по запросу. В настоящее времяctx.lookup()
вызывается один раз (в конструкторе), аDataSource
хранится в поле класса, а позже - с помощью методов с использованиемthis.dataSource
. Имеет ли это смысл ? Или следует получитьDataSource
по каждому запросу (= вызов метода)Как проверить выполнение нескольких параметров источника данных, например.
testOnBorrow
иremoveAbandoned
(см. Полную конфигурацию ниже) выполнены правильно? Есть опцияlogAbandoned
, но я ничего не вижу в своих журналах. Где это должно появиться? Могу ли я каким-то образом определить определенный уровень журнала для пула? Я нашел толькоorg.apache.tomcat.jdbc.pool
, но этот класс, кажется, только вызывается при создании пула (по крайней мере, это единственный момент, когда появляются журналы, даже на уровнеFINEST
).Есть ли общие шаблоны, о которых я не знаю?
Вот моя текущая конфигурация:
<Resource name="jdbc/mssql"
auth="Container"
type="javax.sql.XADataSource"
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
username="***"
password="***"
url="jdbc:sqlserver://***.database.windows.net:1433;database=***;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;"
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
removeAbandonedOnBorrow="true"
removeAbandonedTimeout="55"
removeAbandonedOnMaintenance="true"
timeBetweenEvictionRunsMillis="34000"
minEvictableIdleTimeMillis="55000"
logAbandoned="true"
validationQuery="SELECT 1"
validationInterval="34000"
/>
Thx, gapvision
Это не ответ, добавьте его в качестве комментария! –
Я ищу шаблон дизайна! – gapvision
Обновлен мой ответ. Пожалуйста, проверьте. –