killbill-uncached

api updates and unit tests

12/16/2011 9:40:17 PM

Changes

account/pom.xml 2(+1 -1)

api/pom.xml 2(+1 -1)

beatrix/pom.xml 2(+1 -1)

catalog/pom.xml 2(+1 -1)

invoice/pom.xml 2(+1 -1)

payment/pom.xml 2(+1 -1)

pom.xml 2(+1 -1)

util/pom.xml 2(+1 -1)

Details

account/pom.xml 2(+1 -1)

diff --git a/account/pom.xml b/account/pom.xml
index 01b61f9..c4aad73 100644
--- a/account/pom.xml
+++ b/account/pom.xml
@@ -13,7 +13,7 @@
     <parent>
         <groupId>com.ning.billing</groupId>
         <artifactId>killbill</artifactId>
-        <version>0.0.18-SNAPSHOT</version>
+        <version>0.0.18-SNAPSHOT2</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
     <artifactId>killbill-account</artifactId>
diff --git a/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountUserApi.java b/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountUserApi.java
index 497d139..a20a519 100644
--- a/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountUserApi.java
+++ b/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountUserApi.java
@@ -55,6 +55,11 @@ public class DefaultAccountUserApi implements com.ning.billing.account.api.Accou
     }
 
     @Override
+    public UUID getIdFromKey(String externalKey) {
+        return dao.getIdFromKey(externalKey);
+    }
+
+    @Override
     public void saveAccount(Account account) {
         dao.save(account);
     }
diff --git a/account/src/main/java/com/ning/billing/account/dao/AccountDao.java b/account/src/main/java/com/ning/billing/account/dao/AccountDao.java
index 52d43ab..04b50e3 100644
--- a/account/src/main/java/com/ning/billing/account/dao/AccountDao.java
+++ b/account/src/main/java/com/ning/billing/account/dao/AccountDao.java
@@ -16,9 +16,12 @@
 
 package com.ning.billing.account.dao;
 
+import java.util.UUID;
 import com.ning.billing.account.api.Account;
 import com.ning.billing.util.entity.EntityDao;
 
 public interface AccountDao extends EntityDao<Account> {
     public Account getAccountByKey(String key);
+
+    public UUID getIdFromKey(String externalKey);
 }
diff --git a/account/src/main/java/com/ning/billing/account/dao/AccountSqlDao.java b/account/src/main/java/com/ning/billing/account/dao/AccountSqlDao.java
index 4c2a550..2676753 100644
--- a/account/src/main/java/com/ning/billing/account/dao/AccountSqlDao.java
+++ b/account/src/main/java/com/ning/billing/account/dao/AccountSqlDao.java
@@ -17,9 +17,9 @@
 package com.ning.billing.account.dao;
 
 import com.ning.billing.account.api.Account;
-import com.ning.billing.account.api.AccountData;
 import com.ning.billing.account.api.user.AccountBuilder;
 import com.ning.billing.catalog.api.Currency;
+import com.ning.billing.util.UuidMapper;
 import com.ning.billing.util.entity.EntityDao;
 import org.skife.jdbi.v2.SQLStatement;
 import org.skife.jdbi.v2.StatementContext;
@@ -45,11 +45,14 @@ import java.sql.SQLException;
 import java.util.UUID;
 
 @ExternalizedSqlViaStringTemplate3
