Пулы соединений Tomcat JDBC разделяются между экземплярами? - PullRequest
4 голосов
/ 27 августа 2009

Сейчас у нас есть веб-приложение, в котором мы развертываем копию для каждого клиента. Наша текущая стратегия развертывания состоит в том, чтобы создать пул соединений с уникальным именем jdbc для каждого экземпляра. так сказать, JDBC / клиент. Они указаны так ...

< Context path="/"
        reloadable="true"
        docBase="\home\client\ROOT"
        debug="5" >
        < Resource name="jdbc/client"
                auth="Container"
                type="javax.sql.DataSource"
                maxActive="100"
                maxIdle="30"
                validationQuery="SELECT 1"
                testWhileIdle="true"
                timeBetweenEvictionRunsMillis="300000"
                numTestsPerEvictionRun="6"
                minEvictableIdleTimeMillis="1800000"
                maxWait="10000"
                username="user"
                password="pass"
                driverClassName="com.mysql.jdbc.Driver"
                url="jdbc:mysql://databaseserver:3306/client ?zeroDateTimeBehavior=convertToNull&amp;jdbcCompliantTruncation=false"/>
< /Context>

Вопрос в том, чтобы, если бы я стандартизировал его так, чтобы вместо уникальных имен пул соединений назывался jdbc / database во всех развернутых экземплярах, есть ли вероятность пересечения базы данных, то есть одного клиента в базе данных другого клиента, или они локализованы для конкретного развернутого экземпляра?

Мысли? Спасибо, Скотт

Ответы [ 4 ]

4 голосов
/ 27 августа 2009

Нет. Область имени источника данных - один экземпляр Tomcat.

Если вы запускаете отдельный процесс Tomcat для каждого клиента, все, что имеет значение, это то, как настроен источник данных, а не то, как его называет Tomcat. Пока каждый источник данных настроен на использование отдельной базы данных, перекрестных разговоров не будет.

3 голосов
/ 28 августа 2009

Это зависит от того, как вы развертываете приложение для каждого клиента,

  1. Если каждый клиент получает свою собственную установку Tomcat (у него разные CATALINA_HOME), у него нет шансов пересечь его.
  2. Если они все используют одну и ту же установку, но работают в качестве другого хоста в Tomcat, вам нужно убедиться, что вы не определили источник данных в conf / context.xml, который используется всеми хостами.
  3. Если все клиенты используют одни и те же экземпляры Tomcat и являются просто разными веб-приложениями, требуется больше внимания. Вам необходимо определить источник данных либо в META-INF / context.xml, либо в WEB-INF / web.xml. Для дальнейшей изоляции вы должны скопировать dbcp.jar в WEB-INF / lib каждого приложения, чтобы они использовали свой собственный экземпляр DBCP.
1 голос
/ 27 августа 2009

Если вы определяете ресурс JNDI DataSource в контексте для развертывания приложения, я полагаю, что вы могли бы даже иметь несколько копий одного и того же приложения, работающего в одном экземпляре Tomcat и использующего одно и то же имя JNDI для доступа разные базы данных. Если каждый экземпляр приложения полностью выполняется в отдельном экземпляре Tomcat, то, безусловно, ни один экземпляр не будет ссылаться на базу данных, указанную для другого экземпляра.

0 голосов
/ 03 сентября 2009

Нет шансов на пересечение базы данных, так как область действия имени источника данных - один экземпляр Tomcat, и вы можете иметь несколько источников данных в одном экземпляре tomcat .... так что, пока источник данных отличается, шансов нет пересечения базы данных .....

...