Commit e56d299e authored by GregDThomas's avatar GregDThomas Committed by daryl herzmann

OF-1419: Replace Proxool with Apache Commons DBCP (#980)

* OF-1419: Replace Proxool with Apache Commons DBCP

* Restore the -SNAPSHOT which somehow got lost in the merge
parent 716188de
......@@ -10,7 +10,8 @@ cglib.jar | 2.1.3 (JMock 2.1.0)
commons-lang.jar | 2.3 | Apache 2.0
commons-httpclient.jar | 3.1 | Apache 2.0
commons-codec.jar | 1.9 | Apache 2.0
commons-pool2.jar | 2.4.2 | Apache 2.0
commons-pool2-2.4.2.jar | 2.4.2 | Apache 2.0
commons-dbcp2-2.1.1.jar | 2.1.1 | Apache 2.0
dom4j.jar | 2.0.0 | See https://github.com/dom4j/dom4j/blob/master/LICENSE
concurrentlinkedhashmap-lru | concurrentlinkedhashmap-lru-1.0_jdk5 | Apache 2.0
dbutil.jar | Jive Code, no release version. | GPL
......@@ -74,7 +75,6 @@ ognl.jar | 3.0.5 (Apache Mina 2.0.7)
mysql.jar | 5.1.42 | GPL
pack200task.jar | August 5, 2004 | LGPL
postgres.jar | 42.1.4 JDBC 41 jre7 | BSD (http://jdbc.postgresql.org/license.html)
proxool.jar | 0.9.0RC3+ (see note #1) | Apache 1.1 (http://proxool.sourceforge.net/licence.html)
rome.jar | 0.9 | Apache 2.0
rome-fetcher.jar | 0.9 | Apache 2.0
servlet-api.jar | 3.1 - from Jetty 9.2.14.v20151106 | CDDL Version 1.0 (https://glassfish.dev.java.net/nonav/public/CDDL+GPL.html)
......@@ -92,5 +92,4 @@ xpp3.jar | XPP_3 1.1.4c
Notes
-----
1) proxool - patched ProxyConnection to send log message in #registerClosedStatement to debug instead of warn
2) npn-boot-1.1.7.v20140316.jar added to dist folder
1) npn-boot-1.1.7.v20140316.jar added to dist folder
......@@ -866,6 +866,11 @@ server.db.transaction_level=Úroveň izolace transakcí:
server.db.multiple_connect=Podpora vícenásobných připojení
server.db.multiple_connect2=najednou otevřeno:
server.db.read_only_mode=V režimu jen pro čtení:
server.db.connection_idle_time=Minimum Idle Time:
server.db.connection_max_wait_time=Maximum Wait Time:
server.db.test_timeout=Test Timeout:
server.db.connection_mean_borrow_time=Average time waited:
server.db.connection_max_borrow_time=Max time waited:
server.db_stats.title=Statistika databázových dotazů
server.db_stats.description=Povolte statistiku databázových dotazů pro sledování všech provedených databázových dotazů. \
......
......@@ -2199,6 +2199,13 @@ plugin.enterprise.dont.show=Don't show this page again
plugin.enterprise.download.error=Unable to download the Enterprise plugin. Please try again.
plugin.enterprise.installed=Enterprise plugin installed successfully. Refreshing momentarily...
plugin.enterprise.installing=Installing Enterprise Plugin...
server.db.connection_idle_time=Minimum Idle Time:
server.db.connection_max_wait_time=Maximum Wait Time:
server.db.test_timeout=Test Timeout:
server.db.connection_mean_borrow_time=Average time waited:
server.db.connection_max_borrow_time=Max time waited:
server.db_stats.average_time=Avg. Time
server.db_stats.avg_rate=Average time for each operation (ms)
server.db_stats.clear_stats=Clear All Stats
......@@ -2228,6 +2235,7 @@ server.db_stats.total_rate=Operations per second
server.db_stats.total_time=Total time for all operations (ms)
server.db_stats.update=Update
server.db_stats.update_stats=UPDATE Query Statistics
setup.admin.settings.add.administrator=Add Administrator
setup.admin.settings.administrator=Administrator
setup.admin.settings.ldap.info=Choose one or more users from your LDAP directory to be administrators by \
......
......@@ -1516,11 +1516,11 @@ server.db.connections.available=available
server.db.connections.max=max
server.db.connections_served=Connections Served:
server.db.connections_refused=Connections Refused:
server.db.connection_details=Connection Details:
server.db.connection_details.id=Id
server.db.connection_details.when_created=When Created
server.db.connection_details.last_used=Last Used
server.db.connection_details.thread=Thread
server.db.connection_idle_time=Minimum Idle Time:
server.db.connection_max_wait_time=Maximum Wait Time:
server.db.test_timeout=Test Timeout:
server.db.connection_mean_borrow_time=Average time waited:
server.db.connection_max_borrow_time=Max time waited:
server.db_stats.title=Database Query Statistics
server.db_stats.description=Enable database query statistics to trace all database queries made. \
......
......@@ -982,11 +982,11 @@ server.db.connections.available=disponible
server.db.connections.max=máximo
server.db.connections_served=Conexiones Servidas:
server.db.connections_refused=Conexiones Rechazadas:
server.db.connection_details=Detalles de Conexión:
server.db.connection_details.id=Id
server.db.connection_details.when_created=Cuando Creada
server.db.connection_details.last_used=Último Uso
server.db.connection_details.thread=Hilo
server.db.connection_idle_time=Minimum Idle Time:
server.db.connection_max_wait_time=Maximum Wait Time:
server.db.test_timeout=Test Timeout:
server.db.connection_mean_borrow_time=Average time waited:
server.db.connection_max_borrow_time=Max time waited:
server.db_stats.title=Estadísticas de consultas a la base de datos
server.db_stats.description=Habilite las estadísticas de consultas a la base de datos para rastrear \
......
......@@ -728,6 +728,12 @@ server.db.transaction_level = Niveau d'Isolation des Transactions \:
server.db.multiple_connect = Permet des connexions multiples
server.db.multiple_connect2 = ouvertes simultanément \:
server.db.read_only_mode = En mode lecture seule \:
server.db.connection_idle_time=Minimum Idle Time:
server.db.connection_max_wait_time=Maximum Wait Time:
server.db.test_timeout=Test Timeout:
server.db.connection_mean_borrow_time=Average time waited:
server.db.connection_max_borrow_time=Max time waited:
server.db_stats.title = Statistiques de requete BDD
server.db_stats.description = Activer les statistiques de requete BDD afin de tracer toutes les requetes effectuées contre la base. Cela peut etre utile pour le debugage et observer les performances de la base. Cependant, il n'est pas recommandé de laisser tourner ce processus car il peut ralentir les requetes.
server.db_stats.status = Etat des statistiques de requete
......@@ -754,6 +760,7 @@ server.db_stats.count = Compte
server.db_stats.time = Temps Total
server.db_stats.average_time = Temps Moyen
server.db_stats.no_queries = Aucune Requete
# Server properties Page
server.properties.title = Propriétés du Système
server.properties.info = Ci-dessous vous trouverez la liste des propriétés du système. Les valeurs des champs de type mot de passe sont cachés. Les noms et valeurs de propriétés sont tronqués. Maintenez votre souris au dessus de la propriété pour voir la valeur en entier ou pour voir le nom et la valeur, cliquez sur l'icône de modifiation juste à coté de la propriété.
......
......@@ -890,6 +890,11 @@ server.db.transaction_level=トランザクション分離レベル:
server.db.multiple_connect=複数セッションサポート
server.db.multiple_connect2=同時にオープン:
server.db.read_only_mode=読み取り専用モード:
server.db.connection_idle_time=Minimum Idle Time:
server.db.connection_max_wait_time=Maximum Wait Time:
server.db.test_timeout=Test Timeout:
server.db.connection_mean_borrow_time=Average time waited:
server.db.connection_max_borrow_time=Max time waited:
server.db_stats.title=データベースクエリー統計
server.db_stats.description=全てのデータベースクエリーをトレースするために、クエリー統計を有効にします。\
......
......@@ -2204,6 +2204,13 @@ plugin.enterprise.dont.show=Don't show this page again
plugin.enterprise.download.error=Unable to download the Enterprise plugin. Please try again.
plugin.enterprise.installed=Enterprise plugin installed successfully. Refreshing momentarily...
plugin.enterprise.installing=Installing Enterprise Plugin...
server.db.connection_idle_time=Minimum Idle Time:
server.db.connection_max_wait_time=Maximum Wait Time:
server.db.test_timeout=Test Timeout:
server.db.connection_mean_borrow_time=Average time waited:
server.db.connection_max_borrow_time=Max time waited:
server.db_stats.average_time=Avg. Time
server.db_stats.avg_rate=Average time for each operation (ms)
server.db_stats.clear_stats=Clear All Stats
......@@ -2233,6 +2240,7 @@ server.db_stats.total_rate=Operations per second
server.db_stats.total_time=Total time for all operations (ms)
server.db_stats.update=Update
server.db_stats.update_stats=UPDATE Query Statistics
setup.admin.settings.add.administrator=Add Administrator
setup.admin.settings.administrator=Administrator
setup.admin.settings.ldap.info=Choose one or more users from your LDAP directory to be administrators by \
......
......@@ -2172,6 +2172,13 @@ plugin.enterprise.dont.show=Don't show this page again
plugin.enterprise.download.error=Unable to download the Enterprise plugin. Please try again.
plugin.enterprise.installed=Enterprise plugin installed successfully. Refreshing momentarily...
plugin.enterprise.installing=Installing Enterprise Plugin...
server.db.connection_idle_time=Minimum Idle Time:
server.db.connection_max_wait_time=Maximum Wait Time:
server.db.test_timeout=Test Timeout:
server.db.connection_mean_borrow_time=Average time waited:
server.db.connection_max_borrow_time=Max time waited:
server.db_stats.average_time=Avg. Time
server.db_stats.avg_rate=Average time for each operation (ms)
server.db_stats.clear_stats=Clear All Stats
......@@ -2201,6 +2208,7 @@ server.db_stats.total_rate=Operations per second
server.db_stats.total_time=Total time for all operations (ms)
server.db_stats.update=Update
server.db_stats.update_stats=UPDATE Query Statistics
server2server.settings.domain=Domain
setup.admin.settings.add.administrator=Add Administrator
setup.admin.settings.administrator=Administrator
......
......@@ -864,6 +864,11 @@ server.db.transaction_level=Nível de Isolamento de Transação:
server.db.multiple_connect=Suporta multiplas conexões
server.db.multiple_connect2=abertas de uma vez:
server.db.read_only_mode=Em modo somente leitura:
server.db.connection_idle_time=Minimum Idle Time:
server.db.connection_max_wait_time=Maximum Wait Time:
server.db.test_timeout=Test Timeout:
server.db.connection_mean_borrow_time=Average time waited:
server.db.connection_max_borrow_time=Max time waited:
server.db_stats.title=Estatística de Consulta do Banco de Dados
server.db_stats.description=Ativa estatísticas de consulta do banco de dados para rastrear todas as consultas feitas no banco. \
......
......@@ -1134,8 +1134,8 @@ muc.room.affiliations.info_detail=Proprietários de Sala podem alterar a configu
associação de utilizador e privilégios de moderador. Membros de sala apenas tem permissão de se juntar \
a salas quando ela está configurada como "apenas membros". Exilados são utilizadores que foram \
excluidos de uma sala.
muc.room.affiliations.error_removing_user=Erro ao remover o utilizador. A sala deve ter pelo menos um proprietário.
muc.room.affiliations.error_banning_user=Erro ao excluir o utilizador. Proprietários e Administradores não podem ser excluidos.
muc.room.affiliations.error_adding_user=Erro ao adicionar o utilizador. Verifique se a JID está correta.
......@@ -1419,11 +1419,11 @@ server.db.connections.available=disponivel
server.db.connections.max=maximo
server.db.connections_served=Ligações servidas:
server.db.connections_refused=Ligações recusadas:
server.db.connection_details=Detalhes da Ligação:
server.db.connection_details.id=Id
server.db.connection_details.when_created=Quando foi criada
server.db.connection_details.last_used=Ultimo Uso
server.db.connection_details.thread=Processo
server.db.connection_idle_time=Minimum Idle Time:
server.db.connection_max_wait_time=Maximum Wait Time:
server.db.test_timeout=Test Timeout:
server.db.connection_mean_borrow_time=Average time waited:
server.db.connection_max_borrow_time=Max time waited:
server.db_stats.title=Estatística de Consulta da Base de Dados
server.db_stats.description=Ativa estatísticas de consulta da base de dados para verificar todas as consultas feitas na BD. \
......
......@@ -1035,11 +1035,11 @@ server.db.connections.available=доступно
server.db.connections.max=максимально
server.db.connections_served=Соединений обслуживается:
server.db.connections_refused=Соединений отказано:
server.db.connection_details=Подробности соединения:
server.db.connection_details.id=ID
server.db.connection_details.when_created=Создание
server.db.connection_details.last_used=Использовалось
server.db.connection_details.thread=Чем
server.db.connection_idle_time=Minimum Idle Time:
server.db.connection_max_wait_time=Maximum Wait Time:
server.db.test_timeout=Test Timeout:
server.db.connection_mean_borrow_time=Average time waited:
server.db.connection_max_borrow_time=Max time waited:
server.db_stats.title=Статистика запросов к базе данных
server.db_stats.description=Включить статистику запросов базы данных для отслеживания всех запросов к базе данных. Это может быть полезно для отладки проблем и мониторинга производительности базы данных. Однако, не рекомендуется оставлять сбор статистики запросов к БД на постоянной основе, так как это может вызвать незначительное ухудшение производительности.
......
......@@ -867,11 +867,11 @@ server.db.connections.available=dostupné
server.db.connections.max=max.
server.db.connections_served=Obslúžených spojení:
server.db.connections_refused=Odmietnutých spojení:
server.db.connection_details=Podrobnosti spojenia:
server.db.connection_details.id=ID
server.db.connection_details.when_created=Kedo bolo vytvorené
server.db.connection_details.last_used=Naposledy použité
server.db.connection_details.thread=Vlákno
server.db.connection_idle_time=Minimum Idle Time:
server.db.connection_max_wait_time=Maximum Wait Time:
server.db.test_timeout=Test Timeout:
server.db.connection_mean_borrow_time=Average time waited:
server.db.connection_max_borrow_time=Max time waited:
server.db_stats.title=Štatistika požiadaviek databázy
server.db_stats.description=Zapnúť štatistiku požiadaviek databázy - sledovanie všetkých požiadaviek do databázy. To môže byť užitočné na ladenie a monitorovanie výkonnosti databázy. Neodporúča sa však, aby ste nechávali štatistiku požiadaviek bežať permanentne, keďže to môže spôsobiť mierne spomalenie výkonu.
......
......@@ -918,11 +918,11 @@ server.db.connections.available=可用的
server.db.connections.max=最大
server.db.connections_served=连接成功:
server.db.connections_refused=连接被拒绝:
server.db.connection_details=连接详细信息:
server.db.connection_details.id=编号
server.db.connection_details.when_created=创建时间
server.db.connection_details.last_used=最后使用
server.db.connection_details.thread=线程
server.db.connection_idle_time=Minimum Idle Time:
server.db.connection_max_wait_time=Maximum Wait Time:
server.db.test_timeout=Test Timeout:
server.db.connection_mean_borrow_time=Average time waited:
server.db.connection_max_borrow_time=Max time waited:
server.db_stats.title=数据库查询统计
server.db_stats.description=使用数据库查询统计跟踪所有数据库相关查询。此功能可以用于跟踪问题和监控数据库性能。然而我们并不推荐永久的使用这个功能,因为他将引起性能上面的下降。
......
......@@ -42,6 +42,13 @@
<h1>
</h1>
<p><b>0.0.8</b> -- December 14 2017</p>
<ul>
<li>[<a href='https://igniterealtime.org/issues/browse/OF-1419'></a>] - Replace Proxool with Apache Commons DBCP</li>
<li>Minimum server requirement: 4.3.0</li>
</ul>
<p><b>0.0.7</b> -- September 30 2017</p>
<ul>
......
......@@ -4,9 +4,9 @@
<class>com.ifsoft.jmxweb.plugin.JmxWebPlugin</class>
<name>JmxWeb Plugin</name>
<description>JmxWeb plugin is web based platform for managing and monitoring openfire via JMX.</description>
<version>0.0.7</version>
<version>0.0.8</version>
<licenseType>Apache 2.0</licenseType>
<date>09/30/2017</date>
<minServerVersion>4.1.5</minServerVersion>
<date>12/14/2017</date>
<minServerVersion>4.3.0</minServerVersion>
<author>igniterealtime.org</author>
</plugin>
......@@ -8,7 +8,7 @@
</parent>
<groupId>org.igniterealtime.openfire.plugins</groupId>
<artifactId>jmxweb</artifactId>
<version>0.0.7</version>
<version>0.0.8</version>
<name>JMXWeb Plugin</name>
<description>JmxWeb plugin is web based platform for managing and monitoring openfire via JMX.</description>
......
package com.javamonitor.openfire.mbeans;
import org.logicalcobwebs.proxool.ConnectionPoolDefinitionIF;
import org.logicalcobwebs.proxool.ProxoolException;
import org.logicalcobwebs.proxool.ProxoolFacade;
import org.logicalcobwebs.proxool.admin.SnapshotIF;
import org.jivesoftware.database.ConnectionProvider;
import org.jivesoftware.database.DbConnectionManager;
import org.jivesoftware.database.DefaultConnectionProvider;
import org.jivesoftware.util.JiveConstants;
/**
* The database monitor pool.
*
* XXX it makes more sense to register Proxools JMX features directly!
*
* @author Guus der Kinderen, guus.der.kinderen@gmail.com
*/
public class DatabasePool implements DatabasePoolMBean {
private static SnapshotIF getSnapshot() throws ProxoolException {
return ProxoolFacade.getSnapshot("openfire", true);
}
private static ConnectionPoolDefinitionIF getPoolDef()
throws ProxoolException {
return ProxoolFacade.getConnectionPoolDefinition("openfire");
private static DefaultConnectionProvider getDefaultConnectionProvider() {
final ConnectionProvider connectionProvider = DbConnectionManager.getConnectionProvider();
if(connectionProvider instanceof DefaultConnectionProvider) {
return (DefaultConnectionProvider) connectionProvider;
} else {
return null;
}
}
/**
* Start collecting database packets.
*/
......@@ -39,70 +39,64 @@ public class DatabasePool implements DatabasePoolMBean {
/**
* @see com.javamonitor.openfire.mbeans.DatabasePoolMBean#getActiveConnectionCount()
*/
public int getActiveConnectionCount() throws ProxoolException {
return getSnapshot().getActiveConnectionCount();
public int getActiveConnectionCount() {
final DefaultConnectionProvider defaultConnectionProvider = getDefaultConnectionProvider();
return defaultConnectionProvider == null ? 0 : defaultConnectionProvider.getActiveConnections();
}
/**
* @see com.javamonitor.openfire.mbeans.DatabasePoolMBean#getAvailableConnectionCount()
*/
public int getAvailableConnectionCount() throws ProxoolException {
return getSnapshot().getAvailableConnectionCount();
public int getAvailableConnectionCount() {
final DefaultConnectionProvider defaultConnectionProvider = getDefaultConnectionProvider();
return defaultConnectionProvider == null ? 0 : defaultConnectionProvider.getMaxConnections() - defaultConnectionProvider.getActiveConnections();
}
/**
* @see com.javamonitor.openfire.mbeans.DatabasePoolMBean#getConnectionCount()
*/
public long getConnectionCount() throws ProxoolException {
return getSnapshot().getConnectionCount();
}
/**
* @see com.javamonitor.openfire.mbeans.DatabasePoolMBean#getOfflineConnectionCount()
*/
public int getOfflineConnectionCount() throws ProxoolException {
return getSnapshot().getOfflineConnectionCount();
public long getConnectionCount(){
final DefaultConnectionProvider defaultConnectionProvider = getDefaultConnectionProvider();
return defaultConnectionProvider == null ? 0 : defaultConnectionProvider.getActiveConnections() + defaultConnectionProvider.getIdleConnections();
}
/**
* @see com.javamonitor.openfire.mbeans.DatabasePoolMBean#getRefusedCount()
*/
public long getRefusedCount() throws ProxoolException {
return getSnapshot().getRefusedCount();
public long getRefusedCount() {
final DefaultConnectionProvider defaultConnectionProvider = getDefaultConnectionProvider();
return defaultConnectionProvider == null ? 0 : defaultConnectionProvider.getRefusedCount();
}
/**
* @see com.javamonitor.openfire.mbeans.DatabasePoolMBean#getServedCount()
*/
public long getServedCount() throws ProxoolException {
return getSnapshot().getServedCount();
public long getServedCount() {
final DefaultConnectionProvider defaultConnectionProvider = getDefaultConnectionProvider();
return defaultConnectionProvider == null ? 0 : defaultConnectionProvider.getConnectionsServed();
}
/**
* @see com.javamonitor.openfire.mbeans.DatabasePoolMBean#getMaximumConnectionCount()
*/
public int getMaximumConnectionCount() throws ProxoolException {
return getPoolDef().getMaximumConnectionCount();
public int getMaximumConnectionCount() {
final DefaultConnectionProvider defaultConnectionProvider = getDefaultConnectionProvider();
return defaultConnectionProvider == null ? 0 : defaultConnectionProvider.getMaxConnections();
}
/**
* @see com.javamonitor.openfire.mbeans.DatabasePoolMBean#getMinimumConnectionCount()
*/
public int getMinimumConnectionCount() throws ProxoolException {
return getPoolDef().getMinimumConnectionCount();
}
/**
* @see com.javamonitor.openfire.mbeans.DatabasePoolMBean#getMaximumActiveTime()
*/
public long getMaximumActiveTime() throws ProxoolException {
return getPoolDef().getMaximumActiveTime();
public int getMinimumConnectionCount() {
final DefaultConnectionProvider defaultConnectionProvider = getDefaultConnectionProvider();
return defaultConnectionProvider == null ? 0 : defaultConnectionProvider.getMinConnections();
}
/**
* @see com.javamonitor.openfire.mbeans.DatabasePoolMBean#getMaximumConnectionLifetime()
*/
public long getMaximumConnectionLifetime() throws ProxoolException {
return getPoolDef().getMaximumConnectionLifetime();
public long getMaximumConnectionLifetime() {
final DefaultConnectionProvider defaultConnectionProvider = getDefaultConnectionProvider();
return defaultConnectionProvider == null ? 0L : (long) (defaultConnectionProvider.getConnectionTimeout() * JiveConstants.DAY);
}
}
package com.javamonitor.openfire.mbeans;
import org.logicalcobwebs.proxool.ProxoolException;
import java.sql.SQLException;
/**
* The proxool database pool MBean interface.
......@@ -8,23 +8,19 @@ import org.logicalcobwebs.proxool.ProxoolException;
* @author Guus der Kinderen, guus.der.kinderen@gmail.com
*/
public interface DatabasePoolMBean {
int getMinimumConnectionCount() throws ProxoolException;
int getMinimumConnectionCount() throws SQLException;
int getMaximumConnectionCount() throws ProxoolException;
int getMaximumConnectionCount() throws SQLException;
int getAvailableConnectionCount() throws ProxoolException;
int getAvailableConnectionCount() throws SQLException;
int getActiveConnectionCount() throws ProxoolException;
int getActiveConnectionCount() throws SQLException;
long getMaximumActiveTime() throws ProxoolException;
long getMaximumConnectionLifetime() throws SQLException;
long getMaximumConnectionLifetime() throws ProxoolException;
long getServedCount() throws SQLException;
long getServedCount() throws ProxoolException;
long getRefusedCount() throws SQLException;
long getRefusedCount() throws ProxoolException;
int getOfflineConnectionCount() throws ProxoolException;
long getConnectionCount() throws ProxoolException;
long getConnectionCount() throws SQLException;
}
......@@ -163,7 +163,7 @@
<plugin.name>${project.artifactId}</plugin.name>
<!-- Versions -->
<openfire.version>4.2.0</openfire.version>
<openfire.version>4.3.0-SNAPSHOT</openfire.version>
</properties>
<profiles>
......
This diff is collapsed.
......@@ -331,21 +331,21 @@
<version>1.0</version>
</dependency>
<dependency>
<groupId>com.cloudhopper.proxool</groupId>
<artifactId>proxool</artifactId>
<version>0.9.1</version>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.1.1</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
<exclusion>
<!-- This wasn not included prior to the Mavenization of Openfire, and pulls in an unwanted old servlet API. -->
<groupId>avalon-framework</groupId>
<artifactId>avalon-framework-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.4.2</version>
</dependency>
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment