Changeset 5458 for OAIHarvester


Ignore:
Timestamp:
07/08/14 11:50:40 (10 years ago)
Author:
Oliver Schonefeld
Message:
  • clean up pom.xml
  • update some dependencies
  • update to Apache Http Client 4.3.x
Location:
OAIHarvester/trunk/OAIHarvester
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • OAIHarvester/trunk/OAIHarvester/pom.xml

    r3026 r5458  
    1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    2   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    3   <modelVersion>4.0.0</modelVersion>
     1<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     2        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     3        <modelVersion>4.0.0</modelVersion>
    44
    5   <groupId>eu.clarin.cmdi</groupId>
    6   <artifactId>OAIHarvester</artifactId>
    7   <version>0.2.0-SNAPSHOT</version>
    8   <packaging>jar</packaging>
    9   <name>OAIHarvester</name>
     5        <groupId>eu.clarin.cmdi</groupId>
     6        <artifactId>OAIHarvester</artifactId>
     7        <version>0.3.0-SNAPSHOT</version>
     8        <packaging>jar</packaging>
     9        <name>OAIHarvester</name>
    1010
    11   <repositories>
    12     <repository>
    13       <id>repository.jboss-public</id>
    14       <name>JBoss Repository</name>
    15       <url>https://repository.jboss.org/nexus/content/groups/public/</url>
    16     </repository>
     11    <properties>
     12        <!-- project settings -->
     13        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     14        <!-- plug-in settings -->
     15        <maven.compiler.source>1.6</maven.compiler.source>
     16        <maven.compiler.target>1.6</maven.compiler.target>
     17        <!-- versions of common dependencies -->
     18        <slf4j.version>1.7.7</slf4j.version>
     19    </properties>
    1720
    18     <repository>
    19       <id>repository.java-net</id>
    20       <name>Java.net Repository</name>
    21       <url>http://download.java.net/maven/2/</url>
    22     </repository>
    23   </repositories>
     21    <dependencies>
     22        <dependency>
     23            <groupId>org.slf4j</groupId>
     24            <artifactId>slf4j-api</artifactId>
     25            <version>${slf4j.version}</version>
     26        </dependency>
    2427
    25   <build>
    26     <resources>
    27       <resource>
    28         <directory>src/main/resources</directory>
    29       </resource>
    30     </resources>
     28        <dependency>
     29            <groupId>org.apache.httpcomponents</groupId>
     30            <artifactId>httpclient</artifactId>
     31            <version>4.3.4</version>
     32        </dependency>
    3133
    32     <plugins>
    33       <plugin>
    34         <groupId>org.apache.maven.plugins</groupId>
    35         <artifactId>maven-compiler-plugin</artifactId>
    36         <version>2.3.2</version>
    37         <configuration>
    38           <source>${maven.compiler.source}</source>
    39           <target>${maven.compiler.target}</target>
    40         </configuration>
    41       </plugin>
    42     </plugins>
    43   </build>
     34        <dependency>
     35            <groupId>org.codehaus.woodstox</groupId>
     36            <artifactId>woodstox-core-lgpl</artifactId>
     37            <version>4.4.0</version>
     38        </dependency>
    4439
    45   <dependencies>
    46     <dependency>
    47       <groupId>org.slf4j</groupId>
    48       <artifactId>slf4j-api</artifactId>
    49       <version>${slf4j.version}</version>
    50     </dependency>
     40        <!--
     41        <dependency>
     42            <groupId>net.java.dev.msv</groupId>
     43            <artifactId>msv-core</artifactId>
     44            <version>2010.2</version>
     45            <scope>runtime</scope>
     46        </dependency>
     47        -->
    5148
    52     <dependency>
    53         <groupId>commons-lang</groupId>
    54         <artifactId>commons-lang</artifactId>
    55         <version>2.6</version>
    56         <type>jar</type>
    57         <scope>compile</scope>
    58     </dependency>
     49        <dependency>
     50            <groupId>joda-time</groupId>
     51            <artifactId>joda-time</artifactId>
     52            <version>2.3</version>
     53        </dependency>
    5954
    60     <dependency>
    61         <groupId>org.apache.httpcomponents</groupId>
    62         <artifactId>httpclient</artifactId>
    63         <version>4.2.5</version>
    64     </dependency>
     55        <dependency>
     56            <groupId>org.slf4j</groupId>
     57            <artifactId>slf4j-log4j12</artifactId>
     58            <version>${slf4j.version}</version>
     59            <scope>test</scope>
     60        </dependency>
     61    </dependencies>
    6562
    66     <dependency>
    67         <groupId>org.codehaus.woodstox</groupId>
    68         <artifactId>woodstox-core-lgpl</artifactId>
    69         <version>4.2.0</version>
    70     </dependency>
    71 
    72     <dependency>
    73         <groupId>net.java.dev.msv</groupId>
    74         <artifactId>msv-core</artifactId>
    75         <version>2010.2</version>
    76         <scope>runtime</scope>
    77     </dependency>
    78 
    79     <dependency>
    80         <groupId>joda-time</groupId>
    81         <artifactId>joda-time</artifactId>
    82         <version>2.0</version>
    83     </dependency>
    84 
    85     <dependency>
    86       <groupId>org.slf4j</groupId>
    87       <artifactId>slf4j-log4j12</artifactId>
    88       <version>${slf4j.version}</version>
    89       <scope>test</scope>
    90     </dependency>
    91   </dependencies>
    92 
    93   <properties>
    94     <!-- project settings -->
    95     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    96     <!-- plug-in settings -->
    97     <maven.compiler.source>1.6</maven.compiler.source>
    98     <maven.compiler.target>1.6</maven.compiler.target>
    99     <!-- versions of common dependencies -->
    100     <slf4j.version>1.7.2</slf4j.version>
    101   </properties>
     63        <build>
     64                <plugins>
     65                        <plugin>
     66                                <groupId>org.apache.maven.plugins</groupId>
     67                                <artifactId>maven-compiler-plugin</artifactId>
     68                                <version>2.3.2</version>
     69                                <configuration>
     70                                        <source>${maven.compiler.source}</source>
     71                                        <target>${maven.compiler.target}</target>
     72                                </configuration>
     73                        </plugin>
     74                </plugins>
     75        </build>
    10276
    10377</project>
  • OAIHarvester/trunk/OAIHarvester/src/main/java/eu/clarin/cmdi/oai/harvester/impl/HarvestWorker.java

    r3931 r5458  
    1313import org.apache.http.HttpResponse;
    1414import org.apache.http.HttpStatus;
    15 import org.apache.http.client.HttpClient;
     15import org.apache.http.client.config.CookieSpecs;
     16import org.apache.http.client.config.RequestConfig;
     17import org.apache.http.client.methods.CloseableHttpResponse;
    1618import org.apache.http.client.methods.HttpGet;
    17 import org.apache.http.client.utils.HttpClientUtils;
    18 import org.apache.http.impl.client.DefaultHttpClient;
    19 import org.apache.http.impl.cookie.DateParseException;
    20 import org.apache.http.impl.cookie.DateUtils;
    21 import org.apache.http.params.CoreConnectionPNames;
    22 import org.apache.http.params.CoreProtocolPNames;
    23 import org.apache.http.params.HttpParams;
    24 import org.apache.http.util.EntityUtils;
     19import org.apache.http.client.utils.DateUtils;
     20import org.apache.http.config.SocketConfig;
     21import org.apache.http.impl.NoConnectionReuseStrategy;
     22import org.apache.http.impl.client.CloseableHttpClient;
     23import org.apache.http.impl.client.HttpClients;
     24import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
     25import org.apache.http.protocol.BasicHttpContext;
    2526import org.joda.time.DateTime;
    2627import org.joda.time.DateTimeZone;
     
    4546
    4647public class HarvestWorker {
     48    private static final String USER_AGENT = "OAI-Harvester/1.0.0";
    4749    private static final String OAI_NS = "http://www.openarchives.org/OAI/2.0/";
    4850    private static final String ARG_METADATA_PREFIX = "metadataPrefix";
     
    6870            LoggerFactory.getLogger(HarvestWorker.class);
    6971    private final AbstractHarvester harvester;
    70     private final HttpClient client;
     72    private final CloseableHttpClient client;
    7173    private final RequestUriBuilder uriBuilder;
    7274    private final HeaderImpl header;
     
    7779    HarvestWorker(AbstractHarvester harvester) {
    7880        this.harvester = harvester;
    79         // http client
    80         client = new DefaultHttpClient();
    81         client.getParams().setParameter(CoreProtocolPNames.USER_AGENT,
    82                 "eu.clarin.cmdi.oai.Harvester/0.0.1");
     81
     82        // create HTTP client
     83        // FIXME: get timeout values from somewhere?
     84        final int connectTimeout = 30 * 1000;
     85        final int socketTimeout = 180 * 1000;
     86        client = createHttpClient(connectTimeout, socketTimeout);
     87
    8388        // request stuff
    8489        uriBuilder = new RequestUriBuilder();
     
    490495        }
    491496        request.addHeader(HEADER_CONNECTION, "close");
    492         // FIXME: get timeout values from somewhere?
    493         HttpParams params = request.getParams();
    494         params.setParameter(CoreConnectionPNames.SO_TIMEOUT, 180000);
    495         params.setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 30000);
    496 
    497         final HttpResponse response = client.execute(request);
     497
    498498        /*
    499499         * FIXME: the following code need serious re-factoring
    500500         */
    501         boolean close = false;
     501        CloseableHttpResponse response = null;
     502        boolean close = true;
    502503        try {
     504            response = client.execute(request, new BasicHttpContext());
    503505            job.addToNetworkTime(System.currentTimeMillis() - now);
     506
    504507            final int status = response.getStatusLine().getStatusCode();
    505508            if (status == HttpStatus.SC_OK) {
    506509                delay = 0;
     510                close = false;
    507511                return new Response(job, response, harvester);
    508512            } else {
     
    511515                    logger.debug("got service unavailable status, retrying " +
    512516                            "after {} seconds", delay);
    513                     close = true;
    514517                    return null;
    515518                } else {
     
    520523            }
    521524        } catch (IOException e) {
    522             close = true;
    523525            throw e;
    524526        } catch (XMLStreamException e) {
    525             close = true;
    526527            throw e;
    527528        } catch (HarvesterException e) {
    528             close = true;
    529529            throw e;
    530530        } finally {
    531             if (close) {
    532                 /*
    533                  * try hard to release HTTP client resources ...
    534                  */
    535                 try {
    536                     EntityUtils.consume(response.getEntity());
    537                 } catch (IOException ex) {
    538                     /* IGNORE */
    539                 }
    540 
    541                 /* make sure to release allocated resources */
    542                 HttpClientUtils.closeQuietly(response);
    543 
    544                 if (request != null) {
    545                     request.abort();
    546                 }
     531            if (close && (response != null)) {
     532                /* make sure. response is closed ... */
     533                response.close();
    547534            }
    548535        }
     
    561548                delay = Integer.parseInt(v) * 1000;
    562549            } catch (NumberFormatException e) {
    563                 try {
    564550                    Date date = DateUtils.parseDate(v);
    565                     delay = date.getTime() - System.currentTimeMillis();
    566                 } catch (DateParseException f) {
    567                     /* IGNORE */
    568                 }
     551                    if (date != null) {
     552                        delay = date.getTime() - System.currentTimeMillis();
     553                    }
    569554            }
    570555        }
     
    615600    }
    616601
     602
     603    private static CloseableHttpClient createHttpClient(int connectTimeout,
     604            int socketTimeout) {
     605        final PoolingHttpClientConnectionManager manager =
     606                new PoolingHttpClientConnectionManager();
     607        manager.setDefaultMaxPerRoute(8);
     608        manager.setMaxTotal(128);
     609
     610        final SocketConfig socketConfig = SocketConfig.custom()
     611                .setSoReuseAddress(true)
     612                .setSoLinger(0)
     613                .build();
     614
     615        final RequestConfig requestConfig = RequestConfig.custom()
     616                .setAuthenticationEnabled(false)
     617                .setRedirectsEnabled(true)
     618                .setMaxRedirects(4)
     619                .setCircularRedirectsAllowed(false)
     620                .setCookieSpec(CookieSpecs.IGNORE_COOKIES)
     621                .setConnectTimeout(connectTimeout)
     622                .setSocketTimeout(socketTimeout)
     623                .setConnectionRequestTimeout(0) /* infinite */
     624                .setStaleConnectionCheckEnabled(false)
     625                .build();
     626
     627        return HttpClients.custom()
     628                .setUserAgent(USER_AGENT)
     629                .setConnectionManager(manager)
     630                .setDefaultSocketConfig(socketConfig)
     631                .setDefaultRequestConfig(requestConfig)
     632                .setConnectionReuseStrategy(new NoConnectionReuseStrategy())
     633                .build();
     634    }
     635
    617636} // class HarvestWorker
  • OAIHarvester/trunk/OAIHarvester/src/main/java/eu/clarin/cmdi/oai/harvester/impl/Response.java

    r5367 r5458  
    1919
    2020import org.apache.http.HttpEntity;
    21 import org.apache.http.HttpResponse;
    22 import org.apache.http.client.utils.HttpClientUtils;
    23 import org.apache.http.util.EntityUtils;
     21import org.apache.http.client.methods.CloseableHttpResponse;
    2422import org.codehaus.stax2.XMLStreamReader2;
    2523import org.slf4j.Logger;
     
    8482    private static final Logger logger =
    8583            LoggerFactory.getLogger(Response.class);
    86     private final HttpResponse response;
     84    private final CloseableHttpResponse response;
    8785    private final long now = System.currentTimeMillis();
    8886    private final CountingInputStream stream;
     
    9088
    9189
    92     Response(HarvestJobImpl job, HttpResponse response, AbstractHarvester harvester)
     90    Response(HarvestJobImpl job, CloseableHttpResponse response, AbstractHarvester harvester)
    9391            throws IOException, XMLStreamException, HarvesterException {
    9492        if (job == null) {
     
    165163        }
    166164
    167         /*
    168          * try hard to release HTTP client resources ...
    169          */
     165        /* make sure to release allocated resources */
    170166        try {
    171             EntityUtils.consume(response.getEntity());
    172         } catch (IOException ex) {
     167            response.close();
     168        } catch (IOException e) {
    173169            /* IGNORE */
    174170        }
    175 
    176         /* make sure to release allocated resources */
    177         HttpClientUtils.closeQuietly(response);
    178171    }
    179172
     
    382375        while (reader.isCharacters()) {
    383376            String s = reader.getText();
    384             if (s != null) {
     377            if ((s != null) && !s.isEmpty()) {
    385378                sb.append(s);
    386379            }
Note: See TracChangeset for help on using the changeset viewer.