Details
diff --git a/invoice/src/main/java/org/killbill/billing/invoice/config/MultiTenantInvoiceConfig.java b/invoice/src/main/java/org/killbill/billing/invoice/config/MultiTenantInvoiceConfig.java
index 65f339f..2a9a435 100644
--- a/invoice/src/main/java/org/killbill/billing/invoice/config/MultiTenantInvoiceConfig.java
+++ b/invoice/src/main/java/org/killbill/billing/invoice/config/MultiTenantInvoiceConfig.java
@@ -18,6 +18,8 @@
package org.killbill.billing.invoice.config;
import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.Map;
import javax.inject.Inject;
import javax.inject.Named;
@@ -31,6 +33,7 @@ import org.skife.config.TimeSpan;
public class MultiTenantInvoiceConfig extends MultiTenantConfigBase implements InvoiceConfig {
+ private final Map<String, Method> methodsCache = new HashMap<String, Method>();
private final InvoiceConfig staticConfig;
@Inject
@@ -46,8 +49,7 @@ public class MultiTenantInvoiceConfig extends MultiTenantConfigBase implements I
@Override
public int getNumberOfMonthsInFuture(final InternalTenantContext tenantContext) {
- final Method method = new Object(){}.getClass().getEnclosingMethod();
- final String result = getStringTenantConfig(method.getName(), tenantContext);
+ final String result = getStringTenantConfig("getNumberOfMonthsInFuture", tenantContext);
if (result != null) {
return Integer.parseInt(result);
}
@@ -61,8 +63,7 @@ public class MultiTenantInvoiceConfig extends MultiTenantConfigBase implements I
@Override
public TimeSpan getDryRunNotificationSchedule(final InternalTenantContext tenantContext) {
- final Method method = new Object(){}.getClass().getEnclosingMethod();
- final String result = getStringTenantConfig(method.getName(), tenantContext);
+ final String result = getStringTenantConfig("getDryRunNotificationSchedule", tenantContext);
if (result != null) {
return new TimeSpan(result);
}
@@ -76,8 +77,7 @@ public class MultiTenantInvoiceConfig extends MultiTenantConfigBase implements I
@Override
public int getMaxRawUsagePreviousPeriod(final InternalTenantContext tenantContext) {
- final Method method = new Object(){}.getClass().getEnclosingMethod();
- final String result = getStringTenantConfig(method.getName(), tenantContext);
+ final String result = getStringTenantConfig("getMaxRawUsagePreviousPeriod", tenantContext);
if (result != null) {
return Integer.parseInt(result);
}
@@ -96,10 +96,20 @@ public class MultiTenantInvoiceConfig extends MultiTenantConfigBase implements I
@Override
protected Method getConfigStaticMethod(final String methodName) {
- try {
- return InvoiceConfig.class.getMethod(methodName, InternalTenantContext.class);
- } catch (final NoSuchMethodException e) {
- throw new RuntimeException(e);
+ Method method = methodsCache.get(methodName);
+ if (method == null) {
+ synchronized (methodsCache) {
+ method = methodsCache.get(methodName);
+ if (method == null) {
+ try {
+ method = InvoiceConfig.class.getMethod(methodName, InternalTenantContext.class);
+ methodsCache.put(methodName, method);
+ } catch (final NoSuchMethodException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ }
}
+ return method;
}
}
diff --git a/payment/src/main/java/org/killbill/billing/payment/config/MultiTenantPaymentConfig.java b/payment/src/main/java/org/killbill/billing/payment/config/MultiTenantPaymentConfig.java
index bbf365f..68d9e88 100644
--- a/payment/src/main/java/org/killbill/billing/payment/config/MultiTenantPaymentConfig.java
+++ b/payment/src/main/java/org/killbill/billing/payment/config/MultiTenantPaymentConfig.java
@@ -48,11 +48,9 @@ public class MultiTenantPaymentConfig extends MultiTenantConfigBase implements P
@Override
public List<Integer> getPaymentFailureRetryDays(@Param("dummy") final InternalTenantContext tenantContext) {
- // There is no good way to achieve that in java; this solution is expensive (we could consider hardcoding the method name each time instead)
- final Method method = new Object() {}.getClass().getEnclosingMethod();
- final String result = getStringTenantConfig(method.getName(), tenantContext);
+ final String result = getStringTenantConfig("getPaymentFailureRetryDays", tenantContext);
if (result != null) {
- return convertToListInteger(result, method.getName());
+ return convertToListInteger(result, "getPaymentFailureRetryDays");
}
return getPaymentFailureRetryDays();
}
@@ -64,8 +62,7 @@ public class MultiTenantPaymentConfig extends MultiTenantConfigBase implements P
@Override
public int getPluginFailureInitialRetryInSec(@Param("dummy") final InternalTenantContext tenantContext) {
- final Method method = new Object() {}.getClass().getEnclosingMethod();
- final String result = getStringTenantConfig(method.getName(), tenantContext);
+ final String result = getStringTenantConfig("getPluginFailureInitialRetryInSec", tenantContext);
if (result != null) {
return Integer.parseInt(result);
}
@@ -79,9 +76,7 @@ public class MultiTenantPaymentConfig extends MultiTenantConfigBase implements P
@Override
public int getPluginFailureRetryMultiplier(@Param("dummy") final InternalTenantContext tenantContext) {
- final Method method = new Object() {}.getClass().getEnclosingMethod();
-
- final String result = getStringTenantConfig(method.getName(), tenantContext);
+ final String result = getStringTenantConfig("getPluginFailureRetryMultiplier", tenantContext);
if (result != null) {
return Integer.parseInt(result);
}
@@ -95,11 +90,9 @@ public class MultiTenantPaymentConfig extends MultiTenantConfigBase implements P
@Override
public List<TimeSpan> getIncompleteTransactionsRetries(@Param("dummy") final InternalTenantContext tenantContext) {
- final Method method = new Object() {}.getClass().getEnclosingMethod();
-
- final String result = getStringTenantConfig(method.getName(), tenantContext);
+ final String result = getStringTenantConfig("getIncompleteTransactionsRetries", tenantContext);
if (result != null) {
- return convertToListTimeSpan(result, method.getName());
+ return convertToListTimeSpan(result, "getIncompleteTransactionsRetries");
}
return getIncompleteTransactionsRetries();
}
@@ -111,9 +104,7 @@ public class MultiTenantPaymentConfig extends MultiTenantConfigBase implements P
@Override
public int getPluginFailureRetryMaxAttempts(@Param("dummy") final InternalTenantContext tenantContext) {
- final Method method = new Object() {}.getClass().getEnclosingMethod();
-
- final String result = getStringTenantConfig(method.getName(), tenantContext);
+ final String result = getStringTenantConfig("getPluginFailureRetryMaxAttempts", tenantContext);
if (result != null) {
return Integer.parseInt(result);
}
@@ -127,11 +118,9 @@ public class MultiTenantPaymentConfig extends MultiTenantConfigBase implements P
@Override
public List<String> getPaymentControlPluginNames(@Param("dummy") final InternalTenantContext tenantContext) {
- final Method method = new Object() {}.getClass().getEnclosingMethod();
-
- final String result = getStringTenantConfig(method.getName(), tenantContext);
+ final String result = getStringTenantConfig("getPaymentControlPluginNames", tenantContext);
if (result != null) {
- return convertToListString(result, method.getName());
+ return convertToListString(result, "getPaymentControlPluginNames");
}
return getPaymentControlPluginNames();
}
diff --git a/profiles/killbill/src/main/java/org/killbill/billing/server/config/MultiTenantNotificationConfig.java b/profiles/killbill/src/main/java/org/killbill/billing/server/config/MultiTenantNotificationConfig.java
index cfea29b..509f147 100644
--- a/profiles/killbill/src/main/java/org/killbill/billing/server/config/MultiTenantNotificationConfig.java
+++ b/profiles/killbill/src/main/java/org/killbill/billing/server/config/MultiTenantNotificationConfig.java
@@ -57,11 +57,9 @@ public class MultiTenantNotificationConfig extends MultiTenantConfigBase impleme
@Override
public List<TimeSpan> getPushNotificationsRetries(@Param("dummy") final InternalTenantContext tenantContext) {
- final Method method = new Object() {}.getClass().getEnclosingMethod();
-
- final String result = getStringTenantConfig(method.getName(), tenantContext);
+ final String result = getStringTenantConfig("getPushNotificationsRetries", tenantContext);
if (result != null) {
- return convertToListTimeSpan(result, method.getName());
+ return convertToListTimeSpan(result, "getPushNotificationsRetries");
}
return getPushNotificationsRetries();
}