У меня есть небольшой набор пользовательских медиаторов 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 не пытается получить неактивное соединение и использовать его, и я подумал, что это весь смысл наличия пула соединений.
Любая помощь будет высоко ценится ..
Возможно, использование InitialContext - моя проблема, я попробую это :) – poison64