66 * limitations under the License. See accompanying LICENSE file. */
77package org.jfrog.artifactory.client.ning
88
9- import java.util.concurrent.ExecutorService
9+ import java.util.concurrent.ThreadFactory
10+
1011import java.util.concurrent.Executors
1112import java.util.concurrent.ThreadFactory
13+ import java.util.concurrent.ExecutorService
14+ import java.util.concurrent.SynchronousQueue
15+ import java.util.concurrent.ThreadFactory
16+ import java.util.concurrent.ThreadPoolExecutor
17+ import java.util.concurrent.TimeUnit
1218
1319import org.jfrog.artifactory.client.Artifactory
1420import org.slf4j.Logger
@@ -30,17 +36,8 @@ import com.ning.http.client.Realm.AuthScheme
3036public class ArtifactoryClient {
3137
3238 private static final Logger log = LoggerFactory . getLogger(ArtifactoryClient . class);
33- private static AsyncHttpClient ningHttpClient;
34- private static final NingRequest ningRequest;
3539
3640 public static Artifactory create (final String url , final String username , final char [] password , final NingRequest ningRequest ) {
37- def matcher = url =~ / (https?:\/\/ [^\/ ]+)\/ +([^\/ ]*).*/
38- if (! matcher) {
39- matcher = url =~ / (https?:\/\/ [^\/ ]+)\/ *()/
40- if (! matcher) {
41- throw new IllegalArgumentException (" Invalid Artifactory URL: ${ url} ." )
42- }
43- }
4441 Realm realm= null ;
4542 if (username!= null && ! " " . equals(username)){
4643 realm = new Realm.RealmBuilder ()
@@ -50,19 +47,31 @@ public class ArtifactoryClient {
5047 .setScheme(AuthScheme . BASIC )
5148 .build();
5249 }
53- ExecutorService executorService = Executors
54- .newCachedThreadPool(new ThreadFactory () {
55- public Thread newThread (Runnable r ) {
56- Thread t = new Thread (r,
57- " AsyncHttpClient-Callback" );
58- t. setDaemon(true );
59- return t;
60- }
61- });
62- ningHttpClient = new AsyncHttpClient (new AsyncHttpClientConfig.Builder ()
50+ // Use bounded
51+ ExecutorService executorService = new ThreadPoolExecutor (20 , 100 , 60L , TimeUnit . SECONDS , new SynchronousQueue<Runnable > (),
52+ new ThreadFactory () {
53+ public Thread newThread (Runnable r ) {
54+ Thread t = new Thread (r,
55+ " AsyncHttpClient-Callback" );
56+ t. setDaemon(true );
57+ return t;
58+ }
59+ });
60+ AsyncHttpClient ningHttpClient = new AsyncHttpClient (new AsyncHttpClientConfig.Builder ()
6361 .setRealm(realm)
6462 .setExecutorService(executorService)
6563 .build());
64+ return create(url, ningHttpClient, ningRequest);
65+ }
66+
67+ public static Artifactory create (final String url , final AsyncHttpClient ningHttpClient , final NingRequest ningRequest ) {
68+ def matcher = url =~ / (https?:\/\/ [^\/ ]+)\/ +([^\/ ]*).*/
69+ if (! matcher) {
70+ matcher = url =~ / (https?:\/\/ [^\/ ]+)\/ *()/
71+ if (! matcher) {
72+ throw new IllegalArgumentException (" Invalid Artifactory URL: ${ url} ." )
73+ }
74+ }
6675 log. debug(" Url: {}, Context: {}, Host: {}" , url, matcher[0 ][2 ], matcher[0 ][1 ]);
6776 return new ArtifactoryNingClientImpl (ningHttpClient, matcher[0 ][2 ], matcher[0 ][1 ], ningRequest);
6877 }
0 commit comments