Example usage for org.apache.commons.httpclient MultiThreadedHttpConnectionManager MultiThreadedHttpConnectionManager

List of usage examples for org.apache.commons.httpclient MultiThreadedHttpConnectionManager MultiThreadedHttpConnectionManager

Introduction

In this page you can find the example usage for org.apache.commons.httpclient MultiThreadedHttpConnectionManager MultiThreadedHttpConnectionManager.

Prototype

public MultiThreadedHttpConnectionManager() 

Source Link

Usage

From source file:org.craftercms.studio.impl.v1.repository.alfresco.AlfrescoContentRepository.java

/**
 * fire POST request to Alfresco with propert security
 *///  w w w  . j  av a  2 s  .  c om
protected String alfrescoPostRequest(String uri, Map<String, String> params, InputStream body,
        String bodyMimeType) throws Exception {
    long startTime = System.currentTimeMillis();
    String serviceURL = buildAlfrescoRequestURL(uri, params);
    PostMethod postMethod = new PostMethod(serviceURL);
    postMethod.setRequestEntity(new InputStreamRequestEntity(body, bodyMimeType));

    HttpClient httpClient = new HttpClient(new MultiThreadedHttpConnectionManager());
    int status = httpClient.executeMethod(postMethod);

    long duration = System.currentTimeMillis() - startTime;
    logger.debug(
            "TRACE: alfrescoPostRequest(String uri, Map<String, String> params, InputStream body, String bodyMimeType; {0}, {1}, {2}, {3}\n\t\tDuration: {4}",
            uri, params, "stream", bodyMimeType, duration);
    return postMethod.getResponseBodyAsString();
}

From source file:org.craftercms.studio.impl.v1.repository.alfresco.AlfrescoContentRepository.java

/**
 * create a multipart post request and fire to Alfresco
 *
 * @param uri/*from w  ww. ja  va  2 s . c  om*/
 *          the target service URI
 * @param params
 *          request parameters
 * @param body
 *          post data
 * @param bodyMimeType
 *          post data mime type
 * @param charSet
 *          post data char set
 * @return response body
 * @throws Exception
 */
protected String alfrescoMultipartPostRequest(String uri, Map<String, String> params, InputStream body,
        String bodyMimeType, String charSet) throws Exception {
    long startTime = System.currentTimeMillis();
    String serviceURL = buildAlfrescoRequestURL(uri, new HashMap<String, String>(0));
    PostMethod postMethod = new PostMethod(serviceURL);
    // create multipart request parts
    int partSize = params.size() + 1;
    Part[] parts = new Part[partSize];
    int index = 0;
    for (String key : params.keySet()) {
        parts[index] = new StringPart(key, params.get(key));
        index++;
    }
    byte[] bytes = IOUtils.toByteArray(body);
    String name = params.get("filename");
    PartSource partSource = new ByteArrayPartSource(name, bytes);
    parts[index] = new FilePart("filedata", partSource, bodyMimeType, charSet);

    postMethod.setRequestEntity(new MultipartRequestEntity(parts, postMethod.getParams()));

    // connect to alfresco and get response
    HttpClient httpClient = new HttpClient(new MultiThreadedHttpConnectionManager());
    logger.debug("Executing multipart post request to " + uri);
    int status = httpClient.executeMethod(postMethod);
    logger.debug("Response status back from the server: " + status);

    long duration = System.currentTimeMillis() - startTime;
    logger.debug(
            "TRACE: alfrescoMultipartPostRequest(String uri, Map<String, String> params, InputStream body, String bodyMimeType, String charSet); {0}, {1}, {2}, {3}, {4}\n\t\tDuration: {5}",
            uri, params, "body", bodyMimeType, charSet, duration);
    return postMethod.getResponseBodyAsString();
}

From source file:org.craftercms.studio.impl.v1.repository.alfresco.AlfrescoContentRepository.java

