diff --git a/src/main/java/com/notnoop/mpns/MpnsDelegate.java b/src/main/java/com/notnoop/mpns/MpnsDelegate.java index dcb20db..469bccf 100644 --- a/src/main/java/com/notnoop/mpns/MpnsDelegate.java +++ b/src/main/java/com/notnoop/mpns/MpnsDelegate.java @@ -33,4 +33,5 @@ public interface MpnsDelegate { public void messageSent(MpnsNotification message, MpnsResponse response); public void messageFailed(MpnsNotification message, MpnsResponse response); + public void error(MpnsNotification message, Throwable e); } diff --git a/src/main/java/com/notnoop/mpns/internal/MpnsPooledService.java b/src/main/java/com/notnoop/mpns/internal/MpnsPooledService.java index 4effa3e..5a94299 100644 --- a/src/main/java/com/notnoop/mpns/internal/MpnsPooledService.java +++ b/src/main/java/com/notnoop/mpns/internal/MpnsPooledService.java @@ -30,6 +30,7 @@ */ package com.notnoop.mpns.internal; +import java.io.IOException; import java.util.concurrent.ExecutorService; import org.apache.http.HttpResponse; @@ -56,12 +57,24 @@ public MpnsPooledService(HttpClient httpClient, ExecutorService executor, MpnsDe protected void push(final HttpPost request, final MpnsNotification message) { executor.execute(new Runnable() { public void run() { + HttpResponse response = null; try { - HttpResponse response = httpClient.execute(request); + response = httpClient.execute(request); Utilities.fireDelegate(message, response, delegate); - EntityUtils.consume(response.getEntity()); } catch (Exception e) { - throw new RuntimeException(e); + delegate.error(message, e); + } finally { + //Release the connection + try + { + if(response != null) { + EntityUtils.consume(response.getEntity()); + } + } + catch (IOException e) + { + e.printStackTrace(); + } } } });