killbill-aplcache
Changes
invoice/src/main/java/org/killbill/billing/invoice/api/migration/DefaultInvoiceMigrationApi.java 3(+1 -2)
jaxrs/pom.xml 8(+8 -0)
overdue/src/main/java/org/killbill/billing/overdue/notification/DefaultOverduePosterBase.java 2(+1 -1)
overdue/src/test/java/org/killbill/billing/overdue/notification/TestDefaultOverdueCheckPoster.java 2(+1 -1)
Details
diff --git a/beatrix/src/main/java/org/killbill/billing/beatrix/extbus/BeatrixListener.java b/beatrix/src/main/java/org/killbill/billing/beatrix/extbus/BeatrixListener.java
index 01c8e9a..3840cd5 100644
--- a/beatrix/src/main/java/org/killbill/billing/beatrix/extbus/BeatrixListener.java
+++ b/beatrix/src/main/java/org/killbill/billing/beatrix/extbus/BeatrixListener.java
@@ -61,6 +61,7 @@ import org.slf4j.LoggerFactory;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.joda.JodaModule;
+import com.google.common.eventbus.AllowConcurrentEvents;
import com.google.common.eventbus.Subscribe;
public class BeatrixListener {
@@ -91,6 +92,7 @@ public class BeatrixListener {
objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
}
+ @AllowConcurrentEvents
@Subscribe
public void handleAllInternalKillbillEvents(final BusInternalEvent event) {
final InternalCallContext internalContext = internalCallContextFactory.createInternalCallContext(event.getSearchKey2(), event.getSearchKey1(), "BeatrixListener", CallOrigin.INTERNAL, UserType.SYSTEM, event.getUserToken());
diff --git a/invoice/src/main/java/org/killbill/billing/invoice/api/migration/DefaultInvoiceMigrationApi.java b/invoice/src/main/java/org/killbill/billing/invoice/api/migration/DefaultInvoiceMigrationApi.java
index d922807..57ef684 100644
--- a/invoice/src/main/java/org/killbill/billing/invoice/api/migration/DefaultInvoiceMigrationApi.java
+++ b/invoice/src/main/java/org/killbill/billing/invoice/api/migration/DefaultInvoiceMigrationApi.java
@@ -34,7 +34,6 @@ import org.killbill.billing.invoice.api.InvoiceMigrationApi;
import org.killbill.billing.invoice.dao.DefaultInvoiceDao;
import org.killbill.billing.invoice.dao.InvoiceItemModelDao;
import org.killbill.billing.invoice.dao.InvoiceModelDao;
-import org.killbill.billing.invoice.dao.InvoicePaymentModelDao;
import org.killbill.billing.util.callcontext.CallContext;
import org.killbill.billing.util.callcontext.InternalCallContextFactory;
import org.killbill.billing.account.api.AccountInternalApi;
@@ -77,7 +76,7 @@ public class DefaultInvoiceMigrationApi implements InvoiceMigrationApi {
null, MigrationPlan.MIGRATION_PLAN_NAME, MigrationPlan.MIGRATION_PLAN_PHASE_NAME, null,
targetDate, null, balance, null, currency, null);
dao.createInvoice(migrationInvoice, ImmutableList.<InvoiceItemModelDao>of(migrationInvoiceItem),
- ImmutableList.<InvoicePaymentModelDao>of(), true, ImmutableMap.<UUID, List<DateTime>>of(), internalCallContextFactory.createInternalCallContext(accountId, context));
+ true, ImmutableMap.<UUID, List<DateTime>>of(), internalCallContextFactory.createInternalCallContext(accountId, context));
return migrationInvoice.getId();
}
diff --git a/invoice/src/main/java/org/killbill/billing/invoice/dao/DefaultInvoiceDao.java b/invoice/src/main/java/org/killbill/billing/invoice/dao/DefaultInvoiceDao.java
index f5cbcfb..1f574e0 100644
--- a/invoice/src/main/java/org/killbill/billing/invoice/dao/DefaultInvoiceDao.java
+++ b/invoice/src/main/java/org/killbill/billing/invoice/dao/DefaultInvoiceDao.java
@@ -207,7 +207,7 @@ public class DefaultInvoiceDao extends EntityDaoBase<InvoiceModelDao, Invoice, I
@Override
public void createInvoice(final InvoiceModelDao invoice, final List<InvoiceItemModelDao> invoiceItems,
- final List<InvoicePaymentModelDao> invoicePayments, final boolean isRealInvoice, final Map<UUID, List<DateTime>> callbackDateTimePerSubscriptions,
+ final boolean isRealInvoice, final Map<UUID, List<DateTime>> callbackDateTimePerSubscriptions,
final InternalCallContext context) {
transactionalSqlDao.execute(new EntitySqlDaoTransactionWrapper<Void>() {
@Override
@@ -231,11 +231,6 @@ public class DefaultInvoiceDao extends EntityDaoBase<InvoiceModelDao, Invoice, I
cbaDao.doCBAComplexity(invoice.getAccountId(), entitySqlDaoWrapperFactory, context);
notifyOfFutureBillingEvents(entitySqlDaoWrapperFactory, invoice.getAccountId(), callbackDateTimePerSubscriptions, context.getUserToken());
-
- // Create associated payments
- final InvoicePaymentSqlDao invoicePaymentSqlDao = entitySqlDaoWrapperFactory.become(InvoicePaymentSqlDao.class);
- invoicePaymentSqlDao.batchCreateFromTransaction(invoicePayments, context);
-
}
return null;
}
diff --git a/invoice/src/main/java/org/killbill/billing/invoice/dao/InvoiceDao.java b/invoice/src/main/java/org/killbill/billing/invoice/dao/InvoiceDao.java
index a5031cb..69cdf91 100644
--- a/invoice/src/main/java/org/killbill/billing/invoice/dao/InvoiceDao.java
+++ b/invoice/src/main/java/org/killbill/billing/invoice/dao/InvoiceDao.java
@@ -35,8 +35,9 @@ import org.killbill.billing.util.entity.dao.EntityDao;
public interface InvoiceDao extends EntityDao<InvoiceModelDao, Invoice, InvoiceApiException> {
- void createInvoice(InvoiceModelDao invoice, List<InvoiceItemModelDao> invoiceItems,
- List<InvoicePaymentModelDao> invoicePayments, boolean isRealInvoice, final Map<UUID, List<DateTime>> callbackDateTimePerSubscriptions, InternalCallContext context);
+ void createInvoice(final InvoiceModelDao invoice, final List<InvoiceItemModelDao> invoiceItems,
+ final boolean isRealInvoice, final Map<UUID, List<DateTime>> callbackDateTimePerSubscriptions,
+ final InternalCallContext context);
InvoiceModelDao getByNumber(Integer number, InternalTenantContext context) throws InvoiceApiException;
diff --git a/invoice/src/main/java/org/killbill/billing/invoice/dao/InvoicePaymentSqlDao.java b/invoice/src/main/java/org/killbill/billing/invoice/dao/InvoicePaymentSqlDao.java
index 3fa40da..0d93c9f 100644
--- a/invoice/src/main/java/org/killbill/billing/invoice/dao/InvoicePaymentSqlDao.java
+++ b/invoice/src/main/java/org/killbill/billing/invoice/dao/InvoicePaymentSqlDao.java
@@ -43,10 +43,6 @@ public interface InvoicePaymentSqlDao extends EntitySqlDao<InvoicePaymentModelDa
public List<InvoicePaymentModelDao> getByPaymentId(@Bind("paymentId") final String paymentId,
@BindBean final InternalTenantContext context);
- @SqlBatch(transactional = false)
- @Audited(ChangeType.INSERT)
- void batchCreateFromTransaction(@BindBean final List<InvoicePaymentModelDao> items,
- @BindBean final InternalCallContext context);
@SqlQuery
public List<InvoicePaymentModelDao> getPaymentsForInvoice(@Bind("invoiceId") final String invoiceId,
diff --git a/invoice/src/main/java/org/killbill/billing/invoice/InvoiceDispatcher.java b/invoice/src/main/java/org/killbill/billing/invoice/InvoiceDispatcher.java
index d91552c..03449af 100644
--- a/invoice/src/main/java/org/killbill/billing/invoice/InvoiceDispatcher.java
+++ b/invoice/src/main/java/org/killbill/billing/invoice/InvoiceDispatcher.java
@@ -257,17 +257,9 @@ public class InvoiceDispatcher {
return new InvoiceItemModelDao(input);
}
}));
- // Not really needed, there shouldn't be any payment at this stage
- final List<InvoicePaymentModelDao> invoicePaymentModelDaos = ImmutableList.<InvoicePaymentModelDao>copyOf(Collections2.transform(invoice.getPayments(),
- new Function<InvoicePayment, InvoicePaymentModelDao>() {
- @Override
- public InvoicePaymentModelDao apply(final InvoicePayment input) {
- return new InvoicePaymentModelDao(input);
- }
- }));
final Map<UUID, List<DateTime>> callbackDateTimePerSubscriptions = createNextFutureNotificationDate(invoiceItemModelDaos, billingEvents.getUsages(), dateAndTimeZoneContext);
- invoiceDao.createInvoice(invoiceModelDao, invoiceItemModelDaos, invoicePaymentModelDaos, isRealInvoiceWithItems, callbackDateTimePerSubscriptions, context);
+ invoiceDao.createInvoice(invoiceModelDao, invoiceItemModelDaos, isRealInvoiceWithItems, callbackDateTimePerSubscriptions, context);
final List<InvoiceItem> fixedPriceInvoiceItems = invoice.getInvoiceItems(FixedPriceInvoiceItem.class);
final List<InvoiceItem> recurringInvoiceItems = invoice.getInvoiceItems(RecurringInvoiceItem.class);
diff --git a/invoice/src/test/java/org/killbill/billing/invoice/dao/MockInvoiceDao.java b/invoice/src/test/java/org/killbill/billing/invoice/dao/MockInvoiceDao.java
index 9204de5..98e1e20 100644
--- a/invoice/src/test/java/org/killbill/billing/invoice/dao/MockInvoiceDao.java
+++ b/invoice/src/test/java/org/killbill/billing/invoice/dao/MockInvoiceDao.java
@@ -33,17 +33,14 @@ import org.killbill.billing.callcontext.InternalTenantContext;
import org.killbill.billing.catalog.api.Currency;
import org.killbill.billing.invoice.api.Invoice;
import org.killbill.billing.invoice.api.InvoiceApiException;
-import org.killbill.billing.invoice.api.InvoicePaymentType;
import org.killbill.billing.invoice.api.user.DefaultInvoiceCreationEvent;
import org.killbill.billing.util.entity.DefaultPagination;
import org.killbill.billing.util.entity.Pagination;
import org.killbill.billing.util.entity.dao.MockEntityDaoBase;
import org.killbill.bus.api.PersistentBus;
-import com.google.common.base.Predicate;
import com.google.common.collect.BiMap;
import com.google.common.collect.HashBiMap;
-import com.google.common.collect.Iterables;
import com.google.inject.Inject;
public class MockInvoiceDao extends MockEntityDaoBase<InvoiceModelDao, Invoice, InvoiceApiException> implements InvoiceDao {
@@ -62,15 +59,12 @@ public class MockInvoiceDao extends MockEntityDaoBase<InvoiceModelDao, Invoice,
@Override
public void createInvoice(final InvoiceModelDao invoice, final List<InvoiceItemModelDao> invoiceItems,
- final List<InvoicePaymentModelDao> invoicePayments, final boolean isRealInvoice, final Map<UUID, List<DateTime>> callbackDateTimePerSubscriptions, final InternalCallContext context) {
+ final boolean isRealInvoice, final Map<UUID, List<DateTime>> callbackDateTimePerSubscriptions, final InternalCallContext context) {
synchronized (monitor) {
invoices.put(invoice.getId(), invoice);
for (final InvoiceItemModelDao invoiceItemModelDao : invoiceItems) {
items.put(invoiceItemModelDao.getId(), invoiceItemModelDao);
}
- for (final InvoicePaymentModelDao paymentModelDao : invoicePayments) {
- payments.put(paymentModelDao.getId(), paymentModelDao);
- }
accountRecordIds.put(invoice.getAccountId(), context.getAccountRecordId());
}
try {
diff --git a/invoice/src/test/java/org/killbill/billing/invoice/TestInvoiceHelper.java b/invoice/src/test/java/org/killbill/billing/invoice/TestInvoiceHelper.java
index 6fd8ae8..955e9a0 100644
--- a/invoice/src/test/java/org/killbill/billing/invoice/TestInvoiceHelper.java
+++ b/invoice/src/test/java/org/killbill/billing/invoice/TestInvoiceHelper.java
@@ -281,7 +281,7 @@ public class TestInvoiceHelper {
}));
// The test does not use the invoice callback notifier hence the empty map
- invoiceDao.createInvoice(invoiceModelDao, invoiceItemModelDaos, invoicePaymentModelDaos, isRealInvoiceWithItems, ImmutableMap.<UUID, List<DateTime>>of(), internalCallContext);
+ invoiceDao.createInvoice(invoiceModelDao, invoiceItemModelDaos, isRealInvoiceWithItems, ImmutableMap.<UUID, List<DateTime>>of(), internalCallContext);
}
public void createPayment(final InvoicePayment invoicePayment, final InternalCallContext internalCallContext) {
diff --git a/invoice/src/test/java/org/killbill/billing/invoice/tests/InvoiceTestUtils.java b/invoice/src/test/java/org/killbill/billing/invoice/tests/InvoiceTestUtils.java
index 3689bbe..313ffac 100644
--- a/invoice/src/test/java/org/killbill/billing/invoice/tests/InvoiceTestUtils.java
+++ b/invoice/src/test/java/org/killbill/billing/invoice/tests/InvoiceTestUtils.java
@@ -34,7 +34,6 @@ import org.killbill.billing.invoice.api.InvoicePaymentType;
import org.killbill.billing.invoice.dao.InvoiceDao;
import org.killbill.billing.invoice.dao.InvoiceItemModelDao;
import org.killbill.billing.invoice.dao.InvoiceModelDao;
-import org.killbill.billing.invoice.dao.InvoicePaymentModelDao;
import org.killbill.billing.invoice.model.FixedPriceInvoiceItem;
import org.killbill.billing.callcontext.InternalCallContext;
import org.killbill.clock.Clock;
@@ -87,7 +86,7 @@ public class InvoiceTestUtils {
}
Mockito.when(invoice.getInvoiceItems()).thenReturn(invoiceItems);
- invoiceDao.createInvoice(new InvoiceModelDao(invoice), invoiceModelItems, ImmutableList.<InvoicePaymentModelDao>of(), true, ImmutableMap.<UUID, List<DateTime>>of(), internalCallContext);
+ invoiceDao.createInvoice(new InvoiceModelDao(invoice), invoiceModelItems, true, ImmutableMap.<UUID, List<DateTime>>of(), internalCallContext);
return invoice;
}
jaxrs/pom.xml 8(+8 -0)
diff --git a/jaxrs/pom.xml b/jaxrs/pom.xml
index 14bc6ed..1715ed9 100644
--- a/jaxrs/pom.xml
+++ b/jaxrs/pom.xml
@@ -27,6 +27,14 @@
<name>killbill-jaxrs</name>
<dependencies>
<dependency>
+ <groupId>com.codahale.metrics</groupId>
+ <artifactId>metrics-annotation</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>com.codahale.metrics</groupId>
+ <artifactId>metrics-jersey</artifactId>
+ </dependency>
+ <dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
</dependency>
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/AccountResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/AccountResource.java
index 59971e2..95e1a82 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/AccountResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/AccountResource.java
@@ -98,6 +98,7 @@ import org.killbill.billing.util.entity.Pagination;
import org.killbill.billing.util.tag.ControlTagType;
import org.killbill.clock.Clock;
+import com.codahale.metrics.annotation.Timed;
import com.google.common.base.Function;
import com.google.common.base.Predicate;
import com.google.common.collect.Collections2;
@@ -140,6 +141,7 @@ public class AccountResource extends JaxRsResourceBase {
this.overdueApi = overdueApi;
}
+ @Timed
@GET
@Path("/{accountId:" + UUID_PATTERN + "}")
@Produces(APPLICATION_JSON)
@@ -155,6 +157,7 @@ public class AccountResource extends JaxRsResourceBase {
return Response.status(Status.OK).entity(accountJson).build();
}
+ @Timed
@GET
@Path("/" + PAGINATION)
@Produces(APPLICATION_JSON)
@@ -181,6 +184,7 @@ public class AccountResource extends JaxRsResourceBase {
);
}
+ @Timed
@GET
@Path("/" + SEARCH + "/{searchKey:" + ANYTHING_PATTERN + "}")
@Produces(APPLICATION_JSON)
@@ -209,6 +213,7 @@ public class AccountResource extends JaxRsResourceBase {
);
}
+ @Timed
@GET
@Path("/{accountId:" + UUID_PATTERN + "}/" + BUNDLES)
@Produces(APPLICATION_JSON)
@@ -233,6 +238,7 @@ public class AccountResource extends JaxRsResourceBase {
return Response.status(Status.OK).entity(result).build();
}
+ @Timed
@GET
@Produces(APPLICATION_JSON)
public Response getAccountByKey(@QueryParam(QUERY_EXTERNAL_KEY) final String externalKey,
@@ -261,6 +267,7 @@ public class AccountResource extends JaxRsResourceBase {
}
}
+ @Timed
@POST
@Consumes(APPLICATION_JSON)
@Produces(APPLICATION_JSON)
@@ -275,6 +282,7 @@ public class AccountResource extends JaxRsResourceBase {
return uriBuilder.buildResponse(uriInfo, AccountResource.class, "getAccount", account.getId());
}
+ @Timed
@PUT
@Consumes(APPLICATION_JSON)
@Produces(APPLICATION_JSON)
@@ -292,6 +300,7 @@ public class AccountResource extends JaxRsResourceBase {
}
// Not supported
+ @Timed
@DELETE
@Path("/{accountId:" + UUID_PATTERN + "}")
@Produces(APPLICATION_JSON)
@@ -309,6 +318,7 @@ public class AccountResource extends JaxRsResourceBase {
return Response.status(Status.INTERNAL_SERVER_ERROR).build();
}
+ @Timed
@GET
@Path("/{accountId:" + UUID_PATTERN + "}/" + TIMELINE)
@Produces(APPLICATION_JSON)
@@ -342,6 +352,7 @@ public class AccountResource extends JaxRsResourceBase {
* ************************** EMAIL NOTIFICATIONS FOR INVOICES ********************************
*/
+ @Timed
@GET
@Path("/{accountId:" + UUID_PATTERN + "}/" + EMAIL_NOTIFICATIONS)
@Produces(APPLICATION_JSON)
@@ -353,6 +364,7 @@ public class AccountResource extends JaxRsResourceBase {
return Response.status(Status.OK).entity(invoiceEmailJson).build();
}
+ @Timed
@PUT
@Path("/{accountId:" + UUID_PATTERN + "}/" + EMAIL_NOTIFICATIONS)
@Consumes(APPLICATION_JSON)
@@ -378,6 +390,7 @@ public class AccountResource extends JaxRsResourceBase {
/*
* ************************** INVOICE CBA REBALANCING ********************************
*/
+ @Timed
@POST
@Path("/{accountId:" + UUID_PATTERN + "}/" + CBA_REBALANCING)
@Consumes(APPLICATION_JSON)
@@ -400,6 +413,7 @@ public class AccountResource extends JaxRsResourceBase {
* ************************** INVOICES ********************************
*/
+ @Timed
@GET
@Path("/{accountId:" + UUID_PATTERN + "}/" + INVOICES)
@Produces(APPLICATION_JSON)
@@ -433,6 +447,7 @@ public class AccountResource extends JaxRsResourceBase {
*/
// STEPH should refactor code since very similar to @Path("/{accountId:" + UUID_PATTERN + "}/" + PAYMENTS)
+ @Timed
@GET
@Path("/{accountId:" + UUID_PATTERN + "}/" + INVOICE_PAYMENTS)
@Produces(APPLICATION_JSON)
@@ -456,6 +471,7 @@ public class AccountResource extends JaxRsResourceBase {
return Response.status(Status.OK).entity(result).build();
}
+ @Timed
@POST
@Produces(APPLICATION_JSON)
@Consumes(APPLICATION_JSON)
@@ -503,6 +519,7 @@ public class AccountResource extends JaxRsResourceBase {
return Response.status(Status.OK).build();
}
+ @Timed
@POST
@Path("/{accountId:" + UUID_PATTERN + "}/" + PAYMENT_METHODS)
@Consumes(APPLICATION_JSON)
@@ -539,6 +556,7 @@ public class AccountResource extends JaxRsResourceBase {
return uriBuilder.buildResponse(PaymentMethodResource.class, "getPaymentMethod", paymentMethodId, uriInfo.getBaseUri().toString());
}
+ @Timed
@GET
@Path("/{accountId:" + UUID_PATTERN + "}/" + PAYMENT_METHODS)
@Produces(APPLICATION_JSON)
@@ -563,6 +581,7 @@ public class AccountResource extends JaxRsResourceBase {
return Response.status(Status.OK).entity(json).build();
}
+ @Timed
@PUT
@Consumes(APPLICATION_JSON)
@Produces(APPLICATION_JSON)
@@ -593,6 +612,7 @@ public class AccountResource extends JaxRsResourceBase {
/*
* ************************* PAYMENTS *****************************
*/
+ @Timed
@GET
@Path("/{accountId:" + UUID_PATTERN + "}/" + PAYMENTS)
@Produces(APPLICATION_JSON)
@@ -615,6 +635,7 @@ public class AccountResource extends JaxRsResourceBase {
return Response.status(Response.Status.OK).entity(result).build();
}
+ @Timed
@POST
@Path("/{accountId:" + UUID_PATTERN + "}/" + PAYMENTS)
@Consumes(APPLICATION_JSON)
@@ -663,6 +684,7 @@ public class AccountResource extends JaxRsResourceBase {
/*
* ************************** OVERDUE ********************************
*/
+ @Timed
@GET
@Path("/{accountId:" + UUID_PATTERN + "}/" + OVERDUE)
@Produces(APPLICATION_JSON)
@@ -680,6 +702,7 @@ public class AccountResource extends JaxRsResourceBase {
* ************************* CUSTOM FIELDS *****************************
*/
+ @Timed
@GET
@Path("/{accountId:" + UUID_PATTERN + "}/" + CUSTOM_FIELDS)
@Produces(APPLICATION_JSON)
@@ -689,6 +712,7 @@ public class AccountResource extends JaxRsResourceBase {
return super.getCustomFields(UUID.fromString(id), auditMode, context.createContext(request));
}
+ @Timed
@POST
@Path("/{accountId:" + UUID_PATTERN + "}/" + CUSTOM_FIELDS)
@Consumes(APPLICATION_JSON)
@@ -704,6 +728,7 @@ public class AccountResource extends JaxRsResourceBase {
context.createContext(createdBy, reason, comment, request), uriInfo);
}
+ @Timed
@DELETE
@Path("/{accountId:" + UUID_PATTERN + "}/" + CUSTOM_FIELDS)
@Consumes(APPLICATION_JSON)
@@ -722,6 +747,7 @@ public class AccountResource extends JaxRsResourceBase {
* ************************* TAGS *****************************
*/
+ @Timed
@GET
@Path("/{accountId:" + UUID_PATTERN + "}/" + TAGS)
@Produces(APPLICATION_JSON)
@@ -733,6 +759,7 @@ public class AccountResource extends JaxRsResourceBase {
return super.getTags(accountId, accountId, auditMode, includedDeleted, context.createContext(request));
}
+ @Timed
@POST
@Path("/{accountId:" + UUID_PATTERN + "}/" + TAGS)
@Produces(APPLICATION_JSON)
@@ -747,6 +774,7 @@ public class AccountResource extends JaxRsResourceBase {
context.createContext(createdBy, reason, comment, request));
}
+ @Timed
@DELETE
@Path("/{accountId:" + UUID_PATTERN + "}/" + TAGS)
@Consumes(APPLICATION_JSON)
@@ -784,6 +812,7 @@ public class AccountResource extends JaxRsResourceBase {
* ************************* EMAILS *****************************
*/
+ @Timed
@GET
@Path("/{accountId:" + UUID_PATTERN + "}/" + EMAILS)
@Produces(APPLICATION_JSON)
@@ -799,6 +828,7 @@ public class AccountResource extends JaxRsResourceBase {
return Response.status(Status.OK).entity(emailsJson).build();
}
+ @Timed
@POST
@Path("/{accountId:" + UUID_PATTERN + "}/" + EMAILS)
@Consumes(APPLICATION_JSON)
@@ -834,6 +864,7 @@ public class AccountResource extends JaxRsResourceBase {
return uriBuilder.buildResponse(uriInfo, AccountResource.class, "getEmails", json.getAccountId());
}
+ @Timed
@DELETE
@Path("/{accountId:" + UUID_PATTERN + "}/" + EMAILS + "/{email}")
@Produces(APPLICATION_JSON)
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/BundleResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/BundleResource.java
index 0b67c0b..ad97126 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/BundleResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/BundleResource.java
@@ -67,6 +67,7 @@ import org.killbill.billing.util.callcontext.CallContext;
import org.killbill.billing.util.callcontext.TenantContext;
import org.killbill.billing.util.entity.Pagination;
+import com.codahale.metrics.annotation.Timed;
import com.google.common.base.Function;
import com.google.common.collect.ImmutableMap;
import com.google.inject.Inject;
@@ -97,6 +98,7 @@ public class BundleResource extends JaxRsResourceBase {
this.subscriptionApi = subscriptionApi;
}
+ @Timed
@GET
@Path("/{bundleId:" + UUID_PATTERN + "}")
@Produces(APPLICATION_JSON)
@@ -108,6 +110,7 @@ public class BundleResource extends JaxRsResourceBase {
return Response.status(Status.OK).entity(json).build();
}
+ @Timed
@GET
@Produces(APPLICATION_JSON)
public Response getBundleByKey(@QueryParam(QUERY_EXTERNAL_KEY) final String externalKey,
@@ -117,6 +120,7 @@ public class BundleResource extends JaxRsResourceBase {
return Response.status(Status.OK).entity(json).build();
}
+ @Timed
@GET
@Path("/" + PAGINATION)
@Produces(APPLICATION_JSON)
@@ -142,6 +146,7 @@ public class BundleResource extends JaxRsResourceBase {
nextPageUri);
}
+ @Timed
@GET
@Path("/" + SEARCH + "/{searchKey:" + ANYTHING_PATTERN + "}")
@Produces(APPLICATION_JSON)
@@ -169,6 +174,7 @@ public class BundleResource extends JaxRsResourceBase {
nextPageUri);
}
+ @Timed
@PUT
@Path("/{bundleId:" + UUID_PATTERN + "}/" + PAUSE)
@Consumes(APPLICATION_JSON)
@@ -188,6 +194,7 @@ public class BundleResource extends JaxRsResourceBase {
return Response.status(Status.OK).build();
}
+ @Timed
@PUT
@Path("/{bundleId:" + UUID_PATTERN + "}/" + RESUME)
@Consumes(APPLICATION_JSON)
@@ -207,6 +214,7 @@ public class BundleResource extends JaxRsResourceBase {
return Response.status(Status.OK).build();
}
+ @Timed
@GET
@Path("/{bundleId:" + UUID_PATTERN + "}/" + CUSTOM_FIELDS)
@Produces(APPLICATION_JSON)
@@ -216,6 +224,7 @@ public class BundleResource extends JaxRsResourceBase {
return super.getCustomFields(UUID.fromString(id), auditMode, context.createContext(request));
}
+ @Timed
@POST
@Path("/{bundleId:" + UUID_PATTERN + "}/" + CUSTOM_FIELDS)
@Consumes(APPLICATION_JSON)
@@ -231,6 +240,7 @@ public class BundleResource extends JaxRsResourceBase {
context.createContext(createdBy, reason, comment, request), uriInfo);
}
+ @Timed
@DELETE
@Path("/{bundleId:" + UUID_PATTERN + "}/" + CUSTOM_FIELDS)
@Consumes(APPLICATION_JSON)
@@ -245,6 +255,7 @@ public class BundleResource extends JaxRsResourceBase {
context.createContext(createdBy, reason, comment, request));
}
+ @Timed
@GET
@Path("/{bundleId:" + UUID_PATTERN + "}/" + TAGS)
@Produces(APPLICATION_JSON)
@@ -258,6 +269,7 @@ public class BundleResource extends JaxRsResourceBase {
return super.getTags(bundle.getAccountId(), bundleId, auditMode, includedDeleted, tenantContext);
}
+ @Timed
@PUT
@Path("/{bundleId:" + UUID_PATTERN + "}")
@Consumes(APPLICATION_JSON)
@@ -284,6 +296,7 @@ public class BundleResource extends JaxRsResourceBase {
return uriBuilder.buildResponse(BundleResource.class, "getBundle", newBundleId, uriInfo.getBaseUri().toString());
}
+ @Timed
@POST
@Path("/{bundleId:" + UUID_PATTERN + "}/" + TAGS)
@Consumes(APPLICATION_JSON)
@@ -299,6 +312,7 @@ public class BundleResource extends JaxRsResourceBase {
context.createContext(createdBy, reason, comment, request));
}
+ @Timed
@DELETE
@Path("/{bundleId:" + UUID_PATTERN + "}/" + TAGS)
@Consumes(APPLICATION_JSON)
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/CatalogResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/CatalogResource.java
index a2db429..1de293d 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/CatalogResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/CatalogResource.java
@@ -43,6 +43,7 @@ import org.killbill.billing.util.api.CustomFieldUserApi;
import org.killbill.billing.util.api.TagUserApi;
import org.killbill.xmlloader.XMLWriter;
+import com.codahale.metrics.annotation.Timed;
import com.google.inject.Inject;
import com.google.inject.Singleton;
@@ -69,12 +70,14 @@ public class CatalogResource extends JaxRsResourceBase {
this.catalogService = catalogService;
}
+ @Timed
@GET
@Produces(APPLICATION_XML)
public Response getCatalogXml(@javax.ws.rs.core.Context final HttpServletRequest request) throws Exception {
return Response.status(Status.OK).entity(XMLWriter.writeXML(catalogService.getCurrentCatalog(), StaticCatalog.class)).build();
}
+ @Timed
@GET
@Produces(APPLICATION_JSON)
public Response getCatalogJson(@javax.ws.rs.core.Context final HttpServletRequest request) throws Exception {
@@ -97,6 +100,7 @@ public class CatalogResource extends JaxRsResourceBase {
// return result;
// }
+ @Timed
@GET
@Path("/availableAddons")
@Produces(APPLICATION_JSON)
@@ -111,6 +115,7 @@ public class CatalogResource extends JaxRsResourceBase {
return Response.status(Status.OK).entity(details).build();
}
+ @Timed
@GET
@Path("/availableBasePlans")
@Produces(APPLICATION_JSON)
@@ -124,6 +129,7 @@ public class CatalogResource extends JaxRsResourceBase {
return Response.status(Status.OK).entity(details).build();
}
+ @Timed
@GET
@Path("/simpleCatalog")
@Produces(APPLICATION_JSON)
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/CustomFieldResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/CustomFieldResource.java
index a6772fe..35556ad 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/CustomFieldResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/CustomFieldResource.java
@@ -44,6 +44,7 @@ import org.killbill.billing.util.callcontext.TenantContext;
import org.killbill.billing.util.customfield.CustomField;
import org.killbill.billing.util.entity.Pagination;
+import com.codahale.metrics.annotation.Timed;
import com.google.common.base.Function;
import com.google.common.collect.ImmutableMap;
import com.google.inject.Inject;
@@ -67,6 +68,7 @@ public class CustomFieldResource extends JaxRsResourceBase {
super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, paymentApi, clock, context);
}
+ @Timed
@GET
@Path("/" + PAGINATION)
@Produces(APPLICATION_JSON)
@@ -90,6 +92,7 @@ public class CustomFieldResource extends JaxRsResourceBase {
nextPageUri);
}
+ @Timed
@GET
@Path("/" + SEARCH + "/{searchKey:" + ANYTHING_PATTERN + "}")
@Produces(APPLICATION_JSON)
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/ExportResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/ExportResource.java
index c04ef4a..672d7e2 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/ExportResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/ExportResource.java
@@ -41,6 +41,7 @@ import org.killbill.billing.util.api.ExportUserApi;
import org.killbill.billing.util.api.TagUserApi;
import org.killbill.billing.util.callcontext.CallContext;
+import com.codahale.metrics.annotation.Timed;
import com.google.inject.Singleton;
import static javax.ws.rs.core.MediaType.TEXT_PLAIN;
@@ -65,6 +66,7 @@ public class ExportResource extends JaxRsResourceBase {
this.exportUserApi = exportUserApi;
}
+ @Timed
@GET
@Path("/{accountId:" + UUID_PATTERN + "}")
@Produces(TEXT_PLAIN)
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/InvoicePaymentResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/InvoicePaymentResource.java
index 0c29da0..2995a0c 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/InvoicePaymentResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/InvoicePaymentResource.java
@@ -66,6 +66,7 @@ import org.killbill.billing.util.callcontext.CallContext;
import org.killbill.billing.util.callcontext.TenantContext;
import org.killbill.clock.Clock;
+import com.codahale.metrics.annotation.Timed;
import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
@@ -94,6 +95,7 @@ public class InvoicePaymentResource extends JaxRsResourceBase {
this.invoicePaymentApi = invoicePaymentApi;
}
+ @Timed
@GET
@Path("/{paymentId:" + UUID_PATTERN + "}/")
@Produces(APPLICATION_JSON)
@@ -122,6 +124,7 @@ public class InvoicePaymentResource extends JaxRsResourceBase {
return Response.status(Response.Status.OK).entity(result).build();
}
+ @Timed
@POST
@Path("/{paymentId:" + UUID_PATTERN + "}/" + REFUNDS)
@Consumes(APPLICATION_JSON)
@@ -164,6 +167,7 @@ public class InvoicePaymentResource extends JaxRsResourceBase {
return uriBuilder.buildResponse(InvoicePaymentResource.class, "getInvoicePayment", result.getId(), uriInfo.getBaseUri().toString());
}
+ @Timed
@POST
@Path("/{paymentId:" + UUID_PATTERN + "}/" + CHARGEBACKS)
@Consumes(APPLICATION_JSON)
@@ -187,6 +191,7 @@ public class InvoicePaymentResource extends JaxRsResourceBase {
return uriBuilder.buildResponse(uriInfo, InvoicePaymentResource.class, "getInvoicePayment", result.getId());
}
+ @Timed
@GET
@Path("/{paymentId:" + UUID_PATTERN + "}/" + CUSTOM_FIELDS)
@Produces(APPLICATION_JSON)
@@ -196,6 +201,7 @@ public class InvoicePaymentResource extends JaxRsResourceBase {
return super.getCustomFields(UUID.fromString(id), auditMode, context.createContext(request));
}
+ @Timed
@POST
@Path("/{paymentId:" + UUID_PATTERN + "}/" + CUSTOM_FIELDS)
@Consumes(APPLICATION_JSON)
@@ -211,6 +217,7 @@ public class InvoicePaymentResource extends JaxRsResourceBase {
context.createContext(createdBy, reason, comment, request), uriInfo);
}
+ @Timed
@DELETE
@Path("/{paymentId:" + UUID_PATTERN + "}/" + CUSTOM_FIELDS)
@Consumes(APPLICATION_JSON)
@@ -225,6 +232,7 @@ public class InvoicePaymentResource extends JaxRsResourceBase {
context.createContext(createdBy, reason, comment, request));
}
+ @Timed
@GET
@Path("/{paymentId:" + UUID_PATTERN + "}/" + TAGS)
@Produces(APPLICATION_JSON)
@@ -240,6 +248,7 @@ public class InvoicePaymentResource extends JaxRsResourceBase {
return super.getTags(payment.getAccountId(), paymentId, auditMode, includedDeleted, tenantContext);
}
+ @Timed
@POST
@Path("/{paymentId:" + UUID_PATTERN + "}/" + TAGS)
@Consumes(APPLICATION_JSON)
@@ -255,6 +264,7 @@ public class InvoicePaymentResource extends JaxRsResourceBase {
context.createContext(createdBy, reason, comment, request));
}
+ @Timed
@DELETE
@Path("/{paymentId:" + UUID_PATTERN + "}/" + TAGS)
@Consumes(APPLICATION_JSON)
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/InvoiceResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/InvoiceResource.java
index 29ac896..43ab896 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/InvoiceResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/InvoiceResource.java
@@ -83,6 +83,7 @@ import org.killbill.clock.Clock;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import com.codahale.metrics.annotation.Timed;
import com.google.common.base.Function;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
@@ -118,6 +119,7 @@ public class InvoiceResource extends JaxRsResourceBase {
this.invoiceNotifier = invoiceNotifier;
}
+ @Timed
@GET
@Path("/{invoiceId:" + UUID_PATTERN + "}/")
@Produces(APPLICATION_JSON)
@@ -137,6 +139,7 @@ public class InvoiceResource extends JaxRsResourceBase {
}
}
+ @Timed
@GET
@Path("/{invoiceNumber:" + NUMBER_PATTERN + "}/")
@Produces(APPLICATION_JSON)
@@ -156,6 +159,7 @@ public class InvoiceResource extends JaxRsResourceBase {
}
}
+ @Timed
@GET
@Path("/{invoiceId:" + UUID_PATTERN + "}/html")
@Produces(TEXT_HTML)
@@ -164,6 +168,7 @@ public class InvoiceResource extends JaxRsResourceBase {
return Response.status(Status.OK).entity(invoiceApi.getInvoiceAsHTML(UUID.fromString(invoiceId), context.createContext(request))).build();
}
+ @Timed
@GET
@Path("/" + PAGINATION)
@Produces(APPLICATION_JSON)
@@ -193,6 +198,7 @@ public class InvoiceResource extends JaxRsResourceBase {
);
}
+ @Timed
@GET
@Path("/" + SEARCH + "/{searchKey:" + ANYTHING_PATTERN + "}")
@Produces(APPLICATION_JSON)
@@ -223,6 +229,7 @@ public class InvoiceResource extends JaxRsResourceBase {
);
}
+ @Timed
@POST
@Consumes(APPLICATION_JSON)
@Produces(APPLICATION_JSON)
@@ -246,6 +253,7 @@ public class InvoiceResource extends JaxRsResourceBase {
}
}
+ @Timed
@DELETE
@Path("/{invoiceId:" + UUID_PATTERN + "}" + "/{invoiceItemId:" + UUID_PATTERN + "}/cba")
@Consumes(APPLICATION_JSON)
@@ -266,6 +274,7 @@ public class InvoiceResource extends JaxRsResourceBase {
return Response.status(Status.OK).build();
}
+ @Timed
@POST
@Path("/{invoiceId:" + UUID_PATTERN + "}")
@Consumes(APPLICATION_JSON)
@@ -302,6 +311,7 @@ public class InvoiceResource extends JaxRsResourceBase {
return uriBuilder.buildResponse(uriInfo, InvoiceResource.class, "getInvoice", adjustmentItem.getInvoiceId());
}
+ @Timed
@POST
@Produces(APPLICATION_JSON)
@Consumes(APPLICATION_JSON)
@@ -370,6 +380,7 @@ public class InvoiceResource extends JaxRsResourceBase {
return Response.status(Status.OK).entity(createdExternalChargesJson).build();
}
+ @Timed
@GET
@Path("/{invoiceId:" + UUID_PATTERN + "}/" + PAYMENTS)
@Produces(APPLICATION_JSON)
@@ -395,6 +406,7 @@ public class InvoiceResource extends JaxRsResourceBase {
return Response.status(Status.OK).entity(result).build();
}
+ @Timed
@POST
@Produces(APPLICATION_JSON)
@Consumes(APPLICATION_JSON)
@@ -417,6 +429,7 @@ public class InvoiceResource extends JaxRsResourceBase {
return uriBuilder.buildResponse(uriInfo, InvoicePaymentResource.class, "getInvoicePayment", result.getId());
}
+ @Timed
@POST
@Path("/{invoiceId:" + UUID_PATTERN + "}/" + EMAIL_NOTIFICATIONS)
@Consumes(APPLICATION_JSON)
@@ -441,6 +454,7 @@ public class InvoiceResource extends JaxRsResourceBase {
return Response.status(Status.OK).build();
}
+ @Timed
@GET
@Path("/{invoiceId:" + UUID_PATTERN + "}/" + CUSTOM_FIELDS)
@Produces(APPLICATION_JSON)
@@ -450,6 +464,7 @@ public class InvoiceResource extends JaxRsResourceBase {
return super.getCustomFields(UUID.fromString(id), auditMode, context.createContext(request));
}
+ @Timed
@POST
@Path("/{invoiceId:" + UUID_PATTERN + "}/" + CUSTOM_FIELDS)
@Consumes(APPLICATION_JSON)
@@ -465,6 +480,7 @@ public class InvoiceResource extends JaxRsResourceBase {
context.createContext(createdBy, reason, comment, request), uriInfo);
}
+ @Timed
@DELETE
@Path("/{invoiceId:" + UUID_PATTERN + "}/" + CUSTOM_FIELDS)
@Consumes(APPLICATION_JSON)
@@ -479,6 +495,7 @@ public class InvoiceResource extends JaxRsResourceBase {
context.createContext(createdBy, reason, comment, request));
}
+ @Timed
@GET
@Path("/{invoiceId:" + UUID_PATTERN + "}/" + TAGS)
@Produces(APPLICATION_JSON)
@@ -492,6 +509,7 @@ public class InvoiceResource extends JaxRsResourceBase {
return super.getTags(invoice.getAccountId(), invoiceId, auditMode, includedDeleted, tenantContext);
}
+ @Timed
@POST
@Path("/{invoiceId:" + UUID_PATTERN + "}/" + TAGS)
@Consumes(APPLICATION_JSON)
@@ -507,6 +525,7 @@ public class InvoiceResource extends JaxRsResourceBase {
context.createContext(createdBy, reason, comment, request));
}
+ @Timed
@DELETE
@Path("/{invoiceId:" + UUID_PATTERN + "}/" + TAGS)
@Consumes(APPLICATION_JSON)
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PaymentGatewayResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PaymentGatewayResource.java
index 7ce7194..829bef6 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PaymentGatewayResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PaymentGatewayResource.java
@@ -53,6 +53,7 @@ import org.killbill.billing.util.api.TagUserApi;
import org.killbill.billing.util.callcontext.CallContext;
import org.killbill.clock.Clock;
+import com.codahale.metrics.annotation.Timed;
import com.google.common.base.Function;
import com.google.common.base.Strings;
import com.google.common.collect.ImmutableList;
@@ -80,6 +81,7 @@ public class PaymentGatewayResource extends JaxRsResourceBase {
this.paymentGatewayApi = paymentGatewayApi;
}
+ @Timed
@POST
@Path("/" + HOSTED + "/" + FORM + "/{" + QUERY_ACCOUNT_ID + ":" + UUID_PATTERN + "}")
@Consumes(APPLICATION_JSON)
@@ -117,6 +119,7 @@ public class PaymentGatewayResource extends JaxRsResourceBase {
return Response.status(Response.Status.OK).entity(result).build();
}
+ @Timed
@POST
@Path("/" + NOTIFICATION + "/{" + QUERY_PAYMENT_PLUGIN_NAME + ":" + ANYTHING_PATTERN + "}")
@Consumes(WILDCARD)
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PaymentMethodResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PaymentMethodResource.java
index e6be9a6..183eb21 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PaymentMethodResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PaymentMethodResource.java
@@ -57,6 +57,7 @@ import org.killbill.billing.util.callcontext.TenantContext;
import org.killbill.billing.util.entity.Pagination;
import org.killbill.clock.Clock;
+import com.codahale.metrics.annotation.Timed;
import com.google.common.base.Function;
import com.google.common.base.Strings;
import com.google.common.collect.ImmutableMap;
@@ -81,6 +82,7 @@ public class PaymentMethodResource extends JaxRsResourceBase {
super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, paymentApi, clock, context);
}
+ @Timed
@GET
@Path("/{paymentMethodId:" + UUID_PATTERN + "}")
@Produces(APPLICATION_JSON)
@@ -100,6 +102,7 @@ public class PaymentMethodResource extends JaxRsResourceBase {
return Response.status(Status.OK).entity(json).build();
}
+ @Timed
@GET
@Produces(APPLICATION_JSON)
public Response getPaymentMethodByKey(@QueryParam(QUERY_EXTERNAL_KEY) final String externalKey,
@@ -117,6 +120,7 @@ public class PaymentMethodResource extends JaxRsResourceBase {
return Response.status(Status.OK).entity(json).build();
}
+ @Timed
@GET
@Path("/" + PAGINATION)
@Produces(APPLICATION_JSON)
@@ -170,6 +174,7 @@ public class PaymentMethodResource extends JaxRsResourceBase {
);
}
+ @Timed
@GET
@Path("/" + SEARCH + "/{searchKey:" + ANYTHING_PATTERN + "}")
@Produces(APPLICATION_JSON)
@@ -226,6 +231,7 @@ public class PaymentMethodResource extends JaxRsResourceBase {
);
}
+ @Timed
@DELETE
@Produces(APPLICATION_JSON)
@Path("/{paymentMethodId:" + UUID_PATTERN + "}")
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PaymentResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PaymentResource.java
index 18748b4..b9496c4 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PaymentResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PaymentResource.java
@@ -61,6 +61,7 @@ import org.killbill.billing.util.callcontext.TenantContext;
import org.killbill.billing.util.entity.Pagination;
import org.killbill.clock.Clock;
+import com.codahale.metrics.annotation.Timed;
import com.google.common.base.Function;
import com.google.common.base.Strings;
import com.google.common.collect.ImmutableMap;
@@ -82,6 +83,7 @@ public class PaymentResource extends JaxRsResourceBase {
super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, paymentApi, clock, context);
}
+ @Timed
@GET
@Path("/{paymentId:" + UUID_PATTERN + "}/")
@Produces(APPLICATION_JSON)
@@ -100,6 +102,7 @@ public class PaymentResource extends JaxRsResourceBase {
return Response.status(Response.Status.OK).entity(result).build();
}
+ @Timed
@GET
@Path("/" + PAGINATION)
@Produces(APPLICATION_JSON)
@@ -140,6 +143,7 @@ public class PaymentResource extends JaxRsResourceBase {
);
}
+ @Timed
@GET
@Path("/" + SEARCH + "/{searchKey:" + ANYTHING_PATTERN + "}")
@Produces(APPLICATION_JSON)
@@ -183,6 +187,7 @@ public class PaymentResource extends JaxRsResourceBase {
);
}
+ @Timed
@POST
@Path("/{paymentId:" + UUID_PATTERN + "}/")
@Consumes(APPLICATION_JSON)
@@ -208,6 +213,7 @@ public class PaymentResource extends JaxRsResourceBase {
return uriBuilder.buildResponse(uriInfo, PaymentResource.class, "getPayment", payment.getId());
}
+ @Timed
@POST
@Path("/{paymentId:" + UUID_PATTERN + "}/" + REFUNDS)
@Consumes(APPLICATION_JSON)
@@ -233,6 +239,7 @@ public class PaymentResource extends JaxRsResourceBase {
return uriBuilder.buildResponse(uriInfo, PaymentResource.class, "getPayment", payment.getId());
}
+ @Timed
@DELETE
@Path("/{paymentId:" + UUID_PATTERN + "}/")
@Consumes(APPLICATION_JSON)
@@ -257,6 +264,7 @@ public class PaymentResource extends JaxRsResourceBase {
return uriBuilder.buildResponse(uriInfo, PaymentResource.class, "getPayment", payment.getId());
}
+ @Timed
@POST
@Path("/{paymentId:" + UUID_PATTERN + "}/" + CHARGEBACKS)
@Consumes(APPLICATION_JSON)
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PluginResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PluginResource.java
index 6b1b15a..f581061 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PluginResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PluginResource.java
@@ -57,6 +57,7 @@ import org.killbill.billing.util.api.AuditUserApi;
import org.killbill.billing.util.api.CustomFieldUserApi;
import org.killbill.billing.util.api.TagUserApi;
+import com.codahale.metrics.annotation.Timed;
import com.google.common.io.ByteStreams;
import com.google.inject.Inject;
import com.google.inject.Singleton;
@@ -86,6 +87,7 @@ public class PluginResource extends JaxRsResourceBase {
this.osgiServlet = osgiServlet;
}
+ @Timed
@DELETE
public Response doDELETE(@javax.ws.rs.core.Context final HttpServletRequest request,
@javax.ws.rs.core.Context final HttpServletResponse response,
@@ -94,6 +96,7 @@ public class PluginResource extends JaxRsResourceBase {
return serviceViaOSGIPlugin(request, response, servletContext, servletConfig);
}
+ @Timed
@GET
public Response doGET(@javax.ws.rs.core.Context final HttpServletRequest request,
@javax.ws.rs.core.Context final HttpServletResponse response,
@@ -102,6 +105,7 @@ public class PluginResource extends JaxRsResourceBase {
return serviceViaOSGIPlugin(request, response, servletContext, servletConfig);
}
+ @Timed
@OPTIONS
public Response doOPTIONS(@javax.ws.rs.core.Context final HttpServletRequest request,
@javax.ws.rs.core.Context final HttpServletResponse response,
@@ -110,6 +114,7 @@ public class PluginResource extends JaxRsResourceBase {
return serviceViaOSGIPlugin(request, response, servletContext, servletConfig);
}
+ @Timed
@POST
@Consumes("application/x-www-form-urlencoded")
public Response doFormPOST(final MultivaluedMap<String, String> form,
@@ -120,6 +125,7 @@ public class PluginResource extends JaxRsResourceBase {
return serviceViaOSGIPlugin(form, request, response, servletContext, servletConfig);
}
+ @Timed
@POST
public Response doPOST(@javax.ws.rs.core.Context final HttpServletRequest request,
@javax.ws.rs.core.Context final HttpServletResponse response,
@@ -128,6 +134,7 @@ public class PluginResource extends JaxRsResourceBase {
return serviceViaOSGIPlugin(request, response, servletContext, servletConfig);
}
+ @Timed
@PUT
public Response doPUT(@javax.ws.rs.core.Context final HttpServletRequest request,
@javax.ws.rs.core.Context final HttpServletResponse response,
@@ -136,6 +143,7 @@ public class PluginResource extends JaxRsResourceBase {
return serviceViaOSGIPlugin(request, response, servletContext, servletConfig);
}
+ @Timed
@HEAD
public Response doHEAD(@javax.ws.rs.core.Context final HttpServletRequest request,
@javax.ws.rs.core.Context final HttpServletResponse response,
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/SecurityResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/SecurityResource.java
index f9a904c..c4348b5 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/SecurityResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/SecurityResource.java
@@ -42,6 +42,7 @@ import org.killbill.billing.util.api.AuditUserApi;
import org.killbill.billing.util.api.CustomFieldUserApi;
import org.killbill.billing.util.api.TagUserApi;
+import com.codahale.metrics.annotation.Timed;
import com.google.common.base.Functions;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
@@ -69,6 +70,7 @@ public class SecurityResource extends JaxRsResourceBase {
this.securityApi = securityApi;
}
+ @Timed
@GET
@Path("/permissions")
@Produces(APPLICATION_JSON)
@@ -78,6 +80,7 @@ public class SecurityResource extends JaxRsResourceBase {
return Response.status(Status.OK).entity(json).build();
}
+ @Timed
@GET
@Path("/subject")
@Produces(APPLICATION_JSON)
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/SubscriptionResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/SubscriptionResource.java
index 47038ac..ddd2768 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/SubscriptionResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/SubscriptionResource.java
@@ -78,6 +78,7 @@ import org.killbill.billing.util.callcontext.CallContext;
import org.killbill.billing.util.callcontext.TenantContext;
import org.killbill.billing.util.userrequest.CompletionUserRequestBase;
+import com.codahale.metrics.annotation.Timed;
import com.google.inject.Inject;
import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
@@ -110,6 +111,7 @@ public class SubscriptionResource extends JaxRsResourceBase {
this.subscriptionApi = subscriptionApi;
}
+ @Timed
@GET
@Path("/{subscriptionId:" + UUID_PATTERN + "}")
@Produces(APPLICATION_JSON)
@@ -121,6 +123,7 @@ public class SubscriptionResource extends JaxRsResourceBase {
return Response.status(Status.OK).entity(json).build();
}
+ @Timed
@POST
@Consumes(APPLICATION_JSON)
@Produces(APPLICATION_JSON)
@@ -165,6 +168,7 @@ public class SubscriptionResource extends JaxRsResourceBase {
return callCompletionCreation.withSynchronization(callback, timeoutSec, callCompletion, callContext);
}
+ @Timed
@PUT
@Path("/{subscriptionId:" + UUID_PATTERN + "}/uncancel")
@Produces(APPLICATION_JSON)
@@ -179,6 +183,7 @@ public class SubscriptionResource extends JaxRsResourceBase {
return Response.status(Status.OK).build();
}
+ @Timed
@PUT
@Produces(APPLICATION_JSON)
@Consumes(APPLICATION_JSON)
@@ -239,6 +244,7 @@ public class SubscriptionResource extends JaxRsResourceBase {
return callCompletionCreation.withSynchronization(callback, timeoutSec, callCompletion, callContext);
}
+ @Timed
@DELETE
@Path("/{subscriptionId:" + UUID_PATTERN + "}")
@Produces(APPLICATION_JSON)
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TagDefinitionResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TagDefinitionResource.java
index 2d8ae8e..343dd43 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TagDefinitionResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TagDefinitionResource.java
@@ -51,6 +51,7 @@ import org.killbill.billing.util.audit.AuditLog;
import org.killbill.billing.util.callcontext.TenantContext;
import org.killbill.billing.util.tag.TagDefinition;
+import com.codahale.metrics.annotation.Timed;
import com.google.common.base.Preconditions;
import com.google.inject.Inject;
import com.google.inject.Singleton;
@@ -73,6 +74,7 @@ public class TagDefinitionResource extends JaxRsResourceBase {
super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, paymentApi, clock, context);
}
+ @Timed
@GET
@Produces(APPLICATION_JSON)
public Response getTagDefinitions(@javax.ws.rs.core.Context final HttpServletRequest request,
@@ -89,6 +91,7 @@ public class TagDefinitionResource extends JaxRsResourceBase {
return Response.status(Status.OK).entity(result).build();
}
+ @Timed
@GET
@Path("/{tagDefinitionId:" + UUID_PATTERN + "}")
@Produces(APPLICATION_JSON)
@@ -102,6 +105,7 @@ public class TagDefinitionResource extends JaxRsResourceBase {
return Response.status(Status.OK).entity(json).build();
}
+ @Timed
@POST
@Consumes(APPLICATION_JSON)
@Produces(APPLICATION_JSON)
@@ -119,6 +123,7 @@ public class TagDefinitionResource extends JaxRsResourceBase {
return uriBuilder.buildResponse(uriInfo, TagDefinitionResource.class, "getTagDefinition", createdTagDef.getId());
}
+ @Timed
@DELETE
@Path("/{tagDefinitionId:" + UUID_PATTERN + "}")
@Produces(APPLICATION_JSON)
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TagResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TagResource.java
index 656f8ba..4871ce2 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TagResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TagResource.java
@@ -48,6 +48,7 @@ import org.killbill.billing.util.entity.Pagination;
import org.killbill.billing.util.tag.Tag;
import org.killbill.billing.util.tag.TagDefinition;
+import com.codahale.metrics.annotation.Timed;
import com.google.common.base.Function;
import com.google.common.collect.ImmutableMap;
import com.google.inject.Inject;
@@ -71,6 +72,7 @@ public class TagResource extends JaxRsResourceBase {
super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, paymentApi, clock, context);
}
+ @Timed
@GET
@Path("/" + PAGINATION)
@Produces(APPLICATION_JSON)
@@ -101,6 +103,7 @@ public class TagResource extends JaxRsResourceBase {
nextPageUri);
}
+ @Timed
@GET
@Path("/" + SEARCH + "/{searchKey:" + ANYTHING_PATTERN + "}")
@Produces(APPLICATION_JSON)
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TenantResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TenantResource.java
index 66474f0..b0e6789 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TenantResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TenantResource.java
@@ -54,6 +54,7 @@ import org.killbill.billing.util.api.TagUserApi;
import org.killbill.billing.util.callcontext.CallContext;
import org.killbill.billing.util.callcontext.TenantContext;
+import com.codahale.metrics.annotation.Timed;
import com.google.inject.Inject;
import com.google.inject.Singleton;
@@ -79,6 +80,7 @@ public class TenantResource extends JaxRsResourceBase {
this.tenantApi = tenantApi;
}
+ @Timed
@GET
@Path("/{tenantId:" + UUID_PATTERN + "}")
@Produces(APPLICATION_JSON)
@@ -87,6 +89,7 @@ public class TenantResource extends JaxRsResourceBase {
return Response.status(Status.OK).entity(new TenantJson(tenant)).build();
}
+ @Timed
@GET
@Produces(APPLICATION_JSON)
public Response getTenantByApiKey(@QueryParam(QUERY_API_KEY) final String externalKey) throws TenantApiException {
@@ -94,6 +97,7 @@ public class TenantResource extends JaxRsResourceBase {
return Response.status(Status.OK).entity(new TenantJson(tenant)).build();
}
+ @Timed
@POST
@Consumes(APPLICATION_JSON)
@Produces(APPLICATION_JSON)
@@ -108,6 +112,7 @@ public class TenantResource extends JaxRsResourceBase {
return uriBuilder.buildResponse(uriInfo, TenantResource.class, "getTenant", tenant.getId());
}
+ @Timed
@POST
@Path("/" + REGISTER_NOTIFICATION_CALLBACK)
@Consumes(APPLICATION_JSON)
@@ -124,6 +129,7 @@ public class TenantResource extends JaxRsResourceBase {
return Response.created(uri).build();
}
+ @Timed
@GET
@Path("/" + REGISTER_NOTIFICATION_CALLBACK)
@Produces(APPLICATION_JSON)
@@ -135,6 +141,7 @@ public class TenantResource extends JaxRsResourceBase {
return Response.status(Status.OK).entity(result).build();
}
+ @Timed
@DELETE
@Path("/REGISTER_NOTIFICATION_CALLBACK")
public Response deletePushNotificationCallbacks(@PathParam("tenantId") final String tenantId,
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TestResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TestResource.java
index 250139a..1063470 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TestResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TestResource.java
@@ -197,7 +197,7 @@ public class TestResource extends JaxRsResourceBase {
final Iterable<NotificationQueue> filtered = Iterables.filter(queues, new Predicate<NotificationQueue>() {
@Override
public boolean apply(@Nullable final NotificationQueue input) {
- return input.getReadyNotificationEntriesForSearchKey2(tenantRecordId) > 0;
+ return input.getFutureNotificationForSearchKey2(tenantRecordId).size() > 0;
}
});
return !filtered.iterator().hasNext();
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TransactionResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TransactionResource.java
index 349fcb3..d3bca8c 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TransactionResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TransactionResource.java
@@ -62,6 +62,7 @@ import org.killbill.billing.util.callcontext.TenantContext;
import org.killbill.billing.util.entity.Pagination;
import org.killbill.clock.Clock;
+import com.codahale.metrics.annotation.Timed;
import com.google.common.base.Function;
import com.google.common.base.Strings;
import com.google.common.collect.ImmutableList;
@@ -84,6 +85,7 @@ public class TransactionResource extends JaxRsResourceBase {
super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, paymentApi, clock, context);
}
+ @Timed
@POST
@Path("/{transactionId:" + UUID_PATTERN + "}/")
@Consumes(APPLICATION_JSON)
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/UsageResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/UsageResource.java
index 1a00cd4..bc07c8a 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/UsageResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/UsageResource.java
@@ -47,6 +47,7 @@ import org.killbill.billing.util.callcontext.CallContext;
import org.killbill.billing.util.callcontext.TenantContext;
import org.killbill.clock.Clock;
+import com.codahale.metrics.annotation.Timed;
import com.google.inject.Singleton;
import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
@@ -70,6 +71,7 @@ public class UsageResource extends JaxRsResourceBase {
this.usageUserApi = usageUserApi;
}
+ @Timed
@POST
@Consumes(APPLICATION_JSON)
@Produces(APPLICATION_JSON)
@@ -85,6 +87,7 @@ public class UsageResource extends JaxRsResourceBase {
return Response.status(Status.CREATED).build();
}
+ @Timed
@GET
@Path("/{subscriptionId:" + UUID_PATTERN + "}/{unitType}")
@Produces(APPLICATION_JSON)
diff --git a/overdue/src/main/java/org/killbill/billing/overdue/notification/DefaultOverduePosterBase.java b/overdue/src/main/java/org/killbill/billing/overdue/notification/DefaultOverduePosterBase.java
index 30de6f4..96e3053 100644
--- a/overdue/src/main/java/org/killbill/billing/overdue/notification/DefaultOverduePosterBase.java
+++ b/overdue/src/main/java/org/killbill/billing/overdue/notification/DefaultOverduePosterBase.java
@@ -111,7 +111,7 @@ public abstract class DefaultOverduePosterBase implements OverduePoster {
final NotificationQueue checkOverdueQueue,
final Class<T> clazz,
final InternalCallContext context) {
- return checkOverdueQueue.getFutureNotificationFromTransactionForSearchKey1(clazz, context.getAccountRecordId(), entitySqlDaoWrapperFactory.getSqlDao());
+ return checkOverdueQueue.getFutureNotificationFromTransactionForSearchKeys(context.getAccountRecordId(), context.getTenantRecordId(), entitySqlDaoWrapperFactory.getSqlDao());
}
protected abstract <T extends OverdueCheckNotificationKey> boolean cleanupFutureNotificationsFormTransaction(final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory,
diff --git a/overdue/src/test/java/org/killbill/billing/overdue/notification/TestDefaultOverdueCheckPoster.java b/overdue/src/test/java/org/killbill/billing/overdue/notification/TestDefaultOverdueCheckPoster.java
index 819fc16..c01ef70 100644
--- a/overdue/src/test/java/org/killbill/billing/overdue/notification/TestDefaultOverdueCheckPoster.java
+++ b/overdue/src/test/java/org/killbill/billing/overdue/notification/TestDefaultOverdueCheckPoster.java
@@ -69,7 +69,7 @@ public class TestDefaultOverdueCheckPoster extends OverdueTestSuiteWithEmbeddedD
insertOverdueCheckAndVerifyQueueContent(overdueable, 15, 5);
// Verify the final content of the queue
- Assert.assertEquals(overdueQueue.getFutureNotificationForSearchKey1(OverdueCheckNotificationKey.class, internalCallContext.getAccountRecordId()).size(), 1);
+ Assert.assertEquals(overdueQueue.getFutureNotificationForSearchKeys(internalCallContext.getAccountRecordId(), internalCallContext.getTenantRecordId()).size(), 1);
}
private void insertOverdueCheckAndVerifyQueueContent(final Account account, final int nbDaysInFuture, final int expectedNbDaysInFuture) throws IOException {
diff --git a/payment/src/main/java/org/killbill/billing/payment/core/sm/PaymentAutomatonRunner.java b/payment/src/main/java/org/killbill/billing/payment/core/sm/PaymentAutomatonRunner.java
index 49d48f6..eeeaba6 100644
--- a/payment/src/main/java/org/killbill/billing/payment/core/sm/PaymentAutomatonRunner.java
+++ b/payment/src/main/java/org/killbill/billing/payment/core/sm/PaymentAutomatonRunner.java
@@ -46,7 +46,6 @@ import org.killbill.billing.payment.api.PluginProperty;
import org.killbill.billing.payment.api.TransactionType;
import org.killbill.billing.payment.dao.PaymentDao;
import org.killbill.billing.payment.dao.PaymentModelDao;
-import org.killbill.billing.payment.dao.PaymentTransactionModelDao;
import org.killbill.billing.payment.dispatcher.PluginDispatcher;
import org.killbill.billing.payment.glue.PaymentModule;
import org.killbill.billing.payment.plugin.api.PaymentPluginApi;
@@ -112,7 +111,7 @@ public class PaymentAutomatonRunner {
if (paymentId != null) {
final PaymentModelDao paymentModelDao = daoHelper.getPayment();
effectivePaymentMethodId = paymentModelDao.getPaymentMethodId();
- currentStateName = paymentModelDao.getLastSuccessStateName() != null ? paymentModelDao.getLastSuccessStateName() : paymentSMHelper.getInitStateNameForTransaction(transactionType);
+ currentStateName = paymentModelDao.getLastSuccessStateName() != null ? paymentModelDao.getLastSuccessStateName() : paymentSMHelper.getInitStateNameForTransaction();
// Check for illegal states (should never happen)
Preconditions.checkState(currentStateName != null, "State name cannot be null for payment " + paymentId);
@@ -121,7 +120,7 @@ public class PaymentAutomatonRunner {
// If the payment method is not specified, retrieve the default one on the account; it could still be null, in which case
//
effectivePaymentMethodId = paymentMethodId != null ? paymentMethodId : account.getPaymentMethodId();
- currentStateName = paymentSMHelper.getInitStateNameForTransaction(transactionType);
+ currentStateName = paymentSMHelper.getInitStateNameForTransaction();
}
paymentStateContext.setPaymentMethodId(effectivePaymentMethodId);
@@ -183,7 +182,7 @@ public class PaymentAutomatonRunner {
initialState.runOperation(operation, operationCallback, enteringStateCallback, leavingStateCallback);
} catch (final MissingEntryException e) {
- throw new PaymentApiException(e.getCause(), ErrorCode.PAYMENT_INTERNAL_ERROR, Objects.firstNonNull(e.getMessage(), ""));
+ throw new PaymentApiException(e.getCause(), ErrorCode.PAYMENT_INVALID_OPERATION, transactionType, initialStateName);
} catch (final OperationException e) {
if (e.getCause() == null) {
throw new PaymentApiException(e, ErrorCode.PAYMENT_INTERNAL_ERROR, Objects.firstNonNull(e.getMessage(), ""));
diff --git a/payment/src/main/java/org/killbill/billing/payment/core/sm/PaymentStateMachineHelper.java b/payment/src/main/java/org/killbill/billing/payment/core/sm/PaymentStateMachineHelper.java
index 009d70b..763ec9c 100644
--- a/payment/src/main/java/org/killbill/billing/payment/core/sm/PaymentStateMachineHelper.java
+++ b/payment/src/main/java/org/killbill/billing/payment/core/sm/PaymentStateMachineHelper.java
@@ -35,6 +35,7 @@ import com.google.common.collect.Iterables;
public class PaymentStateMachineHelper {
+ private static final String BIG_BANG_STATE_MACHINE_NAME = "BIG_BANG";
private static final String AUTHORIZE_STATE_MACHINE_NAME = "AUTHORIZE";
private static final String CAPTURE_STATE_MACHINE_NAME = "CAPTURE";
private static final String PURCHASE_STATE_MACHINE_NAME = "PURCHASE";
@@ -43,6 +44,8 @@ public class PaymentStateMachineHelper {
private static final String VOID_STATE_MACHINE_NAME = "VOID";
private static final String CHARGEBACK_STATE_MACHINE_NAME = "CHARGEBACK";
+
+ private static final String BIG_BANG_INIT_STATE_NAME = "BIG_BANG_INIT";
private static final String AUTHORIZE_INIT_STATE_NAME = "AUTH_INIT";
private static final String CAPTURE_INIT_STATE_NAME = "CAPTURE_INIT";
private static final String PURCHASE_INIT_STATE_NAME = "PURCHASE_INIT";
@@ -63,25 +66,8 @@ public class PaymentStateMachineHelper {
return stateMachine.getState(stateName);
}
- public String getInitStateNameForTransaction(final TransactionType transactionType) {
- switch (transactionType) {
- case AUTHORIZE:
- return AUTHORIZE_INIT_STATE_NAME;
- case CAPTURE:
- return CAPTURE_INIT_STATE_NAME;
- case PURCHASE:
- return PURCHASE_INIT_STATE_NAME;
- case REFUND:
- return REFUND_INIT_STATE_NAME;
- case CREDIT:
- return CREDIT_INIT_STATE_NAME;
- case VOID:
- return VOID_INIT_STATE_NAME;
- case CHARGEBACK:
- return CHARGEBACK_INIT_STATE_NAME;
- default:
- throw new IllegalStateException("Unsupported transaction type " + transactionType + " for null payment id");
- }
+ public String getInitStateNameForTransaction() {
+ return BIG_BANG_INIT_STATE_NAME;
}
public StateMachine getStateMachineForStateName(final String stateName) throws MissingEntryException {
diff --git a/payment/src/main/resources/org/killbill/billing/payment/PaymentStates.xml b/payment/src/main/resources/org/killbill/billing/payment/PaymentStates.xml
index c6f32d3..f4aeef9 100644
--- a/payment/src/main/resources/org/killbill/billing/payment/PaymentStates.xml
+++ b/payment/src/main/resources/org/killbill/billing/payment/PaymentStates.xml
@@ -19,6 +19,22 @@
xsi:noNamespaceSchemaLocation="StateMachineConfig.xsd">
<stateMachines>
+ <stateMachine name="BIG_BANG">
+ <states>
+ <state name="BIG_BANG_INIT"/>
+ </states>
+ <transitions>
+ <transition>
+ <initialState>BIG_BANG_INIT</initialState>
+ <operation>OP_DUMMY</operation>
+ <operationResult>SUCCESS</operationResult>
+ <finalState>BIG_BANG_INIT</finalState>
+ </transition>
+ </transitions>
+ <operations>
+ <operation name="OP_DUMMY"/>
+ </operations>
+ </stateMachine>
<stateMachine name="AUTHORIZE">
<states>
<state name="AUTH_INIT"/>
@@ -270,6 +286,24 @@
<linkStateMachines>
<linkStateMachine>
+ <initialStateMachine>BIG_BANG</initialStateMachine>
+ <initialState>BIG_BANG_INIT</initialState>
+ <finalStateMachine>AUTHORIZE</finalStateMachine>
+ <finalState>AUTH_INIT</finalState>
+ </linkStateMachine>
+ <linkStateMachine>
+ <initialStateMachine>BIG_BANG</initialStateMachine>
+ <initialState>BIG_BANG_INIT</initialState>
+ <finalStateMachine>PURCHASE</finalStateMachine>
+ <finalState>PURCHASE_INIT</finalState>
+ </linkStateMachine>
+ <linkStateMachine>
+ <initialStateMachine>BIG_BANG</initialStateMachine>
+ <initialState>BIG_BANG_INIT</initialState>
+ <finalStateMachine>CREDIT</finalStateMachine>
+ <finalState>CREDIT_INIT</finalState>
+ </linkStateMachine>
+ <linkStateMachine>
<initialStateMachine>AUTHORIZE</initialStateMachine>
<initialState>AUTH_SUCCESS</initialState>
<finalStateMachine>AUTHORIZE</finalStateMachine>
diff --git a/payment/src/test/java/org/killbill/billing/payment/api/TestPaymentApi.java b/payment/src/test/java/org/killbill/billing/payment/api/TestPaymentApi.java
index 6ef4484..ce075e3 100644
--- a/payment/src/test/java/org/killbill/billing/payment/api/TestPaymentApi.java
+++ b/payment/src/test/java/org/killbill/billing/payment/api/TestPaymentApi.java
@@ -35,6 +35,7 @@ import org.killbill.billing.payment.MockRecurringInvoiceItem;
import org.killbill.billing.payment.PaymentTestSuiteWithEmbeddedDB;
import org.killbill.billing.payment.control.InvoicePaymentControlPluginApi;
import org.killbill.billing.payment.dao.PaymentAttemptModelDao;
+import org.killbill.billing.payment.dao.PaymentSqlDao;
import org.killbill.billing.retry.plugin.api.PaymentControlApiException;
import org.killbill.bus.api.PersistentBus.EventBusException;
import org.testng.Assert;
@@ -78,7 +79,7 @@ public class TestPaymentApi extends PaymentTestSuiteWithEmbeddedDB {
final String transactionExternalKey = "krapaut";
final Payment payment = paymentApi.createPurchase(account, account.getPaymentMethodId(), null, requestedAmount, Currency.AED, paymentExternalKey, transactionExternalKey,
- ImmutableList.<PluginProperty>of(), callContext);
+ ImmutableList.<PluginProperty>of(), callContext);
assertEquals(payment.getExternalKey(), paymentExternalKey);
assertEquals(payment.getPaymentMethodId(), account.getPaymentMethodId());
@@ -559,6 +560,32 @@ public class TestPaymentApi extends PaymentTestSuiteWithEmbeddedDB {
}
}
+ @Test(groups = "slow")
+ public void testInvalidTransitionAfterFailure() throws PaymentApiException {
+
+ final BigDecimal requestedAmount = BigDecimal.TEN;
+
+ final String paymentExternalKey = "krapo";
+ final String transactionExternalKey = "grenouye";
+
+ final Payment payment = paymentApi.createAuthorization(account, account.getPaymentMethodId(), null, requestedAmount, Currency.EUR, paymentExternalKey, transactionExternalKey,
+ ImmutableList.<PluginProperty>of(), callContext);
+
+ // Hack the Database to make it look like it was a failure
+ paymentDao.updatePaymentAndTransactionOnCompletion(account.getId(), payment.getId(), TransactionType.AUTHORIZE, "AUTH_ERRORED", null,
+ payment.getTransactions().get(0).getId(), TransactionStatus.PLUGIN_FAILURE, null, null, null, null, internalCallContext);
+ PaymentSqlDao paymentSqlDao = dbi.onDemand(PaymentSqlDao.class);
+ paymentSqlDao.updateLastSuccessPaymentStateName(payment.getId().toString(), "AUTH_ERRORED", null, internalCallContext);
+
+ try {
+ paymentApi.createCapture(account, payment.getId(), requestedAmount, Currency.EUR, "tetard", ImmutableList.<PluginProperty>of(), callContext);
+ Assert.fail("Unexpected success");
+ } catch (PaymentApiException e){
+ Assert.assertEquals(e.getCode(), ErrorCode.PAYMENT_INVALID_OPERATION.getCode());
+ }
+ }
+
+
private List<PluginProperty> createPropertiesForInvoice(final Invoice invoice) {
diff --git a/util/src/main/java/org/killbill/billing/util/config/PaymentConfig.java b/util/src/main/java/org/killbill/billing/util/config/PaymentConfig.java
index 5cb3915..6100e6d 100644
--- a/util/src/main/java/org/killbill/billing/util/config/PaymentConfig.java
+++ b/util/src/main/java/org/killbill/billing/util/config/PaymentConfig.java
@@ -56,7 +56,7 @@ public interface PaymentConfig extends KillbillConfig {
public int getPluginFailureRetryMaxAttempts();
@Config("org.killbill.payment.plugin.timeout")
- @Default("5s")
+ @Default("30s")
@Description("Timeout for each payment attempt")
public TimeSpan getPaymentPluginTimeout();