killbill-uncached

account: don't update the default payment method if it hasn't

6/11/2013 3:23:46 PM

Details

diff --git a/account/src/main/java/com/ning/billing/account/dao/DefaultAccountDao.java b/account/src/main/java/com/ning/billing/account/dao/DefaultAccountDao.java
index 6070945..e77b523 100644
--- a/account/src/main/java/com/ning/billing/account/dao/DefaultAccountDao.java
+++ b/account/src/main/java/com/ning/billing/account/dao/DefaultAccountDao.java
@@ -161,6 +161,13 @@ public class DefaultAccountDao extends EntityDaoBase<AccountModelDao, Account, A
                 if (currentAccount == null) {
                     throw new EntityPersistenceException(ErrorCode.ACCOUNT_DOES_NOT_EXIST_FOR_ID, accountId);
                 }
+
+                // Check if an update is really needed. If not, bail early to avoid sending an extra event on the bus
+                if ((currentAccount.getPaymentMethodId() == null && paymentMethodId == null) ||
+                    (currentAccount.getPaymentMethodId() != null && currentAccount.getPaymentMethodId().equals(paymentMethodId))) {
+                    return null;
+                }
+
                 final String thePaymentMethodId = paymentMethodId != null ? paymentMethodId.toString() : null;
                 transactional.updatePaymentMethod(accountId.toString(), thePaymentMethodId, context);
 
diff --git a/payment/src/main/java/com/ning/billing/payment/core/PaymentMethodProcessor.java b/payment/src/main/java/com/ning/billing/payment/core/PaymentMethodProcessor.java
index 7ce25cf..007a773 100644
--- a/payment/src/main/java/com/ning/billing/payment/core/PaymentMethodProcessor.java
+++ b/payment/src/main/java/com/ning/billing/payment/core/PaymentMethodProcessor.java
@@ -363,6 +363,7 @@ public class PaymentMethodProcessor extends ProcessorBase {
             return;
         }
 
+        // Note that the code below is a no-op if the default payment method hasn't changed
         if (defaultPaymentMethodId != null) {
             accountInternalApi.updatePaymentMethod(account.getId(), defaultPaymentMethodId, context);
         } else {