2009-08-04 4 views
1

Я использую JNDI контекст для создания источника данных для JDBC-драйверов в файле context.xml Tomcat как это,Как создать источник данных без Pooling в Tomcat

<Resource name="db/test" 
      type="javax.sql.DataSource" 
      driverClassName="com.test.jdbc.Driver" 
      url="jdbc:fastdb://localhost:3306/session_db?autoReconnect=true&amp;connectTimeout=5000&amp;socketTimeout=5000" 
      zeroDateTimeBehavior="convertToNull" 
      username="dbuser" 
      password="password" 
      maxActive="100" 
      maxWait="2" 
      removeAbandoned="true" 
      removeAbandonedTimeout="60" 
      logAbandoned="true" /> 

По умолчанию, Tomcat будет использовать ГСБД источник данных завода и создал объединение источников данных. Конкретная база данных и драйвер, который мы используем, уже поддерживают объединение на более низком уровне, а дополнительный пул фактически наносит ущерб производительности. Нужно ли вообще создавать базовый источник данных (без объединения) с использованием ресурса JNDI, чтобы я мог переключаться между различными базами данных с минимальными изменениями конфигурации?

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

+0

Какого драйвер JDBC вы используете? – laz

ответ

2

Не совсем уверен, если это то, что удовлетворит вас, но вы всегда можете использовать Spring JDBC support без использования источников данных, управляемых Tomcat.

+0

Мы просто удалили весну. Мы видели некоторое повышение производительности и не хотим возвращаться к нему. –

+2

Вау ... Плохие решения нашего времени .... – skaffman

0

Использует ли драйвер JDBC поставку для реализации javax.naming.spi.ObjectFactory или какой-либо другой объект подключения, который можно настроить с помощью org.apache.naming.factory.BeanFactory? Любой из этих решений не потребует от вас написания собственного кода или добавления дополнительных сторонних библиотек.

+0

Нет. Ничего подобного в драйвере JDBC. –

+0

Тогда я не думаю, что есть более простое решение, чем написание собственной фабрики или поиск другой библиотеки для ее предоставления. – laz

0

Если вы действительно хотите только одно соединение, попробуйте установить intialSize в 1 и maxActive на 1 в DBCP configuration.

В долгосрочной перспективе, если вы не хотите использовать пул соединений, тогда не используйте JNDI для настройки источника данных, просто создайте его непосредственно в коде вашего веб-приложения.

Edit:

В вашем комментарии вы говорите: «Это только позволяет одно соединение и сервер зависает сразу, потому что каждый запрос ожидает соединения.»

Да, если вы эффективно отключите пул, создав пул размером 1, вот что произойдет. Но название вашего вопроса: «Как создать источник данных без пула», поэтому я смущен тем, что именно вы пытаетесь выполнить.

Мое предложение состоять в том, чтобы не использовать JNDI для определения ваших соединений (вся цель определения источника данных JNDI - для объединения пулов в веб-приложениях). Вместо этого определите свое соединение в вашем сервлет-коде для двух случаев, в одном случае, который продолжает использовать DBCP, а другой случай, который использует ваш другой пул соединений низкого уровня.

+0

Пробовал maxActive до 1, и он не работает. Он позволяет только одно соединение, и сервер сразу же зависает, потому что каждый запрос ожидает соединения. Мы используем JNDI, потому что это проще всего для DBCP. Мы используем две разные базы данных взаимозаменяемо. Не хотите иметь два разных способа настройки. –

0

Я сделал это для Oracle, не объединенная связи, как это:

<Resource 
     name="jdbc/aqds" 
     auth="Container" 
     type="oracle.jdbc.pool.OracleDataSource" 
     factory="oracle.jdbc.pool.OracleDataSourceFactory" 
     url="jdbc:oracle:thin:@localhost:1521:XE" 
     user="MYUSER" 
     password="MYPASSWORD" />