diff --git a/build.gradle b/build.gradle index d6289d43..9919a416 100644 --- a/build.gradle +++ b/build.gradle @@ -18,6 +18,9 @@ apply plugin: 'maven-publish' apply plugin: 'war' +sourceCompatibility = 1.6 +targetCompatibility = 1.6 + dependencies { compile project(':snowplow-java-tracker-core') runtime project(':snowplow-java-tracker-core') @@ -26,7 +29,7 @@ dependencies { allprojects { apply plugin: 'java' group = 'com.snowplowanalytics' - version = '0.5.1' + version = '0.5.2-SNAPSHOT' repositories { // Use 'maven central' for resolving our dependencies mavenCentral() diff --git a/snowplow-java-tracker-core/build.gradle b/snowplow-java-tracker-core/build.gradle index 34b534c4..79ecf339 100644 --- a/snowplow-java-tracker-core/build.gradle +++ b/snowplow-java-tracker-core/build.gradle @@ -16,8 +16,11 @@ apply plugin: 'java' // As per http://www.gradle.org/docs/current/userguide/publishing_maven.html apply plugin: 'maven-publish' +sourceCompatibility = 1.6 +targetCompatibility = 1.6 + group = 'com.snowplowanalytics' -version = '0.1.3' +version = '0.1.4-SNAPSHOT' // Where to find the dependencies of our project repositories { diff --git a/snowplow-java-tracker-core/src/main/java/com/snowplowanalytics/snowplow/tracker/core/Tracker.java b/snowplow-java-tracker-core/src/main/java/com/snowplowanalytics/snowplow/tracker/core/Tracker.java index d7bf38a9..d9636927 100644 --- a/snowplow-java-tracker-core/src/main/java/com/snowplowanalytics/snowplow/tracker/core/Tracker.java +++ b/snowplow-java-tracker-core/src/main/java/com/snowplowanalytics/snowplow/tracker/core/Tracker.java @@ -93,14 +93,14 @@ public Tracker(Emitter emitter, Subject subject, String namespace, String appId, * @return A completed Payload */ protected Payload completePayload(Payload payload, List context, - double timestamp) { + long timestamp) { payload.add(Parameter.APPID, this.appId); payload.add(Parameter.NAMESPACE, this.namespace); payload.add(Parameter.TRACKER_VERSION, this.trackerVersion); // If timestamp is set to 0, generate one payload.add(Parameter.TIMESTAMP, - (timestamp == 0 ? Util.getTimestamp() : Double.toString(timestamp))); + (timestamp == 0 ? Util.getTimestamp() : Long.toString(timestamp))); // Encodes context data if (context != null) { @@ -176,7 +176,7 @@ public void trackPageView(String pageUrl, String pageTitle, String referrer, * @param timestamp Optional user-provided timestamp for the event */ public void trackPageView(String pageUrl, String pageTitle, String referrer, - double timestamp) { + long timestamp) { trackPageView(pageUrl, pageTitle, referrer, null, timestamp); } @@ -188,7 +188,7 @@ public void trackPageView(String pageUrl, String pageTitle, String referrer, * @param timestamp Optional user-provided timestamp for the event */ public void trackPageView(String pageUrl, String pageTitle, String referrer, - List context, double timestamp) { + List context, long timestamp) { // Precondition checks Preconditions.checkNotNull(pageUrl); Preconditions.checkArgument(!pageUrl.isEmpty(), "pageUrl cannot be empty"); diff --git a/snowplow-java-tracker-core/src/main/java/com/snowplowanalytics/snowplow/tracker/core/Version.java b/snowplow-java-tracker-core/src/main/java/com/snowplowanalytics/snowplow/tracker/core/Version.java index 6040b656..18d1444b 100644 --- a/snowplow-java-tracker-core/src/main/java/com/snowplowanalytics/snowplow/tracker/core/Version.java +++ b/snowplow-java-tracker-core/src/main/java/com/snowplowanalytics/snowplow/tracker/core/Version.java @@ -14,6 +14,6 @@ package com.snowplowanalytics.snowplow.tracker.core; public class Version { - static final String TRACKER = "java-core-0.1.3"; - static final String VERSION = "0.1.3"; + static final String TRACKER = "java-core-0.1.4-SNAPSHOT"; + static final String VERSION = "0.1.4-SNAPSHOT"; } diff --git a/snowplow-java-tracker-core/src/main/java/com/snowplowanalytics/snowplow/tracker/core/emitter/Emitter.java b/snowplow-java-tracker-core/src/main/java/com/snowplowanalytics/snowplow/tracker/core/emitter/Emitter.java index 2d43cbd7..0a3705d0 100644 --- a/snowplow-java-tracker-core/src/main/java/com/snowplowanalytics/snowplow/tracker/core/emitter/Emitter.java +++ b/snowplow-java-tracker-core/src/main/java/com/snowplowanalytics/snowplow/tracker/core/emitter/Emitter.java @@ -26,6 +26,7 @@ import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.nio.client.CloseableHttpAsyncClient; import org.apache.http.impl.nio.client.HttpAsyncClients; +import org.apache.http.client.config.RequestConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -54,6 +55,13 @@ public class Emitter { protected RequestCallback requestCallback; protected HttpMethod httpMethod = HttpMethod.GET; + protected RequestConfig requestConfig = RequestConfig.custom() + .setConnectTimeout(1000) + .setSocketTimeout(1000) + .setConnectionRequestTimeout(1000) + .setStaleConnectionCheckEnabled(true) + .build(); + /** * Default constructor does nothing. */ @@ -107,7 +115,8 @@ public Emitter(String URI, HttpMethod httpMethod, RequestCallback callback) { } this.requestCallback = callback; this.httpMethod = httpMethod; - this.httpClient = HttpClients.createDefault(); + + this.httpClient = HttpClients.custom().setDefaultRequestConfig(requestConfig).build(); if (httpMethod == HttpMethod.GET) { this.setBufferOption(BufferOption.Instant); @@ -130,7 +139,7 @@ public void setBufferOption(BufferOption option) { */ public void setRequestMethod(RequestMethod option) { this.requestMethod = option; - this.httpAsyncClient = HttpAsyncClients.createDefault(); + this.httpAsyncClient = HttpAsyncClients.custom().setDefaultRequestConfig(requestConfig).build(); this.httpAsyncClient.start(); } @@ -160,11 +169,13 @@ public void flushBuffer() { LinkedList unsentPayloads = new LinkedList(); for (Payload payload : buffer) { - int status_code = sendGetData(payload).getStatusLine().getStatusCode(); - if (status_code == 200) - success_count++; - else + + HttpResponse response = sendGetData(payload); + if (response != null) { + if (response.getStatusLine().getStatusCode() == 200) success_count++; + } else { unsentPayloads.add(payload); + } } if (unsentPayloads.size() == 0) { @@ -186,8 +197,8 @@ else if (requestCallback != null) } postPayload.setData(eventMaps); - int status_code = sendPostData(postPayload).getStatusLine().getStatusCode(); - if (status_code == 200 && requestCallback != null) + HttpResponse response = sendPostData(postPayload); + if (response != null && response.getStatusLine().getStatusCode() == 200 && requestCallback != null) requestCallback.onSuccess(buffer.size()); else if (requestCallback != null){ unsentPayload.add(postPayload); @@ -213,7 +224,12 @@ protected HttpResponse sendPostData(Payload payload) { } else { httpResponse = httpClient.execute(httpPost); } - logger.debug(httpResponse.getStatusLine().toString()); + + if (httpResponse != null) { + logger.debug(httpResponse.getStatusLine().toString()); + } else { + logger.debug("HTTPResponse was null"); + } } catch (UnsupportedEncodingException e) { logger.error("Encoding exception with the payload."); e.printStackTrace(); @@ -225,15 +241,23 @@ protected HttpResponse sendPostData(Payload payload) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); + } finally { + try { + if (httpResponse != null) httpResponse.getEntity().getContent().close(); + httpPost.releaseConnection(); + } catch (IOException e) { + logger.error("Error when closing resource."); + } } + return httpResponse; } - @SuppressWarnings("unchecked") protected HttpResponse sendGetData(Payload payload) { HashMap hashMap = (HashMap) payload.getMap(); Iterator iterator = hashMap.keySet().iterator(); HttpResponse httpResponse = null; + HttpGet httpGet = null; while (iterator.hasNext()) { String key = iterator.next(); @@ -242,14 +266,21 @@ protected HttpResponse sendGetData(Payload payload) { } try { - HttpGet httpGet = new HttpGet(uri.build()); + httpGet = new HttpGet(uri.build()); if (requestMethod == RequestMethod.Asynchronous) { Future future = httpAsyncClient.execute(httpGet, null); httpResponse = future.get(); } else { httpResponse = httpClient.execute(httpGet); } - logger.debug(httpResponse.getStatusLine().toString()); + + if (httpResponse != null) { + logger.debug(httpResponse.getStatusLine().toString()); + } else { + logger.debug("HTTPResponse was null"); + } + } catch (org.apache.http.conn.HttpHostConnectException e) { + logger.error("Error when sending HTTP GET error."); } catch (IOException e) { logger.error("Error when sending HTTP GET error."); e.printStackTrace(); @@ -260,8 +291,17 @@ protected HttpResponse sendGetData(Payload payload) { logger.error("Interruption error when sending HTTP GET request."); e.printStackTrace(); } catch (ExecutionException e) { - e.printStackTrace(); + logger.error("Error when sending HTTP GET error."); + } finally { + try { + if (httpResponse != null) httpResponse.getEntity().getContent().close(); + if (httpGet != null) httpGet.releaseConnection(); + } catch (IOException e) { + logger.error("Error when closing resource."); + } } + + return httpResponse; } } diff --git a/src/main/java/com/snowplowanalytics/snowplow/tracker/Version.java b/src/main/java/com/snowplowanalytics/snowplow/tracker/Version.java index 4078abd1..da2ab50c 100644 --- a/src/main/java/com/snowplowanalytics/snowplow/tracker/Version.java +++ b/src/main/java/com/snowplowanalytics/snowplow/tracker/Version.java @@ -14,6 +14,6 @@ package com.snowplowanalytics.snowplow.tracker; public class Version { - static final String TRACKER = "java-0.5.1"; - static final String VERSION = "0.5.1"; + static final String TRACKER = "java-0.5.2-SNAPSHOT"; + static final String VERSION = "0.5.2-SNAPSHOT"; }