The weird module dance with reflection came from needing to extend inner
hadoop classes on multiple different versions. This was back when HBase had
to support hadoop < 1, hadoop 1.x, and hadoop 2.x. When we dropped older
hadoop versions then things got easier.

On Tue, Oct 24, 2017 at 3:09 PM, Apekshit Sharma <[email protected]> wrote:

> Hi
>
> Am confused why do we have this weird circular dependency between the two
> modules: hbase-metrics-api & hbase-metrics. And since maven doesn't allow
> it explicitly, this was tucked and hidden by using reflection?
>
> MetricRegistriesImpl[hbase-metrics] implements
> MetricRegistries[hbase-metrics-api].
> MetricRegistriesLoader[hbase-metrics-api] depends on this implementation,
> MetricRegistriesImpl, because it instantiates it via reflection
> <https://github.com/apache/hbase/blob/eee3b0180ead73c09b33f9583bfee9
> c01bc3aed2/hbase-metrics-api/src/main/java/org/apache/
> hadoop/hbase/metrics/MetricRegistriesLoader.java#L39>
> [1].
>
> Can we just move all interfaces and default implementation together into
> single module. But i like the idea of keeping implementations in separate
> package with "impl" explicitly in package name.
>
> [1]
> https://github.com/apache/hbase/blob/eee3b0180ead73c09b33f9583bfee9
> c01bc3aed2/hbase-metrics-api/src/main/java/org/apache/
> hadoop/hbase/metrics/MetricRegistriesLoader.java#L39
>
> -- Appy
>

Reply via email to