2017-02-20 21 views
0

У меня есть небольшой набор пользовательских медиаторов WSO2 ESB, которые используют базу данных оракула, к которому я соединяющему через WSO2 источник данных, как это:Как избежать неактивных сеансов с использованием пула соединений wso2 на оракуле?

\t private void Connect(boolean isRetry) throws SQLException { \t \t 
 
    \t DataSource ds = null; 
 
    \t 
 
\t \t try { 
 
\t \t \t Hashtable environment = new Hashtable(); 
 
\t   environment.put("java.naming.factory.initial", "org.wso2.carbon.tomcat.jndi.CarbonJavaURLContextFactory"); 
 
\t   Context initContext = new InitialContext(environment); 
 
\t   ds = (DataSource)initContext.lookup("jndi/kernel"); 
 
\t \t } catch (NamingException e) { 
 
\t \t \t throw new SQLException("Connection pool exception", e); 
 
\t \t } 
 
    \t 
 
\t \t // Nawiazanie polaczenia 
 
    \t this.connection = ds.getConnection(); 
 
\t \t this.connection.setAutoCommit(false); 
 
\t }

После использования подключения я закрывая его, как это:

\t public void Close() throws SQLException { 
 
\t \t try { 
 
\t \t \t if (this.connection != null) { 
 
\t \t \t \t this.connection.close(); 
 
\t \t \t \t this.connection = null; 
 
\t \t \t } 
 
\t \t } catch (SQLException e) { 
 
\t \t \t System.out.println(" @@ Failed to close the connection!"); 
 
\t \t \t e.printStackTrace(); 
 
\t \t \t throw e; 
 
\t \t } \t 
 
\t }

Каждый пользовательский посредник использует приведенный выше метод Connect в начале и методе Close в конце области действия в конце.

В одной последовательности (выполняемом процессор сообщений) существует, по крайней мере, 2 пользовательских посредники называют, иногда даже 5.

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

Любая помощь будет высоко ценится ..

ответ

0

Проблема была в том, что у меня «тест на холостом ходу» установлен в true. После этого все отлично.

1

Я в настоящее время собственный посредник, который должен получить соединение на БД Oracle. У меня нет этой проблемы неактивных сессий, хотя этот медиатор используется в последовательности, выполняемой процессором сообщений (обработка тысяч сообщений)

Не знаю, что именно не так в вашем случае, но я надеюсь, что это может помогите вам:

  • источник данных определяется в WSO2 ESB с помощью веб-консоли.
  • Драйвер используется oracle.jdbc.OracleDriver
  • определен Запрос проверки (выбрать 1 из двух)
  • тест на заема установлено значение истинно
  • макс активным является положительным числом
  • удалить заброшеных устанавливается истина
  • и, конечно, источник данных разоблачен как источник JNDI данных

в Java, то я не использую непосредственно InitialContext, чтобы сделал looku р: Я использую org.apache.synapse.commons.datasource.DataSourceFinder.find (DataSourceName, jndiProperties), где jndiProperties просто новый Properties()

В конце концов, мне просто нужно закрыть Resultset, заявление и подключение

Он хорошо работает с ESB 4.8.1 и ESB 5

+0

Возможно, использование InitialContext - моя проблема, я попробую это :) – poison64