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 68d9e88..d2f28ab 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
@@ -18,7 +18,9 @@
package org.killbill.billing.payment.config;
import java.lang.reflect.Method;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import javax.inject.Inject;
import javax.inject.Named;
@@ -33,6 +35,7 @@ import org.skife.config.TimeSpan;
public class MultiTenantPaymentConfig extends MultiTenantConfigBase implements PaymentConfig {
+ private final Map<String, Method> methodsCache = new HashMap<String, Method>();
private final PaymentConfig staticConfig;
@Inject
@@ -157,10 +160,20 @@ public class MultiTenantPaymentConfig extends MultiTenantConfigBase implements P
@Override
protected Method getConfigStaticMethod(final String methodName) {
- try {
- return PaymentConfig.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 = PaymentConfig.class.getMethod(methodName, InternalTenantContext.class);
+ methodsCache.put(methodName, method);
+ } catch (final NoSuchMethodException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ }
}
+ return method;
}
}
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 509f147..bc44abb 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
@@ -18,7 +18,9 @@
package org.killbill.billing.server.config;
import java.lang.reflect.Method;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import org.killbill.billing.callcontext.InternalTenantContext;
import org.killbill.billing.payment.glue.PaymentModule;
@@ -33,6 +35,7 @@ import com.google.inject.name.Named;
public class MultiTenantNotificationConfig extends MultiTenantConfigBase implements NotificationConfig {
+ private final Map<String, Method> methodsCache = new HashMap<String, Method>();
private final NotificationConfig staticConfig;
@Inject
@@ -43,11 +46,21 @@ public class MultiTenantNotificationConfig extends MultiTenantConfigBase impleme
@Override
protected Method getConfigStaticMethod(final String methodName) {
- try {
- return NotificationConfig.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 = NotificationConfig.class.getMethod(methodName, InternalTenantContext.class);
+ methodsCache.put(methodName, method);
+ } catch (final NoSuchMethodException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ }
}
+ return method;
}
@Override