Skip to content

Commit d905f1c

Browse files
committed
Allow AsyncHttpClient to be passed in.
1 parent 69e7a6d commit d905f1c

File tree

2 files changed

+67
-20
lines changed

2 files changed

+67
-20
lines changed

ning-services/src/main/groovy/org/jfrog/artifactory/client/ning/ArtifactoryClient.groovy

Lines changed: 29 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,15 @@
66
* limitations under the License. See accompanying LICENSE file. */
77
package org.jfrog.artifactory.client.ning
88

9-
import java.util.concurrent.ExecutorService
9+
import java.util.concurrent.ThreadFactory
10+
1011
import java.util.concurrent.Executors
1112
import 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

1319
import org.jfrog.artifactory.client.Artifactory
1420
import org.slf4j.Logger
@@ -30,17 +36,8 @@ import com.ning.http.client.Realm.AuthScheme
3036
public 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
}

ning-services/src/test/java/org/jfrog/artifactory/client/ning/ArtifactoryClientTest.java

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,18 @@
3131

3232
import com.ning.http.client.Cookie;
3333
import com.ning.http.client.AsyncHttpClient.BoundRequestBuilder;
34+
import com.ning.http.client.AsyncHttpClient;
35+
import com.ning.http.client.AsyncHttpClientConfig;
36+
37+
import java.util.concurrent.Executors;
38+
import java.util.concurrent.ThreadFactory;
39+
import java.util.concurrent.ExecutorService;
40+
import java.util.concurrent.SynchronousQueue;
41+
import java.util.concurrent.ThreadFactory;
42+
import java.util.concurrent.ThreadPoolExecutor;
43+
import java.util.concurrent.TimeUnit;
44+
45+
3446

3547
/**
3648
* @author charlesk
@@ -122,6 +134,32 @@ public void clean() {
122134
artifactory.close();
123135
}
124136

137+
@Test
138+
public void testCreateArtifactoryClient() throws Exception {
139+
//Use bounded
140+
ExecutorService executorService = new ThreadPoolExecutor(20, 100, 60L, TimeUnit.SECONDS, new SynchronousQueue<Runnable>(),
141+
new ThreadFactory() {
142+
public Thread newThread(Runnable r) {
143+
Thread t = new Thread(r,
144+
"AsyncHttpClient-Callback");
145+
t.setDaemon(true);
146+
return t;
147+
}
148+
});
149+
AsyncHttpClient ningHttpClient = new AsyncHttpClient(new AsyncHttpClientConfig.Builder()
150+
.setExecutorService(executorService)
151+
.build());
152+
Artifactory artifactory = org.jfrog.artifactory.client.ning.ArtifactoryClient.create(url, ningHttpClient, testNingRequestImpl);
153+
// meta-data Get
154+
RepositoryHandle repositoryHandle = artifactory.repository(repo);
155+
Assert.assertNotNull(repositoryHandle);
156+
ItemHandle itemHandle = repositoryHandle.file(filePath + "/" + fileName);
157+
Assert.assertNotNull(itemHandle);
158+
Item item = itemHandle.info();
159+
Assert.assertNotNull(item);
160+
}
161+
162+
125163
@Test
126164
public void testGetMetaData() throws Exception {
127165
// meta-data Get

0 commit comments

Comments
 (0)