-@RegisterMapper(AccountSqlDao.AccountMapper.class)
+@RegisterMapper({UuidMapper.class, AccountSqlDao.AccountMapper.class})
 public interface AccountSqlDao extends EntityDao<Account>, Transactional<AccountSqlDao>, Transmogrifier {
     @SqlQuery
     public Account getAccountByKey(@Bind("externalKey") final String key);
 
+    @SqlQuery
+    public UUID getIdFromKey(@Bind("externalKey") final String key);
+
     @Override
     @SqlUpdate
     public void save(@AccountBinder Account account);
@@ -81,8 +84,8 @@ public interface AccountSqlDao extends EntityDao<Account>, Transactional<Account
     public @interface AccountBinder {
         public static class AccountBinderFactory implements BinderFactory {
             public Binder build(Annotation annotation) {
-                return new Binder<AccountBinder, AccountData>() {
-                    public void bind(SQLStatement q, AccountBinder bind, AccountData account) {
+                return new Binder<AccountBinder, Account>() {
+                    public void bind(SQLStatement q, AccountBinder bind, Account account) {
                         q.bind("id", account.getId().toString());
                         q.bind("externalKey", account.getExternalKey());
                         q.bind("email", account.getEmail());
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 3df35c9..c108bb4 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
@@ -17,6 +17,7 @@
 package com.ning.billing.account.dao;
 
 import java.util.List;
+import java.util.UUID;
 import org.skife.jdbi.v2.IDBI;
 import org.skife.jdbi.v2.Transaction;
 import org.skife.jdbi.v2.TransactionStatus;
@@ -28,7 +29,6 @@ import com.ning.billing.account.api.DefaultAccount;
 import com.ning.billing.account.api.user.DefaultAccountChangeNotification;
 import com.ning.billing.account.api.user.DefaultAccountCreationEvent;
 import com.ning.billing.util.customfield.CustomField;
-import com.ning.billing.util.customfield.FieldStore;
 import com.ning.billing.util.customfield.dao.FieldStoreDao;
 import com.ning.billing.util.eventbus.EventBus;
 import com.ning.billing.util.tag.Tag;
@@ -55,10 +55,10 @@ public class DefaultAccountDao implements AccountDao {
                     FieldStoreDao fieldStoreDao = accountSqlDao.become(FieldStoreDao.class);
                     List<CustomField> fields = fieldStoreDao.load(account.getId().toString(), account.getObjectName());
 
-                    account.getFields().clear();
+                    account.clearFields();
                     if (fields != null) {
                         for (CustomField field : fields) {
-                            account.getFields().setValue(field.getName(), field.getValue());
+                            account.setFieldValue(field.getName(), field.getValue());
                         }
                     }
 
@@ -77,6 +77,11 @@ public class DefaultAccountDao implements AccountDao {
     }
 
     @Override
+    public UUID getIdFromKey(final String externalKey) {
+        return accountDao.getIdFromKey(externalKey);
+    }
+
+    @Override
     public Account getById(final String id) {
         return accountDao.inTransaction(new Transaction<Account, AccountSqlDao>() {
             @Override
@@ -87,10 +92,10 @@ public class DefaultAccountDao implements AccountDao {
                     FieldStoreDao fieldStoreDao = accountSqlDao.become(FieldStoreDao.class);
                     List<CustomField> fields = fieldStoreDao.load(account.getId().toString(), account.getObjectName());
 
-                    account.getFields().clear();
+                    account.clearFields();
                     if (fields != null) {
                         for (CustomField field : fields) {
-                            account.getFields().setValue(field.getName(), field.getValue());
+                            account.setFieldValue(field.getName(), field.getValue());
                         }
                     }
 
@@ -129,9 +134,8 @@ public class DefaultAccountDao implements AccountDao {
                 Account currentAccount = accountDao.getById(accountId);
                 accountDao.save(account);
 
-                FieldStore fieldStore = account.getFields();
                 FieldStoreDao fieldStoreDao = accountDao.become(FieldStoreDao.class);
-                fieldStoreDao.save(accountId, objectType, fieldStore.getEntityList());
+                fieldStoreDao.save(accountId, objectType, account.getFieldList());
 
                 TagStoreDao tagStoreDao = fieldStoreDao.become(TagStoreDao.class);
                 tagStoreDao.save(accountId, objectType, account.getTagList());
diff --git a/account/src/main/resources/com/ning/billing/account/dao/AccountSqlDao.sql.stg b/account/src/main/resources/com/ning/billing/account/dao/AccountSqlDao.sql.stg
index 33d60b8..b92dcd9 100644
--- a/account/src/main/resources/com/ning/billing/account/dao/AccountSqlDao.sql.stg
+++ b/account/src/main/resources/com/ning/billing/account/dao/AccountSqlDao.sql.stg
@@ -27,6 +27,12 @@ get() ::= <<
     from accounts;
 >>
 
+getIdFromKey() ::= <<
+    select id
+    from accounts
+    where external_key = :externalKey;
+>>
+
 test() ::= <<
     select 1 from accounts;
 >>
diff --git a/account/src/test/java/com/ning/billing/account/dao/TestSimpleAccountDao.java b/account/src/test/java/com/ning/billing/account/dao/TestSimpleAccountDao.java
index 0deec50..c024f22 100644
--- a/account/src/test/java/com/ning/billing/account/dao/TestSimpleAccountDao.java
+++ b/account/src/test/java/com/ning/billing/account/dao/TestSimpleAccountDao.java
@@ -21,6 +21,7 @@ import java.util.UUID;
 import org.joda.time.DateTime;
 import org.testng.annotations.Test;
 import com.ning.billing.account.api.Account;
+import com.ning.billing.account.api.AccountData;
 import com.ning.billing.account.api.DefaultAccount;
 import com.ning.billing.util.tag.DefaultTagDescription;
 import com.ning.billing.util.tag.Tag;
@@ -129,4 +130,68 @@ public class TestSimpleAccountDao extends AccountDaoTestBase {
         assertEquals(tag.getAddedBy(), addedBy);
         assertEquals(tag.getDateAdded().compareTo(dateAdded), 0);
     }
+
+    @Test
+    public void testGetIdFromKey() {
+        Account account = createTestAccount();
+        accountDao.save(account);
+
+        UUID accountId = accountDao.getIdFromKey(account.getExternalKey());
+        assertEquals(accountId, account.getId());
+    }
+
+    @Test
+    public void testUpdate() {
+        final Account account = createTestAccount();
+        accountDao.save(account);
+
+        AccountData accountData = new AccountData() {
+            @Override
+            public String getExternalKey() {
+                return account.getExternalKey();
+            }
+            @Override
+            public String getName() {
+                return "Jane Doe";
+            }
+            @Override
+            public int getFirstNameLength() {
+                return 4;
+            }
+            @Override
+            public String getEmail() {
+                return account.getEmail();
+            }
+            @Override
+            public String getPhone() {
+                return account.getPhone();
+            }
+            @Override
+            public int getBillCycleDay() {
+                return account.getBillCycleDay();
+            }
+            @Override
+            public Currency getCurrency() {
+                return account.getCurrency();
+            }
+            @Override
+            public String getPaymentProviderName() {
+                return account.getPaymentProviderName();
+            }
+        };
+
+        Account updatedAccount = new DefaultAccount(account.getId(), accountData);
+        accountDao.save(updatedAccount);
+
+        Account savedAccount = accountDao.getAccountByKey(account.getExternalKey());
+
+        assertNotNull(savedAccount);
+        assertEquals(savedAccount.getName(), updatedAccount.getName());
+        assertEquals(savedAccount.getEmail(), updatedAccount.getEmail());
+        assertEquals(savedAccount.getPhone(), updatedAccount.getPhone());
+        assertEquals(savedAccount.getPaymentProviderName(), updatedAccount.getPaymentProviderName());
+        assertEquals(savedAccount.getBillCycleDay(), updatedAccount.getBillCycleDay());
+        assertEquals(savedAccount.getFirstNameLength(), updatedAccount.getFirstNameLength());
+
+    }
 }
diff --git a/analytics/pom.xml b/analytics/pom.xml
index 692fded..78da905 100644
--- a/analytics/pom.xml
+++ b/analytics/pom.xml
@@ -13,7 +13,7 @@
     <parent>
         <groupId>com.ning.billing</groupId>
         <artifactId>killbill</artifactId>
-        <version>0.0.18-SNAPSHOT</version>
+        <version>0.0.18-SNAPSHOT2</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
     <artifactId>killbill-analytics</artifactId>
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 b192698..17b6a29 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
@@ -85,7 +85,7 @@ public class TestAnalyticsService
         // We need a bundle to retrieve the event key
         final MockAccount account = new MockAccount(UUID.randomUUID(), ACCOUNT_KEY, Currency.USD);
         final Account storedAccount = accountApi.createAccount(account);
-        final SubscriptionBundle bundle = entitlementApi.createBundleForAccount(storedAccount, KEY);
+        final SubscriptionBundle bundle = entitlementApi.createBundleForAccount(storedAccount.getId(), KEY);
 
         // Verify we correctly initialized the account subsystem
         Assert.assertNotNull(bundle);
diff --git a/analytics/src/test/java/com/ning/billing/analytics/MockAccount.java b/analytics/src/test/java/com/ning/billing/analytics/MockAccount.java
index dbb7f8a..227a83e 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/MockAccount.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/MockAccount.java
@@ -16,11 +16,19 @@
 
 package com.ning.billing.analytics;
 
+import sun.reflect.generics.reflectiveObjects.NotImplementedException;
+
+import java.util.List;
 import java.util.UUID;
+import org.joda.time.DateTime;
+import com.ning.billing.account.api.Account;
 import com.ning.billing.account.api.AccountData;
 import com.ning.billing.catalog.api.Currency;
+import com.ning.billing.util.customfield.CustomField;
+import com.ning.billing.util.tag.Tag;
+import com.ning.billing.util.tag.TagDescription;
 
-public class MockAccount implements AccountData
+public class MockAccount implements Account
 {
     private final UUID id;
     private final String accountKey;
@@ -83,4 +91,69 @@ public class MockAccount implements AccountData
     {
         return id;
     }
+
+    @Override
+    public String getFieldValue(String fieldName) {
+        throw new NotImplementedException();
+    }
+
+    @Override
+    public void setFieldValue(String fieldName, String fieldValue) {
+        throw new NotImplementedException();
+    }
+
+    @Override
+    public List<CustomField> getFieldList() {
+        throw new NotImplementedException();
+    }
+
+    @Override
+    public void clearFields() {
+        throw new NotImplementedException();
+    }
+
+    @Override
+    public String getObjectName() {
+        throw new NotImplementedException();
+    }
+
+    @Override
+    public List<Tag> getTagList() {
+        throw new NotImplementedException();
+    }
+
+    @Override
+    public boolean hasTag(String tagName) {
+        throw new NotImplementedException();
+    }
+
+    @Override
+    public void addTag(TagDescription description, String addedBy, DateTime dateAdded) {
+        throw new NotImplementedException();
+    }
+
+    @Override
+    public void addTags(List<Tag> tags) {
+        throw new NotImplementedException();
+    }
+
+    @Override
+    public void clearTags() {
+        throw new NotImplementedException();
+    }
+
+    @Override
+    public void removeTag(TagDescription description) {
+        throw new NotImplementedException();
+    }
+
+    @Override
+    public boolean generateInvoice() {
+        throw new NotImplementedException();
+    }
+
+    @Override
+    public boolean processPayment() {
+        throw new NotImplementedException();
+    }
 }
diff --git a/analytics/src/test/java/com/ning/billing/analytics/MockIAccountUserApi.java b/analytics/src/test/java/com/ning/billing/analytics/MockIAccountUserApi.java
index 4982fe2..4c39456 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/MockIAccountUserApi.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/MockIAccountUserApi.java
@@ -29,10 +29,12 @@ import com.ning.billing.catalog.api.Currency;
 public class MockIAccountUserApi implements AccountUserApi
 {
     private final AccountData account;
+    private final UUID id;
 
     public MockIAccountUserApi(final String accountKey, final Currency currency)
     {
-        account = new MockAccount(UUID.randomUUID(), accountKey, currency);
+        this.id = UUID.randomUUID();
+        account = new MockAccount(id, accountKey, currency);
     }
 
     @Override
@@ -63,4 +65,9 @@ public class MockIAccountUserApi implements AccountUserApi
     {
         throw new UnsupportedOperationException();
     }
+
+    @Override
+    public UUID getIdFromKey(String externalKey) {
+        return id;
+    }
 }
diff --git a/analytics/src/test/java/com/ning/billing/analytics/MockIEntitlementUserApi.java b/analytics/src/test/java/com/ning/billing/analytics/MockIEntitlementUserApi.java
index 47ce151..3017413 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/MockIEntitlementUserApi.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/MockIEntitlementUserApi.java
@@ -93,7 +93,7 @@ public class MockIEntitlementUserApi implements EntitlementUserApi
     }
 
     @Override
-    public SubscriptionBundle createBundleForAccount(final AccountData account, final String bundleKey) throws EntitlementUserApiException
+    public SubscriptionBundle createBundleForAccount(final UUID accountId, final String bundleKey) throws EntitlementUserApiException
     {
         throw new UnsupportedOperationException();
     }

api/pom.xml 2(+1 -1)

diff --git a/api/pom.xml b/api/pom.xml
index 013feb9..8ec5231 100644
--- a/api/pom.xml
+++ b/api/pom.xml
@@ -13,7 +13,7 @@
     <parent>
         <groupId>com.ning.billing</groupId>
         <artifactId>killbill</artifactId>
-        <version>0.0.18-SNAPSHOT</version>
+        <version>0.0.18-SNAPSHOT2</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
     <artifactId>killbill-api</artifactId>
diff --git a/api/src/main/java/com/ning/billing/account/api/AccountData.java b/api/src/main/java/com/ning/billing/account/api/AccountData.java
index 87d71c1..9b8f399 100644
--- a/api/src/main/java/com/ning/billing/account/api/AccountData.java
+++ b/api/src/main/java/com/ning/billing/account/api/AccountData.java
@@ -19,7 +19,7 @@ package com.ning.billing.account.api;
 import com.ning.billing.catalog.api.Currency;
 import com.ning.billing.util.entity.Entity;
 
-public interface AccountData extends Entity {
+public interface AccountData {
 
     public String getExternalKey();
 
diff --git a/api/src/main/java/com/ning/billing/account/api/AccountUserApi.java b/api/src/main/java/com/ning/billing/account/api/AccountUserApi.java
index 879f642..b34d9a3 100644
--- a/api/src/main/java/com/ning/billing/account/api/AccountUserApi.java
+++ b/api/src/main/java/com/ning/billing/account/api/AccountUserApi.java
@@ -27,7 +27,9 @@ public interface AccountUserApi {
 
     public Account getAccountByKey(String key);
 
-    public Account getAccountById(UUID uid);
+    public Account getAccountById(UUID accountId);
 
     public List<Account> getAccounts();
+
+    public UUID getIdFromKey(String externalKey);
 }
diff --git a/api/src/main/java/com/ning/billing/entitlement/api/user/EntitlementUserApi.java b/api/src/main/java/com/ning/billing/entitlement/api/user/EntitlementUserApi.java
index 10f8591..1f431ed 100644
--- a/api/src/main/java/com/ning/billing/entitlement/api/user/EntitlementUserApi.java
+++ b/api/src/main/java/com/ning/billing/entitlement/api/user/EntitlementUserApi.java
@@ -36,10 +36,9 @@ public interface EntitlementUserApi {
 
     public List<Subscription> getSubscriptionsForKey(String bundleKey);
 
-    public SubscriptionBundle createBundleForAccount(AccountData account, String bundleKey)
+    public SubscriptionBundle createBundleForAccount(UUID accountId, String bundleKey)
         throws EntitlementUserApiException;
 
-
     public Subscription createSubscription(UUID bundleId, String productName, BillingPeriod term, String priceList, PhaseType initialPhase, DateTime requestedDate)
         throws EntitlementUserApiException;
 }
diff --git a/api/src/main/java/com/ning/billing/util/customfield/CustomizableEntity.java b/api/src/main/java/com/ning/billing/util/customfield/CustomizableEntity.java
index 6ed8192..7b8f37a 100644
--- a/api/src/main/java/com/ning/billing/util/customfield/CustomizableEntity.java
+++ b/api/src/main/java/com/ning/billing/util/customfield/CustomizableEntity.java
@@ -16,6 +16,7 @@
 
 package com.ning.billing.util.customfield;
 
+import java.util.List;
 import com.ning.billing.util.entity.Entity;
 
 public interface CustomizableEntity extends Entity {
@@ -23,7 +24,9 @@ public interface CustomizableEntity extends Entity {
 
     public void setFieldValue(String fieldName, String fieldValue);
 
-    public FieldStore getFields();
+    public List<CustomField> getFieldList();
+
+    public void clearFields();
 
     public String getObjectName();
 }

beatrix/pom.xml 2(+1 -1)

diff --git a/beatrix/pom.xml b/beatrix/pom.xml
index 07e2a57..23586bb 100644
--- a/beatrix/pom.xml
+++ b/beatrix/pom.xml
@@ -13,7 +13,7 @@
     <parent>
         <groupId>com.ning.billing</groupId>
         <artifactId>killbill</artifactId>
-        <version>0.0.18-SNAPSHOT</version>
+        <version>0.0.18-SNAPSHOT2</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
     <artifactId>killbill-beatrix</artifactId>

catalog/pom.xml 2(+1 -1)

diff --git a/catalog/pom.xml b/catalog/pom.xml
index ba9a714..2700b48 100644
--- a/catalog/pom.xml
+++ b/catalog/pom.xml
@@ -13,7 +13,7 @@
     <parent>
         <groupId>com.ning.billing</groupId>
         <artifactId>killbill</artifactId>
-        <version>0.0.18-SNAPSHOT</version>
+        <version>0.0.18-SNAPSHOT2</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
     <artifactId>killbill-catalog</artifactId>
diff --git a/entitlement/pom.xml b/entitlement/pom.xml
index 93853ef..c3e15f7 100644
--- a/entitlement/pom.xml
+++ b/entitlement/pom.xml
@@ -13,7 +13,7 @@
     <parent>
         <groupId>com.ning.billing</groupId>
         <artifactId>killbill</artifactId>
-        <version>0.0.18-SNAPSHOT</version>
+        <version>0.0.18-SNAPSHOT2</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
     <artifactId>killbill-entitlement</artifactId>
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/DefaultEntitlementUserApi.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/DefaultEntitlementUserApi.java
index 135ce3e..2cf23bc 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/DefaultEntitlementUserApi.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/DefaultEntitlementUserApi.java
@@ -78,9 +78,9 @@ public class DefaultEntitlementUserApi implements EntitlementUserApi {
     }
 
     @Override
-    public SubscriptionBundle createBundleForAccount(AccountData account, String bundleName)
+    public SubscriptionBundle createBundleForAccount(UUID accountId, String bundleName)
     throws EntitlementUserApiException {
-        SubscriptionBundleData bundle = new SubscriptionBundleData(bundleName, account.getId());
+        SubscriptionBundleData bundle = new SubscriptionBundleData(bundleName, accountId);
         return dao.createSubscriptionBundle(bundle);
     }
 
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementSqlDao.java b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementSqlDao.java
index 3838845..e676af4 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementSqlDao.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementSqlDao.java
@@ -71,9 +71,14 @@ public class EntitlementSqlDao implements EntitlementDao {
     }
 
     @Override
-    public SubscriptionBundle createSubscriptionBundle(SubscriptionBundleData bundle) {
-        bundlesDao.insertBundle(bundle);
-        return bundle;
+    public SubscriptionBundle createSubscriptionBundle(final SubscriptionBundleData bundle) {
+        return bundlesDao.inTransaction(new Transaction<SubscriptionBundle, BundleSqlDao>() {
+            @Override
+            public SubscriptionBundle inTransaction(BundleSqlDao bundlesDao, TransactionStatus status) {
+                bundlesDao.insertBundle(bundle);
+                return bundle;
+            }
+        });
     }
 
     @Override
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiBase.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiBase.java
index 72d60aa..c886ff5 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiBase.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiBase.java
@@ -158,7 +158,8 @@ public abstract class TestUserApiBase {
         ((MockEntitlementDao) dao).reset();
         try {
             busService.getEventBus().register(testListener);
-            bundle = entitlementApi.createBundleForAccount(accountData, "myDefaultBundle");
+            UUID accountId = UUID.randomUUID();
+            bundle = entitlementApi.createBundleForAccount(accountId, "myDefaultBundle");
         } catch (Exception e) {
             Assert.fail(e.getMessage());
         }
@@ -283,8 +284,6 @@ public abstract class TestUserApiBase {
 
     protected AccountData getAccountData() {
         AccountData accountData = new AccountData() {
-            private final UUID id = UUID.randomUUID();
-
             @Override
             public String getName() {
                 return "firstName lastName";
@@ -319,10 +318,6 @@ public abstract class TestUserApiBase {
             public String getPaymentProviderName() {
                 return "Paypal";
             }
-            @Override
-            public UUID getId() {
-                return id;
-            }
         };
         return accountData;
     }

invoice/pom.xml 2(+1 -1)

diff --git a/invoice/pom.xml b/invoice/pom.xml
index 8428ef0..b8cb89a 100644
--- a/invoice/pom.xml
+++ b/invoice/pom.xml
@@ -13,7 +13,7 @@
     <parent>
         <groupId>com.ning.billing</groupId>
         <artifactId>killbill</artifactId>
-        <version>0.0.18-SNAPSHOT</version>
+        <version>0.0.18-SNAPSHOT2</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
     <artifactId>killbill-invoice</artifactId>
diff --git a/invoice/src/main/java/com/ning/billing/invoice/api/DefaultInvoiceService.java b/invoice/src/main/java/com/ning/billing/invoice/api/DefaultInvoiceService.java
index b7bc657..33daa77 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/api/DefaultInvoiceService.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/api/DefaultInvoiceService.java
@@ -21,12 +21,12 @@ import com.ning.billing.lifecycle.LifecycleHandlerType;
 
 public class DefaultInvoiceService implements InvoiceService {
     private static final String INVOICE_SERVICE_NAME = "invoice-service";
-    private final InvoiceUserApi userApi;
+    //private final InvoiceUserApi userApi;
     private final InvoicePaymentApi paymentApi;
 
     @Inject
-    public DefaultInvoiceService(InvoiceUserApi userApi, InvoicePaymentApi paymentApi) {
-        this.userApi = userApi;
+    public DefaultInvoiceService(InvoicePaymentApi paymentApi) {
+        //this.userApi = userApi;
         this.paymentApi = paymentApi;
     }
 
@@ -37,7 +37,7 @@ public class DefaultInvoiceService implements InvoiceService {
 
     @Override
     public InvoiceUserApi getUserApi() {
-        return userApi;
+        return null;
     }
 
     @Override
diff --git a/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceDao.java b/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceDao.java
index 9beb139..34b47c3 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceDao.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceDao.java
@@ -20,6 +20,7 @@ import com.ning.billing.catalog.api.Currency;
 import com.ning.billing.invoice.api.Invoice;
 import com.ning.billing.invoice.api.InvoiceItem;
 import com.ning.billing.invoice.model.DefaultInvoice;
+import com.ning.billing.util.UuidMapper;
 import com.ning.billing.util.entity.EntityDao;
 import org.joda.time.DateTime;
 import org.skife.jdbi.v2.SQLStatement;

payment/pom.xml 2(+1 -1)

diff --git a/payment/pom.xml b/payment/pom.xml
index ea4716f..66e36f7 100644
--- a/payment/pom.xml
+++ b/payment/pom.xml
@@ -13,7 +13,7 @@
     <parent>
         <groupId>com.ning.billing</groupId>
         <artifactId>killbill</artifactId>
-        <version>0.0.18-SNAPSHOT</version>
+        <version>0.0.18-SNAPSHOT2</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
     <artifactId>killbill-payment</artifactId>

pom.xml 2(+1 -1)

diff --git a/pom.xml b/pom.xml
index 86eeec4..8ddc84c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -17,7 +17,7 @@
     <groupId>com.ning.billing</groupId>
     <artifactId>killbill</artifactId>
     <packaging>pom</packaging>
-    <version>0.0.18-SNAPSHOT</version>
+    <version>0.0.18-SNAPSHOT2</version>
     <name>killbill</name>
     <description>Library for managing recurring subscriptions and the associated billing</description>
     <url>http://github.com/ning/killbill</url>

util/pom.xml 2(+1 -1)

diff --git a/util/pom.xml b/util/pom.xml
index ad4848e..fda8ebf 100644
--- a/util/pom.xml
+++ b/util/pom.xml
@@ -13,7 +13,7 @@
     <parent>
         <groupId>com.ning.billing</groupId>
         <artifactId>killbill</artifactId>
-        <version>0.0.18-SNAPSHOT</version>
+        <version>0.0.18-SNAPSHOT2</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
     <artifactId>killbill-util</artifactId>
diff --git a/util/src/main/java/com/ning/billing/util/customfield/CustomizableEntityBase.java b/util/src/main/java/com/ning/billing/util/customfield/CustomizableEntityBase.java
index 00bdc04..05d0137 100644
--- a/util/src/main/java/com/ning/billing/util/customfield/CustomizableEntityBase.java
+++ b/util/src/main/java/com/ning/billing/util/customfield/CustomizableEntityBase.java
@@ -16,6 +16,7 @@
 
 package com.ning.billing.util.customfield;
 
+import java.util.List;
 import java.util.UUID;
 import com.ning.billing.util.entity.EntityBase;
 
@@ -38,8 +39,13 @@ public abstract class CustomizableEntityBase extends EntityBase implements Custo
     }
 
     @Override
-    public FieldStore getFields() {
-        return fields;
+    public List<CustomField> getFieldList() {
+        return fields.getEntityList();
+    }
+
+    @Override
+    public void clearFields() {
+        fields.clear();
     }
 
     public abstract String getObjectName();
diff --git a/util/src/main/java/com/ning/billing/util/entity/EntityCollectionBase.java b/util/src/main/java/com/ning/billing/util/entity/EntityCollectionBase.java
index 6f04841..369f255 100644
--- a/util/src/main/java/com/ning/billing/util/entity/EntityCollectionBase.java
+++ b/util/src/main/java/com/ning/billing/util/entity/EntityCollectionBase.java
@@ -61,21 +61,4 @@ public abstract class EntityCollectionBase<T extends Entity> implements EntityCo
     public List<T> getEntityList() {
         return new ArrayList<T>(entities.values());
     }
-//    public void save() {
-//        IEntityCollectionDao<T> dao = getCollectionDao();
-//
-//        dao.save(objectId.toString(), objectType, new ArrayList(entities.values()));
-//    }
-//
-//    public void load() {
-//        IEntityCollectionDao<T> dao = getCollectionDao();
-//
-//        List<T> entities = dao.load(objectId.toString(), objectType);
-//        this.entities.clear();
-//        if (entities != null) {
-//            for (T entity : entities) {
-//                this.entities.put(getEntityKey(entity), entity);
-//            }
-//        }
-//    }
 }