Варианты подключения к Oracle8 через tomcat 8.5

#connection-pooling #tomcat8 #ojdbc

Вопрос:

Я работаю над войной, запущенной на Tomcat 8.5.40, скомпилированной с jdk 8.261, и мне нужно подключиться к Oracle с драйвером ojdb8-19.3.0.0. Будет больше войн, подключающихся к одной и той же базе данных.

AFAIK и найдено в документации, есть два основных способа реализации соединений:

Поскольку я обеспокоен производительностью соединений, я буду использовать пул соединений. Мой вопрос таков:

Являются ли оба подхода одинаковыми с точки зрения производительности?

Мне просто интересно, если использовать контексты, tomcat лучше управляет пулом, особенно когда его используют несколько войн.

Ответ №1:

Есть несколько недостатков в настройке источников данных в коде вместо JNDI:

  • Вы вводите зависимость своего кода от tomcat-jdbc конкретной версии этой библиотеки и от нее. Это означает, что ваше приложение будет работать только на определенных версиях Tomcat.
  • Вы теряете преимущества объединения пулов соединений между приложениями: если вы создадите источники данных программно, каждое приложение будет иметь свой собственный пул соединений. С другой стороны, с помощью JNDI вы можете решить, создавать ли один источник данных для каждого приложения или совместно использовать глобальный (см. Контекст в сравнении с глобальными именными ресурсами).

    Если вы используете глобальный источник данных, то незанятые соединения вашего пула доступны для всех приложений, поэтому необходимость открывать новые соединения TCP/IP с базой данных возникает реже (затраты времени на установление нового соединения TCP/IP составляют порядка миллисекунд, поэтому относительно высоки).

Пример GlobalNamingResources

Настройка источника данных в server.xml :

 <GlobalNamingResources>
    <Resource auth="Container"
              type="javax.sql.DataSource"
              name="jdbc/globalDb"
              username="username"
              password="secret"
              url="jdbc:..." />
    ...
</GlobalNamingResources>
 

Добавьте a <ResourceLink> в свой контекстный файл:

 <Context>
    <ResourceLink name="jdbc/db"
                  global="jdbc/globalDb"
                  type="javax.sql.DataSource" />
    ...
</Context>
 

Комментарии:

1. Не могли бы вы, пожалуйста, связать источник документации для вашего второго заявления? Звучит интересно

2. Я расширил ответ примером.