@Override
public boolean validateTicket(String ticket) {
    long startTime = System.currentTimeMillis();
    //make me do something
    ticket = (ticket != null) ? ticket : getSessionTicket();
    logger.debug("Validating ticket " + ticket);
    Map<String, String> params = new HashMap<>();
    params.put("ticket", ticket);
    String serviceURL = null;//from  ww w .ja  v  a  2s  . c  o m
    try {
        serviceURL = buildAlfrescoRequestURL("/api/login/ticket/{ticket}", params);
        GetMethod getMethod = new GetMethod(serviceURL);
        HttpClient httpClient = new HttpClient(new MultiThreadedHttpConnectionManager());
        int status = httpClient.executeMethod(getMethod);
        if (status == HttpStatus.SC_OK) {
            long duration = System.currentTimeMillis() - startTime;
            logger.debug("validateTicket(String ticket); {0}\n\t\tDuration: {1}", ticket, duration);
            return true;
        }
    } catch (Exception e) {
        logger.error("Error while validating authentication token", e);
    }
    long duration = System.currentTimeMillis() - startTime;
    logger.debug("TRACE: validateTicket(String ticket); {0}\n\t\tDuration: {1}", ticket, duration);
    return false;
}

From source file:org.craftercms.studio.impl.v1.repository.alfresco.AlfrescoContentRepository.java

@Override
public boolean logout() {
    long startTime = System.currentTimeMillis();
    //make me do something
    String ticket = getSessionTicket();
    logger.debug("Invalidating ticket " + ticket);
    Map<String, String> params = new HashMap<>();
    params.put("ticket", ticket);
    String serviceURL = null;//from w w  w.  ja v  a  2s  .c om
    try {
        serviceURL = buildAlfrescoRequestURL("/api/login/ticket/{ticket}", params);
        DeleteMethod getMethod = new DeleteMethod(serviceURL);
        HttpClient httpClient = new HttpClient(new MultiThreadedHttpConnectionManager());
        int status = httpClient.executeMethod(getMethod);
        if (status == HttpStatus.SC_OK) {
            long duration = System.currentTimeMillis() - startTime;
            logger.debug("logout()\n\t\tDuration: {0}", duration);
            return true;
        }
    } catch (Exception e) {
        logger.error("Error while invalidating authentication token", e);
    }
    long duration = System.currentTimeMillis() - startTime;
    logger.debug("TRACE: logout()\n\t\tDuration: {0}", duration);
    return false;
}

From source file:org.cryptomator.frontend.webdav.WebDavServerTest.java

