killbill-uncached
Changes
pom.xml 2(+1 -1)
Details
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/TestResource.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/TestResource.java
index 26c9138..8a50e83 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/TestResource.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/TestResource.java
@@ -16,9 +16,11 @@
package com.ning.billing.jaxrs.resources;
-import java.util.UUID;
+import java.util.List;
+import javax.annotation.Nullable;
import javax.inject.Inject;
+import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
@@ -34,17 +36,24 @@ import org.joda.time.LocalDate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import com.ning.billing.ObjectType;
import com.ning.billing.account.api.AccountUserApi;
import com.ning.billing.clock.Clock;
import com.ning.billing.clock.ClockMock;
import com.ning.billing.jaxrs.util.Context;
import com.ning.billing.jaxrs.util.JaxrsUriBuilder;
+import com.ning.billing.notificationq.api.NotificationQueue;
+import com.ning.billing.notificationq.api.NotificationQueueService;
import com.ning.billing.util.api.AuditUserApi;
import com.ning.billing.util.api.CustomFieldUserApi;
+import com.ning.billing.util.api.RecordIdApi;
import com.ning.billing.util.api.TagUserApi;
+import com.ning.billing.util.callcontext.TenantContext;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
+import com.google.common.base.Predicate;
+import com.google.common.collect.Iterables;
import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
@@ -62,9 +71,17 @@ public class TestResource extends JaxRsResourceBase {
private static final Logger log = LoggerFactory.getLogger(TestResource.class);
+ private final NotificationQueueService notificationQueueService;
+ private final RecordIdApi recordIdApi;
+
@Inject
- public TestResource(final JaxrsUriBuilder uriBuilder, final TagUserApi tagUserApi, final CustomFieldUserApi customFieldUserApi, final AuditUserApi auditUserApi, final AccountUserApi accountUserApi, final Clock clock, final Context context) {
+ public TestResource(final JaxrsUriBuilder uriBuilder, final TagUserApi tagUserApi, final CustomFieldUserApi customFieldUserApi,
+ final AuditUserApi auditUserApi, final AccountUserApi accountUserApi, final RecordIdApi recordIdApi,
+ final NotificationQueueService notificationQueueService,
+ final Clock clock, final Context context) {
super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, clock, context);
+ this.notificationQueueService = notificationQueueService;
+ this.recordIdApi = recordIdApi;
}
@@ -111,7 +128,8 @@ public class TestResource extends JaxRsResourceBase {
@Path("/clock")
@Produces(APPLICATION_JSON)
public Response setTestClockTime(@QueryParam(QUERY_REQUESTED_DT) final String requestedClockDate,
- @QueryParam("timeZone") final String timeZoneStr) {
+ @QueryParam("timeZone") final String timeZoneStr,
+ @javax.ws.rs.core.Context final HttpServletRequest request) {
final ClockMock testClock = getClockMock();
if (requestedClockDate == null) {
@@ -121,6 +139,9 @@ public class TestResource extends JaxRsResourceBase {
final DateTime newTime = DATE_TIME_FORMATTER.parseDateTime(requestedClockDate);
testClock.setTime(newTime);
}
+
+ waitForNotificationToComplete(request);
+
return getCurrentTime(timeZoneStr);
}
@@ -132,7 +153,8 @@ public class TestResource extends JaxRsResourceBase {
@QueryParam("weeks") final Integer addWeeks,
@QueryParam("months") final Integer addMonths,
@QueryParam("years") final Integer addYears,
- @QueryParam("timeZone") final String timeZoneStr) {
+ @QueryParam("timeZone") final String timeZoneStr,
+ @javax.ws.rs.core.Context final HttpServletRequest request) {
final ClockMock testClock = getClockMock();
if (addDays != null) {
@@ -144,10 +166,42 @@ public class TestResource extends JaxRsResourceBase {
} else if (addYears != null) {
testClock.addYears(addYears);
}
+
+ waitForNotificationToComplete(request);
+
return getCurrentTime(timeZoneStr);
}
+ private void waitForNotificationToComplete(final HttpServletRequest request) {
+
+ final TenantContext tenantContext = context.createContext(request);
+ final Long tenantRecordId = recordIdApi.getRecordId(tenantContext.getTenantId(), ObjectType.TENANT, tenantContext);
+ final List<NotificationQueue> queues = notificationQueueService.getNotificationQueues();
+ try {
+
+ boolean waitForQueuesToEmpty = true;
+ do {
+ waitForQueuesToEmpty = areAllNotificationsProcessed(queues, tenantRecordId);
+ if (waitForQueuesToEmpty) {
+ Thread.sleep(1000);
+ }
+ } while (!waitForQueuesToEmpty);
+ } catch (InterruptedException ignore) {
+ }
+ }
+
+ private boolean areAllNotificationsProcessed(final List<NotificationQueue> queues, final Long tenantRecordId) {
+
+ final Iterable<NotificationQueue> filtered = Iterables.filter(queues, new Predicate<NotificationQueue>() {
+ @Override
+ public boolean apply(@Nullable final NotificationQueue input) {
+ return input.getReadyNotificationEntriesForSearchKey2(tenantRecordId) > 0;
+ }
+ });
+ return !filtered.iterator().hasNext();
+ }
+
private ClockMock getClockMock() {
if (!(clock instanceof ClockMock)) {
throw new UnsupportedOperationException("Kill Bill has not been configured to update the time");
pom.xml 2(+1 -1)
diff --git a/pom.xml b/pom.xml
index bb996c6..d395c8a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -19,7 +19,7 @@
<parent>
<artifactId>killbill-oss-parent</artifactId>
<groupId>com.ning.billing</groupId>
- <version>0.4.8</version>
+ <version>0.4.9</version>
</parent>
<artifactId>killbill</artifactId>
<version>0.6.8-SNAPSHOT</version>