killbill-uncached

Changes

Details

diff --git a/analytics/src/test/java/com/ning/billing/analytics/api/TestAnalyticsService.java b/analytics/src/test/java/com/ning/billing/analytics/api/TestAnalyticsService.java
index 852d4fc..abffae5 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/api/TestAnalyticsService.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/api/TestAnalyticsService.java
@@ -208,6 +208,7 @@ public class TestAnalyticsService {
                 plan,
                 phase,
                 priceList,
+                1L,
                 true
         );
         expectedTransition = new BusinessSubscriptionTransition(
diff --git a/analytics/src/test/java/com/ning/billing/analytics/TestAnalyticsListener.java b/analytics/src/test/java/com/ning/billing/analytics/TestAnalyticsListener.java
index 79bea58..6d8e587 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/TestAnalyticsListener.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/TestAnalyticsListener.java
@@ -144,6 +144,7 @@ public class TestAnalyticsListener
             plan,
             phase,
             priceList,
+            1L,
             true
         );
     }
@@ -169,6 +170,7 @@ public class TestAnalyticsListener
             null,
             null,
             null,
+            1L,
             true
         );
     }
@@ -197,6 +199,7 @@ public class TestAnalyticsListener
             plan,
             phase,
             priceList,
+            1L,
             true
         );
     }
