Details
diff --git a/analytics/src/main/java/com/ning/billing/analytics/AnalyticsListener.java b/analytics/src/main/java/com/ning/billing/analytics/AnalyticsListener.java
index 3d0bad2..f58f601 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/AnalyticsListener.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/AnalyticsListener.java
@@ -34,7 +34,6 @@ import java.util.List;
public class AnalyticsListener implements IApiListener
{
private static final Logger log = LoggerFactory.getLogger(AnalyticsListener.class);
-
private final EventDao dao;
private final IEntitlementUserApi entitlementApi;
private final IAccountUserApi accountApi;
diff --git a/catalog/src/main/java/com/ning/billing/catalog/CatalogService.java b/catalog/src/main/java/com/ning/billing/catalog/CatalogService.java
index 28b9725..8e91594 100644
--- a/catalog/src/main/java/com/ning/billing/catalog/CatalogService.java
+++ b/catalog/src/main/java/com/ning/billing/catalog/CatalogService.java
@@ -33,23 +33,28 @@ public class CatalogService implements IService, Provider<ICatalog>, ICatalogSer
private static final String CATALOG_SERVICE_NAME = "catalog-service";
- private final ICatalogConfig config;
-
private static ICatalog catalog;
+ private final ICatalogConfig config;
+ private boolean isInitialized;
+
@Inject
public CatalogService(ICatalogConfig config) {
this.config = config;
System.out.println(config.getCatalogURI());
+ this.isInitialized = false;
}
@Override
- public void initialize() throws ServiceException {
- try {
- catalog = CatalogLoader.getCatalogFromProperty(config.getCatalogURI());
- } catch (Exception e) {
- throw new ServiceException(e);
+ public synchronized void initialize() throws ServiceException {
+ if (!isInitialized) {
+ try {
+ catalog = CatalogLoader.getCatalogFromProperty(config.getCatalogURI());
+ isInitialized = true;
+ } catch (Exception e) {
+ throw new ServiceException(e);
+ }
}
}
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/billing/BillingApi.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/billing/BillingApi.java
index 5777cba..a1528ce 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/billing/BillingApi.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/billing/BillingApi.java
@@ -38,7 +38,6 @@ public class BillingApi implements IEntitlementBillingApi {
private final IClock clock;
private final IEntitlementDao dao;
- @Inject
public BillingApi(Engine engine, IClock clock, IEntitlementDao dao) {
super();
this.engine = engine;
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/EntitlementUserApi.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/EntitlementUserApi.java
index e664566..c30e2c1 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/EntitlementUserApi.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/EntitlementUserApi.java
@@ -51,21 +51,27 @@ public class EntitlementUserApi implements IEntitlementUserApi {
private final IEntitlementDao dao;
private final IPlanAligner planAligner;
+ private boolean initialized;
+
private ICatalog catalog;
- @Inject
+
public EntitlementUserApi(Engine engine, IClock clock, IPlanAligner planAligner, IEntitlementDao dao) {
super();
this.engine = engine;
this.clock = clock;
this.dao = dao;
this.planAligner = planAligner;
+ this.initialized = false;
}
@Override
- public void initialize(List<IApiListener> listeners) {
- this.catalog = engine.getCatalog();
- engine.registerApiObservers(listeners);
+ public synchronized void initialize(List<IApiListener> listeners) {
+ if (!initialized) {
+ this.catalog = engine.getCatalog();
+ engine.registerApiObservers(listeners);
+ initialized = true;
+ }
}
@Override
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/engine/core/Engine.java b/entitlement/src/main/java/com/ning/billing/entitlement/engine/core/Engine.java
index b71f669..0db9538 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/engine/core/Engine.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/engine/core/Engine.java
@@ -30,11 +30,15 @@ import com.ning.billing.catalog.api.ICatalogUserApi;
import com.ning.billing.catalog.api.IPlan;
import com.ning.billing.config.IEntitlementConfig;
-import com.ning.billing.entitlement.IEntitlementSystem;
+import com.ning.billing.entitlement.IEntitlementService;
import com.ning.billing.entitlement.alignment.IPlanAligner;
import com.ning.billing.entitlement.alignment.IPlanAligner.TimedPhase;
import com.ning.billing.entitlement.alignment.PlanAligner;
+import com.ning.billing.entitlement.api.billing.BillingApi;
+import com.ning.billing.entitlement.api.billing.IEntitlementBillingApi;
+import com.ning.billing.entitlement.api.user.EntitlementUserApi;
import com.ning.billing.entitlement.api.user.IApiListener;
+import com.ning.billing.entitlement.api.user.IEntitlementUserApi;
import com.ning.billing.entitlement.api.user.Subscription;
import com.ning.billing.entitlement.engine.dao.IEntitlementDao;
import com.ning.billing.entitlement.events.IEvent;
@@ -44,7 +48,7 @@ import com.ning.billing.entitlement.events.phase.PhaseEvent;
import com.ning.billing.entitlement.events.user.IUserEvent;
import com.ning.billing.util.clock.IClock;
-public class Engine implements IEventListener, IEntitlementSystem {
+public class Engine implements IEventListener, IEntitlementService {
private static final String ENTITLEMENT_SERVICE_NAME = "entitlement-service";
@@ -57,7 +61,8 @@ public class Engine implements IEventListener, IEntitlementSystem {
private final IApiEventProcessor apiEventProcessor;
private final ICatalogService catalogService;
private final IPlanAligner planAligner;
-
+ private final IEntitlementUserApi userApi;
+ private final IEntitlementBillingApi billingApi;
private List<IApiListener> observers;
private ICatalog catalog;
@@ -72,6 +77,8 @@ public class Engine implements IEventListener, IEntitlementSystem {
this.planAligner = planAligner;
this.catalogService = catalogService;
this.observers = null;
+ this.userApi = new EntitlementUserApi(this, clock, planAligner, dao);
+ this.billingApi = new BillingApi(this, clock, dao);
instance = this;
}
@@ -100,6 +107,18 @@ public class Engine implements IEventListener, IEntitlementSystem {
apiEventProcessor.stopNotifications();
}
+ @Override
+ public IEntitlementUserApi getUserApi(List<IApiListener> listeners) {
+ userApi.initialize(listeners);
+ return userApi;
+ }
+
+ @Override
+ public IEntitlementBillingApi getBillingApi() {
+ return billingApi;
+ }
+
+
public void registerApiObservers(List<IApiListener> observers) {
this.observers = observers;
}
@@ -185,6 +204,4 @@ public class Engine implements IEventListener, IEntitlementSystem {
return planAligner;
}
-
-
}
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/glue/EntitlementModule.java b/entitlement/src/main/java/com/ning/billing/entitlement/glue/EntitlementModule.java
index d57a0d8..6074d94 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/glue/EntitlementModule.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/glue/EntitlementModule.java
@@ -22,13 +22,9 @@ import com.google.inject.AbstractModule;
import com.ning.billing.catalog.CatalogUserApi;
import com.ning.billing.catalog.api.ICatalogUserApi;
import com.ning.billing.config.IEntitlementConfig;
-import com.ning.billing.entitlement.IEntitlementSystem;
+import com.ning.billing.entitlement.IEntitlementService;
import com.ning.billing.entitlement.alignment.IPlanAligner;
import com.ning.billing.entitlement.alignment.PlanAligner;
-import com.ning.billing.entitlement.api.billing.BillingApi;
-import com.ning.billing.entitlement.api.billing.IEntitlementBillingApi;
-import com.ning.billing.entitlement.api.user.IEntitlementUserApi;
-import com.ning.billing.entitlement.api.user.EntitlementUserApi;
import com.ning.billing.entitlement.engine.core.ApiEventProcessor;
import com.ning.billing.entitlement.engine.core.Engine;
import com.ning.billing.entitlement.engine.core.IApiEventProcessor;
@@ -63,19 +59,11 @@ public class EntitlementModule extends AbstractModule {
}
protected void installEntitlementCore() {
- bind(IEntitlementSystem.class).to(Engine.class).asEagerSingleton();
+ bind(IEntitlementService.class).to(Engine.class).asEagerSingleton();
bind(Engine.class).asEagerSingleton();
bind(IPlanAligner.class).to(PlanAligner.class).asEagerSingleton();
}
- protected void installUserApi() {
- bind(IEntitlementUserApi.class).to(EntitlementUserApi.class).asEagerSingleton();
- }
-
- protected void installBillingApi() {
- bind(IEntitlementBillingApi.class).to(BillingApi.class).asEagerSingleton();
- }
-
@Override
protected void configure() {
@@ -85,7 +73,5 @@ public class EntitlementModule extends AbstractModule {
installApiEventProcessor();
installEntitlementDao();
installEntitlementCore();
- installUserApi();
- installBillingApi();
}
}
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 8de2d8e..13786fb 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
@@ -50,7 +50,7 @@ import com.ning.billing.catalog.api.ICatalogUserApi;
import com.ning.billing.catalog.api.IDuration;
import com.ning.billing.catalog.api.TimeUnit;
import com.ning.billing.config.IEntitlementConfig;
-import com.ning.billing.entitlement.IEntitlementSystem;
+import com.ning.billing.entitlement.IEntitlementService;
import com.ning.billing.entitlement.api.ApiTestListener;
import com.ning.billing.entitlement.api.ApiTestListener.NextEvent;
import com.ning.billing.entitlement.api.billing.IEntitlementBillingApi;
@@ -71,7 +71,7 @@ public abstract class TestUserApiBase {
protected static final long DAY_IN_MS = (24 * 3600 * 1000);
- protected IEntitlementSystem entitlementService;
+ protected IEntitlementService entitlementService;
//protected Engine engine;
protected IEntitlementUserApi entitlementApi;
protected IEntitlementBillingApi billingApi;
@@ -112,11 +112,8 @@ public abstract class TestUserApiBase {
loadSystemPropertiesFromClasspath("/entitlement.properties");
final Injector g = getInjector();
- entitlementService = g.getInstance(IEntitlementSystem.class);
- //engine = g.getInstance(Engine.class);
- entitlementApi = g.getInstance(IEntitlementUserApi.class);
+ entitlementService = g.getInstance(IEntitlementService.class);
catalogService = g.getInstance(ICatalogService.class);
- billingApi = g.getInstance(IEntitlementBillingApi.class);
config = g.getInstance(IEntitlementConfig.class);
dao = g.getInstance(IEntitlementDao.class);
clock = (ClockMock) g.getInstance(IClock.class);
@@ -145,7 +142,8 @@ public abstract class TestUserApiBase {
testListener = new ApiTestListener();
List<IApiListener> listeners = new ArrayList<IApiListener>();
listeners.add(testListener);
- entitlementApi.initialize(listeners);
+ entitlementApi = entitlementService.getUserApi(listeners);
+ billingApi = entitlementService.getBillingApi();
}