Концепция пула соединений Tomcat и пул соединений c3p0? - PullRequest
0 голосов
/ 08 декабря 2011

У меня есть два веб-приложения Java, работающих под управлением Tomcat (6.0) и использующих пул соединений Tomcat & c3p0 в качестве источника данных Tomcat. Если я определю два ресурса (server.xml) для двух разных соединений Oracle и использую c3p0 для пула соединенийкак указано ниже, мои приложения, которые мы используем, мои вопросы:

<Resource 
name="jdbc/OracleDB" 
auth="Container" 
type="com.mchange.v2.c3p0.ComboPooledDataSource"
driverClass="oracle.jdbc.OracleDriver"
factory="xxx"
jdbcUrl="jdbc:oracle:thin:@(DESCRIPTION= (LOAD_BALANCE=on)(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=xxx) (PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=xxx)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=xxx)))"
maxPoolSize="10" 
minPoolSize="0" 
maxIdleTime="60" 
maxConnectionAge="600"
acquireIncrement="1"
user="xxx="
password="xxx=" />


<Resource name="jdbc/xxx2DB" 
auth="Container"
type="com.mchange.v2.c3p0.ComboPooledDataSource"
driverClass="oracle.jdbc.OracleDriver"  
factory="xxx"   
jdbcUrl="jdbc:oracle:thin:@xxx:1527:xxx"
maxPoolSize="10" 
minPoolSize="0" 
acquireIncrement="1"
maxIdleTime="60" 
maxConnectionAge="600"
user="xxx" 
password="xxx" 
/> 

Q1 .Означает ли приведенное ниже в файле server.xml, что в памяти Tomcat существуют два пула подключений к двум разным экземплярам Oracle?

Q2 .Нужно ли указывать какие-либо свойства конфигурации (ref: http://www.mchange.com/projects/c3p0/index.html#configuration_properties), в моем случае у меня есть соединение с экземпляром Oracle RAC, а другое - с одним экземпляром Oracle. Должен ли я учитывать любые дополнительные свойства конфигурации вкорпоративная среда?

Q3 . Достаточно ли допустимы следующие настройки?

Q4 . Как включить ведение журнала c3p0 (у меня есть только jarв Tomcat lib и вышеупомянутых настройках на данный момент?

Любой совет?

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 17 декабря 2011

A1: Да

A2: Выглядит прямо на первый взгляд.Вы должны быть осторожны с RAC в случае, если вы будете использовать распределенные транзакции - тогда я считаю, что вам придется указать дополнительные свойства.

A3: Выглядит нормально, но в зависимости от вашей задачи и предполагаемой нагрузкиЯ бы поиграл с maxIdleTime, acquIncrement и maxPoolSize.Например, при текущих настройках после 60 секунд бездействия ваше соединение будет закрыто, поэтому следующая операция, запрашивающая соединение через 60 секунд, повлечет за собой штраф за ожидание открытия нового соединения.

A4: http://www.mchange.com/projects/c3p0/index.html#configuring_logging

Советы:

  1. Есть лучшепул соединений от Tomcat 7, который также можно использовать в Tomcat 6.Учтите это, особенно если вам нужна высокая производительность

  2. Рассмотрите тестирование соединения , чтобы ваше приложение не получало (или получало реже) исключение, когда соединение с БД прерывается

  3. Может быть предпочтительнее использовать пул соединений пакетов и его конфигурацию в вашем приложении, а не в Tomcat.Таким образом приложение WAR будет автономным, поэтому его можно будет просто поместить в каталог wabapps от Tomcat.

2 голосов
/ 13 декабря 2011

A1: Да.

A2 : Не уверен, правильно ли я понял вопрос, но вы должны указывать только те свойства соединения, которые по умолчанию не имеют смыслатебе.Вероятно, лучше всего сделать это в отдельном файле c3p0.properties и указать, к какому соединению относится свойство.Ответ на вопрос «Дополнительные свойства конфигурации» требует знания особенностей вашей среды.Я бы порекомендовал взглянуть на настройки idle_test_period, так как они обычно могут иметь неправильные значения по умолчанию (убедитесь, что они соответствуют соответствующим настройкам на конце БД).

A3: Да, это выглядит нормально.

A4: Необходимо указать параметры ведения журнала в c3p0.properties или определить их динамически как свойства системы.См. эту главу руководства c3p0 .

...