diff --git a/api/src/main/java/com/ning/billing/entitlement/api/billing/BillingEvent.java b/api/src/main/java/com/ning/billing/entitlement/api/billing/BillingEvent.java
index 2628b36..8eb8ed8 100644
--- a/api/src/main/java/com/ning/billing/entitlement/api/billing/BillingEvent.java
+++ b/api/src/main/java/com/ning/billing/entitlement/api/billing/BillingEvent.java
@@ -79,13 +79,13 @@ public interface BillingEvent extends Comparable<BillingEvent> {
     public String getDescription();
 
     /**
-     * 
+     *
      * @return the fixed price for the phase
      */
     public InternationalPrice getFixedPrice();
 
     /**
-     * 
+     *
      * @return the recurring price for the phase
      */
     public InternationalPrice getRecurringPrice();
@@ -94,4 +94,10 @@ public interface BillingEvent extends Comparable<BillingEvent> {
 	 * @return the transition type of the underlying subscription event that triggered this
 	 */
 	public SubscriptionTransitionType getTransitionType();
+
+	/**
+	 * @return a unique long indicating the ordering on which events got inserted on disk-- used for sorting only
+	 */
+	public long getTotalOrdering();
+
 }
diff --git a/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestBasic.java b/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestBasic.java
index fad00af..178ad0f 100644
--- a/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestBasic.java
+++ b/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestBasic.java
@@ -238,25 +238,25 @@ public class TestBasic {
         assertTrue(ctd.compareTo(chargeThroughDate) == 0);
     }
 
-    @Test(groups = "fast", enabled = true)
+    @Test(groups = "slow", enabled = true)
     public void testBasePlanCompleteWithBillingDayInPast() throws Exception {
         DateTime startDate = new DateTime(2012, 2, 1, 0, 3, 42, 0);
         testBasePlanComplete(startDate, 31, false);
     }
 
-    @Test(groups = "fast", enabled = true)
+    @Test(groups = "slow", enabled = true)
     public void testBasePlanCompleteWithBillingDayPresent() throws Exception {
         DateTime startDate = new DateTime(2012, 2, 1, 0, 3, 42, 0);
         testBasePlanComplete(startDate, 1, false);
     }
 
-    @Test(groups = "fast", enabled = true)
+    @Test(groups = "slow", enabled = true)
     public void testBasePlanCompleteWithBillingDayAlignedWithTrial() throws Exception {
         DateTime startDate = new DateTime(2012, 2, 1, 0, 3, 42, 0);
         testBasePlanComplete(startDate, 2, false);
     }
 
-    @Test(groups = "fast", enabled = true)
+    @Test(groups = "slow", enabled = true)
     public void testBasePlanCompleteWithBillingDayInFuture() throws Exception {
         DateTime startDate = new DateTime(2012, 2, 1, 0, 3, 42, 0);
         testBasePlanComplete(startDate, 3, true);
@@ -266,7 +266,7 @@ public class TestBasic {
         Thread.sleep(600000);
     }
 
-    @Test(groups = "stress", enabled = true)
+    @Test(groups = "stress", enabled = false)
     public void stressTest() throws Exception {
         final int maxIterations = 7;
         for (int curIteration = 0; curIteration < maxIterations; curIteration++) {
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/billing/DefaultBillingEvent.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/billing/DefaultBillingEvent.java
index 11c5a79..3a8ce9a 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/billing/DefaultBillingEvent.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/billing/DefaultBillingEvent.java
@@ -28,6 +28,7 @@ import com.ning.billing.catalog.api.PlanPhase;
 import com.ning.billing.entitlement.api.user.Subscription;
 import com.ning.billing.entitlement.api.user.SubscriptionTransition;
 import com.ning.billing.entitlement.api.user.SubscriptionTransition.SubscriptionTransitionType;
+import com.ning.billing.entitlement.api.user.SubscriptionTransitionData;
 
 public class DefaultBillingEvent implements BillingEvent {
 	Logger log = LoggerFactory.getLogger(DefaultBillingEvent.class);
@@ -43,6 +44,7 @@ public class DefaultBillingEvent implements BillingEvent {
     final private BillingModeType billingModeType;
     final private BillingPeriod billingPeriod;
     final private SubscriptionTransitionType type;
+    final private long totalOrdering;
 
     public DefaultBillingEvent(SubscriptionTransition transition, Subscription subscription, int billCycleDay) {
         this.billCycleDay = billCycleDay;
@@ -61,11 +63,13 @@ public class DefaultBillingEvent implements BillingEvent {
         billingPeriod =  (transition.getTransitionType() != SubscriptionTransitionType.CANCEL) ?
                 transition.getNextPhase().getBillingPeriod() : transition.getPreviousPhase().getBillingPeriod();
         type = transition.getTransitionType();
+        totalOrdering = ((SubscriptionTransitionData) transition).getTotalOrdering();
     }
 
     // Intended for test only
     public DefaultBillingEvent(Subscription subscription, DateTime effectiveDate, Plan plan, PlanPhase planPhase, InternationalPrice fixedPrice,
-            InternationalPrice recurringPrice, BillingPeriod billingPeriod, int billCycleDay, BillingModeType billingModeType, String description, SubscriptionTransitionType type) {
+            InternationalPrice recurringPrice, BillingPeriod billingPeriod, int billCycleDay, BillingModeType billingModeType, String description,
+            long totalOrdering, SubscriptionTransitionType type) {
         this.subscription = subscription;
         this.effectiveDate = effectiveDate;
         this.plan = plan;
@@ -77,8 +81,10 @@ public class DefaultBillingEvent implements BillingEvent {
         this.billingModeType = billingModeType;
         this.description = description;
         this.type = type;
+        this.totalOrdering = totalOrdering;
     }
 
+
     @Override
     public int compareTo(BillingEvent e1) {
     	 if (!getSubscription().getId().equals(e1.getSubscription().getId())) { // First order by subscription
@@ -152,6 +158,11 @@ public class DefaultBillingEvent implements BillingEvent {
     }
 
     @Override
+    public long getTotalOrdering() {
+        return totalOrdering;
+    }
+
+    @Override
     public String toString() {
         StringBuilder sb = new StringBuilder();
         sb.append("BillingEvent {subscriptionId = ").append(subscription.getId().toString()).append(", ");
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionData.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionData.java
index 3699d88..138528d 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionData.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionData.java
@@ -475,6 +475,7 @@ public class SubscriptionData extends CustomizableEntityBase implements Subscrip
                         nextPlan,
                         nextPhase,
                         nextPriceList,
+                        cur.getTotalOrdering(),
                         isFromDisk);
             transitions.add(transition);
 
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionTransitionData.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionTransitionData.java
index fb8e2f2..f03193b 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionTransitionData.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionTransitionData.java
@@ -29,6 +29,7 @@ import java.util.UUID;
 public class SubscriptionTransitionData implements SubscriptionTransition {
 
 
+    private final long totalOrdering;
     private final UUID subscriptionId;
     private final UUID bundleId;
     private final UUID eventId;
@@ -49,7 +50,8 @@ public class SubscriptionTransitionData implements SubscriptionTransition {
     public SubscriptionTransitionData(UUID eventId, UUID subscriptionId, UUID bundleId, EventType eventType,
             ApiEventType apiEventType, DateTime requestedTransitionTime, DateTime effectiveTransitionTime,
             SubscriptionState previousState, Plan previousPlan, PlanPhase previousPhase, String previousPriceList,
-            SubscriptionState nextState, Plan nextPlan, PlanPhase nextPhase, String nextPriceList, boolean isFromDisk) {
+            SubscriptionState nextState, Plan nextPlan, PlanPhase nextPhase, String nextPriceList,
+            long totalOrdering, boolean isFromDisk) {
         super();
         this.eventId = eventId;
         this.subscriptionId = subscriptionId;
@@ -66,6 +68,7 @@ public class SubscriptionTransitionData implements SubscriptionTransition {
         this.nextPlan = nextPlan;
         this.nextPriceList = nextPriceList;
         this.nextPhase = nextPhase;
+        this.totalOrdering = totalOrdering;
         this.isFromDisk = isFromDisk;
     }
 
@@ -148,6 +151,10 @@ public class SubscriptionTransitionData implements SubscriptionTransition {
         return effectiveTransitionTime;
     }
 
+    public long getTotalOrdering() {
+        return totalOrdering;
+    }
+
     public boolean isFromDisk() {
         return isFromDisk;
     }
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EventSqlDao.java b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EventSqlDao.java
index 67c60c0..203877f 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EventSqlDao.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EventSqlDao.java
@@ -107,6 +107,7 @@ public interface EventSqlDao extends Transactional<EventSqlDao>, CloseMe, Transm
         public EntitlementEvent map(int index, ResultSet r, StatementContext ctx)
         throws SQLException {
 
+            long totalOrdering = r.getLong("id");
             UUID id = UUID.fromString(r.getString("event_id"));
             EventType eventType = EventType.valueOf(r.getString("event_type"));
             ApiEventType userType = (eventType == EventType.API_USER) ? ApiEventType.valueOf(r.getString("user_type")) : null;
@@ -123,6 +124,7 @@ public interface EventSqlDao extends Transactional<EventSqlDao>, CloseMe, Transm
             EventBaseBuilder<?> base = ((eventType == EventType.PHASE) ?
                     new PhaseEventBuilder() :
                         new ApiEventBuilder())
+                        .setTotalOrdering(totalOrdering)
                         .setUuid(id)
                         .setSubscriptionId(subscriptionId)
                         .setRequestedDate(requestedDate)
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/events/EntitlementEvent.java b/entitlement/src/main/java/com/ning/billing/entitlement/events/EntitlementEvent.java
index b7bfece..d3895c0 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/events/EntitlementEvent.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/events/EntitlementEvent.java
@@ -30,6 +30,8 @@ public interface EntitlementEvent extends Comparable<EntitlementEvent> {
 
     public EventType getType();
 
+    public long getTotalOrdering();
+
     public UUID getId();
 
     public long getActiveVersion();
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/events/EventBase.java b/entitlement/src/main/java/com/ning/billing/entitlement/events/EventBase.java
index 9420fbf..5861e5d 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/events/EventBase.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/events/EventBase.java
@@ -24,6 +24,7 @@ import java.util.UUID;
 
 public abstract class EventBase implements EntitlementEvent {
 
+    private final long totalOrdering;
     private final UUID uuid;
     private final UUID subscriptionId;
     private final DateTime requestedDate;
@@ -34,6 +35,7 @@ public abstract class EventBase implements EntitlementEvent {
     private boolean isActive;
 
     public EventBase(EventBaseBuilder<?> builder) {
+        this.totalOrdering = builder.getTotalOrdering();
         this.uuid = builder.getUuid();
         this.subscriptionId = builder.getSubscriptionId();
         this.requestedDate = builder.getRequestedDate();
@@ -43,7 +45,7 @@ public abstract class EventBase implements EntitlementEvent {
         this.activeVersion = builder.getActiveVersion();
         this.isActive = builder.isActive();
     }
-
+/*
     public EventBase(UUID subscriptionId, DateTime requestedDate,
             DateTime effectiveDate, DateTime processedDate,
             long activeVersion, boolean isActive) {
@@ -62,7 +64,7 @@ public abstract class EventBase implements EntitlementEvent {
         this.activeVersion = activeVersion;
         this.isActive = isActive;
     }
-
+*/
 
     @Override
     public DateTime getRequestedDate() {
@@ -85,11 +87,16 @@ public abstract class EventBase implements EntitlementEvent {
     }
 
     @Override
+    public long getTotalOrdering() {
+        return totalOrdering;
+    }
+
+
+    @Override
     public UUID getId() {
         return uuid;
     }
 
-
     @Override
     public long getActiveVersion() {
         return activeVersion;
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/events/EventBaseBuilder.java b/entitlement/src/main/java/com/ning/billing/entitlement/events/EventBaseBuilder.java
index 17f5e15..e74ea69 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/events/EventBaseBuilder.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/events/EventBaseBuilder.java
@@ -23,6 +23,7 @@ import java.util.UUID;
 @SuppressWarnings("unchecked")
 public class EventBaseBuilder<T extends EventBaseBuilder<T>> {
 
+    private long totalOrdering;
     private UUID uuid;
     private UUID subscriptionId;
     private DateTime requestedDate;
@@ -49,6 +50,11 @@ public class EventBaseBuilder<T extends EventBaseBuilder<T>> {
         this.isActive = copy.isActive;
     }
 
+    public T setTotalOrdering(long totalOrdering) {
+        this.totalOrdering = totalOrdering;
+        return (T) this;
+    }
+
     public T setUuid(UUID uuid) {
         this.uuid = uuid;
         return (T) this;
@@ -84,6 +90,10 @@ public class EventBaseBuilder<T extends EventBaseBuilder<T>> {
         return (T) this;
     }
 
+    public long getTotalOrdering() {
+        return totalOrdering;
+    }
+
     public UUID getUuid() {
         return uuid;
     }
diff --git a/entitlement/src/main/resources/com/ning/billing/entitlement/engine/dao/EventSqlDao.sql.stg b/entitlement/src/main/resources/com/ning/billing/entitlement/engine/dao/EventSqlDao.sql.stg
index 10f565d..b639dce 100644
--- a/entitlement/src/main/resources/com/ning/billing/entitlement/engine/dao/EventSqlDao.sql.stg
+++ b/entitlement/src/main/resources/com/ning/billing/entitlement/engine/dao/EventSqlDao.sql.stg
@@ -2,7 +2,8 @@ group EventSqlDao;
 
 getEventById(event_id) ::= <<
   select
-     event_id
+      id
+      , event_id
       , event_type
       , user_type
       , created_dt
@@ -82,7 +83,8 @@ reactiveEvent(event_id, now) ::= <<
 
 getFutureActiveEventForSubscription(subscription_id, now) ::= <<
     select 
-      event_id
+      id
+      , event_id
       , event_type
       , user_type
       , created_dt
@@ -110,7 +112,8 @@ getFutureActiveEventForSubscription(subscription_id, now) ::= <<
 
 getEventsForSubscription(subscription_id) ::= <<
     select
-      event_id
+       id
+      , event_id
       , event_type
       , user_type
       , created_dt
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/billing/TestDefaultBillingEvent.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/billing/TestDefaultBillingEvent.java
index fc3362a..63ac93b 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/billing/TestDefaultBillingEvent.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/billing/TestDefaultBillingEvent.java
@@ -135,7 +135,7 @@ public class TestDefaultBillingEvent {
 		return new DefaultBillingEvent(sub , effectiveDate,
 				shotgun, shotgunMonthly,
 				zeroPrice, null, BillingPeriod.NO_BILLING_PERIOD, billCycleDay,
-				BillingModeType.IN_ADVANCE, "Test Event 1", type);
+				BillingModeType.IN_ADVANCE, "Test Event 1", 1L, type);
 	}
 
 	private MockPlanPhase createMockMonthlyPlanPhase(@Nullable final BigDecimal recurringRate,
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/billing/TestDefaultEntitlementBillingApi.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/billing/TestDefaultEntitlementBillingApi.java
index 21ed6fa..a7d04ae 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/billing/TestDefaultEntitlementBillingApi.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/billing/TestDefaultEntitlementBillingApi.java
@@ -141,7 +141,7 @@ public class TestDefaultEntitlementBillingApi {
 		PlanPhase nextPhase = nextPlan.getAllPhases()[0]; // The trial has no billing period
 		String nextPriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
 		SubscriptionTransition t = new SubscriptionTransitionData(
-				zeroId, oneId, twoId, EventType.API_USER, ApiEventType.CREATE, then, now, null, null, null, null, SubscriptionState.ACTIVE, nextPlan, nextPhase, nextPriceList, true);
+				zeroId, oneId, twoId, EventType.API_USER, ApiEventType.CREATE, then, now, null, null, null, null, SubscriptionState.ACTIVE, nextPlan, nextPhase, nextPriceList, 1, true);
 		transitions.add(t);
 
 		AccountUserApi accountApi = new BrainDeadAccountUserApi(){
@@ -166,7 +166,7 @@ public class TestDefaultEntitlementBillingApi {
 		PlanPhase nextPhase = nextPlan.getAllPhases()[1];
 		String nextPriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
 		SubscriptionTransition t = new SubscriptionTransitionData(
-				zeroId, oneId, twoId, EventType.API_USER, ApiEventType.CREATE, then, now, null, null, null, null, SubscriptionState.ACTIVE, nextPlan, nextPhase, nextPriceList, true);
+				zeroId, oneId, twoId, EventType.API_USER, ApiEventType.CREATE, then, now, null, null, null, null, SubscriptionState.ACTIVE, nextPlan, nextPhase, nextPriceList, 1, true);
 		transitions.add(t);
 
 		Account account = BrainDeadProxyFactory.createBrainDeadProxyFor(Account.class);
@@ -188,18 +188,19 @@ public class TestDefaultEntitlementBillingApi {
 		PlanPhase nextPhase = nextPlan.getAllPhases()[1];
 		String nextPriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
 		SubscriptionTransition t = new SubscriptionTransitionData(
-				zeroId, oneId, twoId, EventType.API_USER, ApiEventType.CREATE, then, now, null, null, null, null, SubscriptionState.ACTIVE, nextPlan, nextPhase, nextPriceList, true);
+				zeroId, oneId, twoId, EventType.API_USER, ApiEventType.CREATE, then, now, null, null, null, null, SubscriptionState.ACTIVE, nextPlan, nextPhase, nextPriceList, 1, true);
 		transitions.add(t);
 
 		AccountUserApi accountApi = new BrainDeadAccountUserApi(){
 
-			@Override
-			public Account getAccountById(UUID accountId) {
-				return new BrainDeadAccount(){@Override
-				public int getBillCycleDay() {
-					return 32;
-				}};
-			}} ;
+		    @Override
+		    public Account getAccountById(UUID accountId) {
+		        return new BrainDeadAccount(){
+		            @Override
+		            public int getBillCycleDay() {
+		                return 32;
+		            }};
+		    }} ;
 		DefaultEntitlementBillingApi api = new DefaultEntitlementBillingApi(dao,accountApi,catalogService);
 		SortedSet<BillingEvent> events = api.getBillingEventsForAccount(new UUID(0L,0L));
 		checkFirstEvent(events, nextPlan, 32, oneId, now, nextPhase, ApiEventType.CREATE.toString());
@@ -213,7 +214,7 @@ public class TestDefaultEntitlementBillingApi {
 		PlanPhase nextPhase = nextPlan.getAllPhases()[0];
 		String nextPriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
 		SubscriptionTransition t = new SubscriptionTransitionData(
-				zeroId, oneId, twoId, EventType.API_USER, ApiEventType.CREATE, then, now, null, null, null, null, SubscriptionState.ACTIVE, nextPlan, nextPhase, nextPriceList, true);
+				zeroId, oneId, twoId, EventType.API_USER, ApiEventType.CREATE, then, now, null, null, null, null, SubscriptionState.ACTIVE, nextPlan, nextPhase, nextPriceList, 1, true);
 		transitions.add(t);
 
 		Account account = BrainDeadProxyFactory.createBrainDeadProxyFor(Account.class);
diff --git a/invoice/src/test/java/com/ning/billing/invoice/dao/InvoiceDaoTests.java b/invoice/src/test/java/com/ning/billing/invoice/dao/InvoiceDaoTests.java
index b46247a..755e510 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/dao/InvoiceDaoTests.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/dao/InvoiceDaoTests.java
@@ -516,7 +516,7 @@ public class InvoiceDaoTests extends InvoiceDaoTestBase {
         DateTime effectiveDate1 = new DateTime(2011, 2, 1, 0, 0, 0, 0);
         BillingEvent event1 = new DefaultBillingEvent(subscription, effectiveDate1, plan1, phase1, null,
                 recurringPrice, BillingPeriod.MONTHLY, 1, BillingModeType.IN_ADVANCE,
-                "testEvent1", SubscriptionTransitionType.CREATE);
+                "testEvent1", 1L,  SubscriptionTransitionType.CREATE);
 
         BillingEventSet events = new BillingEventSet();
         events.add(event1);
@@ -534,7 +534,7 @@ public class InvoiceDaoTests extends InvoiceDaoTestBase {
         DateTime effectiveDate2 = new DateTime(2011, 2, 15, 0, 0, 0, 0);
         BillingEvent event2 = new DefaultBillingEvent(subscription, effectiveDate2, plan2, phase2, null,
                 recurringPrice2, BillingPeriod.MONTHLY, 1, BillingModeType.IN_ADVANCE,
-                "testEvent2", SubscriptionTransitionType.CREATE);
+                "testEvent2", 1L, SubscriptionTransitionType.CREATE);
         events.add(event2);
 
         // second invoice should be for one half (14/28 days) the difference between the rate plans
@@ -566,7 +566,7 @@ public class InvoiceDaoTests extends InvoiceDaoTestBase {
 
         BillingEvent event = new DefaultBillingEvent(subscription, effectiveDate, plan, phase, null,
                 recurringPrice, BillingPeriod.MONTHLY, 15, BillingModeType.IN_ADVANCE,
-                "testEvent", SubscriptionTransitionType.CREATE);
+                "testEvent", 1L, SubscriptionTransitionType.CREATE);
         BillingEventSet events = new BillingEventSet();
         events.add(event);
 
@@ -598,7 +598,7 @@ public class InvoiceDaoTests extends InvoiceDaoTestBase {
 
         BillingEvent event1 = new DefaultBillingEvent(subscription, effectiveDate1, plan, phase1, fixedPrice,
                 null, BillingPeriod.MONTHLY, 1, BillingModeType.IN_ADVANCE,
-                "testEvent1", SubscriptionTransitionType.CREATE);
+                "testEvent1", 1L, SubscriptionTransitionType.CREATE);
         BillingEventSet events = new BillingEventSet();
         events.add(event1);
 
@@ -613,7 +613,7 @@ public class InvoiceDaoTests extends InvoiceDaoTestBase {
         DateTime effectiveDate2 = effectiveDate1.plusDays(30);
         BillingEvent event2 = new DefaultBillingEvent(subscription, effectiveDate2, plan, phase2, null,
                 recurringPrice, BillingPeriod.MONTHLY, 31, BillingModeType.IN_ADVANCE,
-                "testEvent2", SubscriptionTransitionType.CHANGE);
+                "testEvent2", 1L, SubscriptionTransitionType.CHANGE);
         events.add(event2);
 
         Invoice invoice2 = generator.generateInvoice(UUID.randomUUID(), events, existingItems, effectiveDate2, Currency.USD);
@@ -657,14 +657,14 @@ public class InvoiceDaoTests extends InvoiceDaoTestBase {
 
         BillingEvent event1 = new DefaultBillingEvent(subscription, effectiveDate1, plan, phase1, fixedPrice,
                 null, BillingPeriod.MONTHLY, 1, BillingModeType.IN_ADVANCE,
-                "testEvent1", SubscriptionTransitionType.CREATE);
+                "testEvent1", 1L, SubscriptionTransitionType.CREATE);
         BillingEventSet events = new BillingEventSet();
         events.add(event1);
 
         DateTime effectiveDate2 = effectiveDate1.plusDays(30);
         BillingEvent event2 = new DefaultBillingEvent(subscription, effectiveDate2, plan, phase2, null,
                 recurringPrice, BillingPeriod.MONTHLY, 31, BillingModeType.IN_ADVANCE,
-                "testEvent2", SubscriptionTransitionType.CHANGE);
+                "testEvent2", 1L, SubscriptionTransitionType.CHANGE);
         events.add(event2);
 
         InvoiceGenerator generator = new DefaultInvoiceGenerator(clock);
diff --git a/invoice/src/test/java/com/ning/billing/invoice/TestInvoiceDispatcher.java b/invoice/src/test/java/com/ning/billing/invoice/TestInvoiceDispatcher.java
index 987dd4d..54597f7 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/TestInvoiceDispatcher.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/TestInvoiceDispatcher.java
@@ -69,13 +69,13 @@ public class TestInvoiceDispatcher {
     private InvoiceDao invoiceDao;
     @Inject
     private GlobalLocker locker;
-    
+
     @Inject
     private MysqlTestingHelper helper;
-    
+
     @Inject
     NextBillingDateNotifier notifier;
-    
+
     @Inject
     private BusService busService;
 
@@ -101,7 +101,7 @@ public class TestInvoiceDispatcher {
         helper.initDb(utilDdl);
         notifier.initialize();
         notifier.start();
-        
+
         busService.getBus().start();
     }
 
@@ -116,7 +116,7 @@ public class TestInvoiceDispatcher {
 	    	((ZombieControl)accountUserApi).addResult("getAccountById", account);
 	    	((ZombieControl)account).addResult("getCurrency", Currency.USD);
 	    	((ZombieControl)account).addResult("getId", accountId);
-	    	
+
 	    	Subscription subscription =  BrainDeadProxyFactory.createBrainDeadProxyFor(Subscription.class);
 	    	((ZombieControl)subscription).addResult("getId", subscriptionId);
 	    	SortedSet<BillingEvent> events = new TreeSet<BillingEvent>();
@@ -125,34 +125,34 @@ public class TestInvoiceDispatcher {
 			DateTime effectiveDate = new DateTime().minusDays(1);
 			InternationalPrice reccurringPrice = MockInternationalPrice.create1USD();
 			InternationalPrice fixedPrice = null;
-			events.add(new DefaultBillingEvent(subscription, effectiveDate,plan,planPhase, fixedPrice , reccurringPrice, BillingPeriod.MONTHLY, 1, BillingModeType.IN_ADVANCE,"", SubscriptionTransitionType.CREATE));
+			events.add(new DefaultBillingEvent(subscription, effectiveDate,plan,planPhase, fixedPrice , reccurringPrice, BillingPeriod.MONTHLY, 1, BillingModeType.IN_ADVANCE,"", 1L, SubscriptionTransitionType.CREATE));
 	    	EntitlementBillingApi entitlementBillingApi = BrainDeadProxyFactory.createBrainDeadProxyFor(EntitlementBillingApi.class);
 	    	((ZombieControl)entitlementBillingApi).addResult("getBillingEventsForAccount", events);
-	    	
-	    	
+
+
 	    	DateTime target = new DateTime();
-	    	
+
 	    	InvoiceDispatcher dispatcher = new InvoiceDispatcher(generator, accountUserApi, entitlementBillingApi, invoiceDao, locker);
-	    	
+
 	    	Invoice invoice = dispatcher.processAccount(accountId, target, true);
 	    	Assert.assertNotNull(invoice);
-	    	
+
 	    	List<Invoice> invoices = invoiceDao.getInvoicesByAccount(accountId);
 	    	Assert.assertEquals(invoices.size(),0);
-	    	
+
 	    	// Try it again to double check
 	    	invoice = dispatcher.processAccount(accountId, target, true);
 	    	Assert.assertNotNull(invoice);
-	    	
+
 	    	invoices = invoiceDao.getInvoicesByAccount(accountId);
 	    	Assert.assertEquals(invoices.size(),0);
-	    	
+
 	    	// This time no dry run
 	    	invoice = dispatcher.processAccount(accountId, target, false);
 	    	Assert.assertNotNull(invoice);
-	    	
+
 	    	invoices = invoiceDao.getInvoicesByAccount(accountId);
 	    	Assert.assertEquals(invoices.size(),1);
-	    	
+
 	    }
 }
diff --git a/invoice/src/test/java/com/ning/billing/invoice/tests/DefaultInvoiceGeneratorTests.java b/invoice/src/test/java/com/ning/billing/invoice/tests/DefaultInvoiceGeneratorTests.java
index e633755..6b95ae5 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/tests/DefaultInvoiceGeneratorTests.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/tests/DefaultInvoiceGeneratorTests.java
@@ -470,13 +470,13 @@ public class DefaultInvoiceGeneratorTests extends InvoicingTestBase {
         BillingEvent event1 = new DefaultBillingEvent(subscription, new DateTime("2012-01-1T00:00:00.000-08:00"),
                                                       plan, phase1,
                                                       zeroPrice, null, BillingPeriod.NO_BILLING_PERIOD, 1,
-                                                      BillingModeType.IN_ADVANCE, "Test Event 1",
+                                                      BillingModeType.IN_ADVANCE, "Test Event 1", 1L,
                                                       SubscriptionTransitionType.CREATE);
 
         BillingEvent event2 = new DefaultBillingEvent(subscription, changeDate,
                                                       plan, phase2,
                                                       zeroPrice, null, BillingPeriod.NO_BILLING_PERIOD, 1,
-                                                      BillingModeType.IN_ADVANCE, "Test Event 2",
+                                                      BillingModeType.IN_ADVANCE, "Test Event 2", 1L,
                                                       SubscriptionTransitionType.PHASE);
 
         events.add(event2);
@@ -597,7 +597,7 @@ public class DefaultInvoiceGeneratorTests extends InvoicingTestBase {
         return new DefaultBillingEvent(sub, startDate, plan, planPhase,
                                        planPhase.getFixedPrice(),
                                        planPhase.getRecurringPrice(), planPhase.getBillingPeriod(),
-                                       billCycleDay, BillingModeType.IN_ADVANCE,"Test", SubscriptionTransitionType.CREATE);
+                                       billCycleDay, BillingModeType.IN_ADVANCE,"Test", 1L, SubscriptionTransitionType.CREATE);
     }
 
     private void testInvoiceGeneration(final BillingEventSet events, final InvoiceItemList existingInvoiceItems,