diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterCoprocessorHost.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterCoprocessorHost.java index 6c6b272..16b8852 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterCoprocessorHost.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterCoprocessorHost.java @@ -22,6 +22,7 @@ package org.apache.hadoop.hbase.master; import java.io.IOException; import java.util.List; +import org.apache.commons.lang.ClassUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.hadoop.conf.Configuration; @@ -91,7 +92,8 @@ public class MasterCoprocessorHost public MasterEnvironment createEnvironment(final Class implClass, final Coprocessor instance, final int priority, final int seq, final Configuration conf) { - for (Class c : implClass.getInterfaces()) { + for (Object itf : ClassUtils.getAllInterfaces(implClass)) { + Class c = (Class) itf; if (CoprocessorService.class.isAssignableFrom(c)) { masterServices.registerService(((CoprocessorService)instance).getService()); } diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.java index 13b8317..a7d0627 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.java @@ -38,6 +38,7 @@ import com.google.protobuf.Service; import org.apache.commons.collections.map.AbstractReferenceMap; import org.apache.commons.collections.map.ReferenceMap; +import org.apache.commons.lang.ClassUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.commons.math.stat.descriptive.DescriptiveStatistics; @@ -370,7 +371,8 @@ public class RegionCoprocessorHost // uses a different way to be registered and executed. // It uses a visitor pattern to invoke registered Endpoint // method. - for (Class c : implClass.getInterfaces()) { + for (Object itf : ClassUtils.getAllInterfaces(implClass)) { + Class c = (Class) itf; if (CoprocessorService.class.isAssignableFrom(c)) { region.registerService( ((CoprocessorService)instance).getService() ); } diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionServerCoprocessorHost.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionServerCoprocessorHost.java index ab8e948..d96b2ab 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionServerCoprocessorHost.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionServerCoprocessorHost.java @@ -22,6 +22,7 @@ import java.io.IOException; import java.util.Comparator; import java.util.List; +import org.apache.commons.lang.ClassUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.hadoop.hbase.classification.InterfaceAudience; @@ -281,9 +282,11 @@ public class RegionServerCoprocessorHost extends final Configuration conf, final RegionServerServices services) { super(impl, priority, seq, conf); this.regionServerServices = services; - for (Class c : implClass.getInterfaces()) { + for (Object itf : ClassUtils.getAllInterfaces(implClass)) { + Class c = (Class) itf; if (SingletonCoprocessorService.class.isAssignableFrom(c)) { - this.regionServerServices.registerService(((SingletonCoprocessorService) impl).getService()); + this.regionServerServices.registerService( + ((SingletonCoprocessorService) impl).getService()); break; } }