@Test
public void testMultipleGetWithRangeAsync() throws IOException, URISyntaxException, InterruptedException {
    final String testResourceUrl = servletRoot + "/foo.txt";

    // prepare 8MiB test data:
    final byte[] plaintextData = new byte[2097152 * Integer.BYTES];
    final ByteBuffer plaintextDataByteBuffer = ByteBuffer.wrap(plaintextData);
    for (int i = 0; i < 2097152; i++) {
        plaintextDataByteBuffer.putInt(i);
    }//from  w  ww. ja  v a2s  .com
    try (WritableFile w = fs.file("foo.txt").openWritable()) {
        plaintextDataByteBuffer.flip();
        w.write(plaintextDataByteBuffer);
    }

    final MultiThreadedHttpConnectionManager cm = new MultiThreadedHttpConnectionManager();
    cm.getParams().setDefaultMaxConnectionsPerHost(50);
    final HttpClient client = new HttpClient(cm);

    // multiple async range requests:
    final List<ForkJoinTask<?>> tasks = new ArrayList<>();
    final Random generator = new Random(System.currentTimeMillis());

    final AtomicBoolean success = new AtomicBoolean(true);

    // 10 full interrupted requests:
    for (int i = 0; i < 10; i++) {
        final ForkJoinTask<?> task = ForkJoinTask.adapt(() -> {
            try {
                final HttpMethod getMethod = new GetMethod(testResourceUrl);
                final int statusCode = client.executeMethod(getMethod);
                if (statusCode != 200) {
                    LOG.error("Invalid status code for interrupted full request");
                    success.set(false);
                }
                getMethod.getResponseBodyAsStream().read();
                getMethod.getResponseBodyAsStream().close();
                getMethod.releaseConnection();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        });
        tasks.add(task);
    }

    // 50 crappy interrupted range requests:
    for (int i = 0; i < 50; i++) {
        final int lower = generator.nextInt(plaintextData.length);
        final ForkJoinTask<?> task = ForkJoinTask.adapt(() -> {
            try {
                final HttpMethod getMethod = new GetMethod(testResourceUrl);
                getMethod.addRequestHeader("Range", "bytes=" + lower + "-");
                final int statusCode = client.executeMethod(getMethod);
                if (statusCode != 206) {
                    LOG.error("Invalid status code for interrupted range request");
                    success.set(false);
                }
                getMethod.getResponseBodyAsStream().read();
                getMethod.getResponseBodyAsStream().close();
                getMethod.releaseConnection();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        });
        tasks.add(task);
    }

    // 50 normal open range requests:
    for (int i = 0; i < 50; i++) {
        final int lower = generator.nextInt(plaintextData.length - 512);
        final int upper = plaintextData.length - 1;
        final ForkJoinTask<?> task = ForkJoinTask.adapt(() -> {
            try {
                final HttpMethod getMethod = new GetMethod(testResourceUrl);
                getMethod.addRequestHeader("Range", "bytes=" + lower + "-");
                final byte[] expected = Arrays.copyOfRange(plaintextData, lower, upper + 1);
                final int statusCode = client.executeMethod(getMethod);
                final byte[] responseBody = new byte[upper - lower + 10];
                final int bytesRead = IOUtils.read(getMethod.getResponseBodyAsStream(), responseBody);
                getMethod.releaseConnection();
                if (statusCode != 206) {
                    LOG.error("Invalid status code for open range request");
                    success.set(false);
                } else if (upper - lower + 1 != bytesRead) {
                    LOG.error("Invalid response length for open range request");
                    success.set(false);
                } else if (!Arrays.equals(expected, Arrays.copyOfRange(responseBody, 0, bytesRead))) {
                    LOG.error("Invalid response body for open range request");
                    success.set(false);
                }
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        });
        tasks.add(task);
    }

    // 200 normal closed range requests:
    for (int i = 0; i < 200; i++) {
        final int pos1 = generator.nextInt(plaintextData.length - 512);
        final int pos2 = pos1 + 512;
        final ForkJoinTask<?> task = ForkJoinTask.adapt(() -> {
            try {
                final int lower = Math.min(pos1, pos2);
                final int upper = Math.max(pos1, pos2);
                final HttpMethod getMethod = new GetMethod(testResourceUrl);
                getMethod.addRequestHeader("Range", "bytes=" + lower + "-" + upper);
                final byte[] expected = Arrays.copyOfRange(plaintextData, lower, upper + 1);
                final int statusCode = client.executeMethod(getMethod);
                final byte[] responseBody = new byte[upper - lower + 1];
                final int bytesRead = IOUtils.read(getMethod.getResponseBodyAsStream(), responseBody);
                getMethod.releaseConnection();
                if (statusCode != 206) {
                    LOG.error("Invalid status code for closed range request");
                    success.set(false);
                } else if (upper - lower + 1 != bytesRead) {
                    LOG.error("Invalid response length for closed range request");
                    success.set(false);
                } else if (!Arrays.equals(expected, Arrays.copyOfRange(responseBody, 0, bytesRead))) {
                    LOG.error("Invalid response body for closed range request");
                    success.set(false);
                }
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        });
        tasks.add(task);
    }

    Collections.shuffle(tasks, generator);

    final ForkJoinPool pool = new ForkJoinPool(4);
    for (ForkJoinTask<?> task : tasks) {
        pool.execute(task);
    }
    for (ForkJoinTask<?> task : tasks) {
        task.join();
    }
    pool.shutdown();
    cm.shutdown();

    Assert.assertTrue(success.get());
}

From source file:org.eclipse.ecf.internal.provider.filetransfer.httpclient.ConnectionManagerHelper.java

public synchronized void initConnectionManager(HttpClient httpClient, Map options) {
    if (!shouldReuseConnectionsOption()) {
        Trace.trace(Activator.PLUGIN_ID,
                "Connections are not reused. To reuse connections set system property '" //$NON-NLS-1$
                        + ConnectionOptions.PROP_REUSE_CONNECTIONS + "' to true."); //$NON-NLS-1$
        initParameters(httpClient, new MultiThreadedHttpConnectionManager(), false, options);
        return;/*from   ww w .j  a v a  2 s  . com*/
    }
    if (connectionManager == null) {
        connectionManager = new MultiThreadedHttpConnectionManager();
        Trace.trace(Activator.PLUGIN_ID, "Created shared connection manager."); //$NON-NLS-1$ 
    } else {
        Trace.trace(Activator.PLUGIN_ID, "Reusing shared connection manager."); //$NON-NLS-1$ 
    }
    initParameters(httpClient, connectionManager, true, options);
}

From source file:org.eclipse.ecf.provider.filetransfer.httpclient.extended.XHttpClientRetrieveFileTransferFactory.java

public IRetrieveFileTransfer newInstance() {
    return new XHttpClientRetrieveFileTransfer(new HttpClient(new MultiThreadedHttpConnectionManager()));
}

From source file:org.eclipse.ecr.core.storage.sql.RepositoryImpl.java

public RepositoryImpl(RepositoryDescriptor repositoryDescriptor) throws StorageException {
    this.repositoryDescriptor = repositoryDescriptor;
    sessions = new CopyOnWriteArrayList<SessionImpl>();
    cachePropagator = new InvalidationsPropagator();
    eventPropagator = new InvalidationsPropagator();
    repositoryEventQueue = new InvalidationsQueue("repo-" + repositoryDescriptor.name);
    try {//from ww  w .j a  v  a 2s .c o m
        schemaManager = Framework.getService(SchemaManager.class);
    } catch (Exception e) {
        throw new StorageException(e);
    }
    try {
        eventService = Framework.getService(EventService.class);
    } catch (Exception e) {
        throw new StorageException(e);
    }

    connectionManager = new MultiThreadedHttpConnectionManager();
    HttpConnectionManagerParams params = connectionManager.getParams();
    params.setDefaultMaxConnectionsPerHost(20);
    params.setMaxTotalConnections(20);
    httpClient = new HttpClient(connectionManager);
    binaryManager = createBinaryManager();
    backend = createBackend();
    createServer();
}

From source file:org.eclipse.mylyn.commons.net.WebUtil.java

/**
 * @since 3.1/*from   w ww.  jav  a  2  s  .com*/
 */
public synchronized static HttpConnectionManager getConnectionManager() {
    if (connectionManager == null) {
        connectionManager = new MultiThreadedHttpConnectionManager();
        addConnectionManager(connectionManager);
    }
    return connectionManager;
}

From source file:org.eclipse.orion.server.cf.CFActivator.java

/**
 * Returns an HTTPClient instance that is configured to support multiple connections
 * in different threads. Callers must explicitly release any connections made using this
 * client./*from  w ww  .  j a va2 s .  co  m*/
 */
public synchronized HttpClient getHttpClient() {
    //see http://hc.apache.org/httpclient-3.x/threading.html
    MultiThreadedHttpConnectionManager connectionManager = new MultiThreadedHttpConnectionManager();
    HttpConnectionManagerParams connectionManagerParams = connectionManager.getParams();
    connectionManagerParams.setConnectionTimeout(30000);
    connectionManager.setParams(connectionManagerParams);

    HttpClientParams clientParams = new HttpClientParams();
    clientParams.setConnectionManagerTimeout(300000); // 5 minutes

    return new HttpClient(clientParams, connectionManager);
}