Вступление
FlexyPool в значительной степени использует метрики Dropwizard (ранее Codahale) для мониторинга использования пула соединений . Будучи интегрированным в Dropwizard, имя пакета должно было быть переименовано .
Поэтому вместо com.codahale.metrics в выпуске 4.0.0 будет использоваться имя пакета io.dropwizard.metrics .
Соревнование
Помимо очевидной обратной несовместимости, наиболее сложным аспектом этого изменения является то, что зависимость Maven будет видеть только приращение версии. Это означает, что вы не сможете включить обе версии в один и тот же модуль Maven, потому что groupId и artifactId не изменятся между версиями 3.xx и 4.xx.
01
02
03
04
05
06
07
08
09
10
11
|
< dependency > < groupId >io.dropwizard.metrics</ groupId > < artifactId >metrics-core</ artifactId > < version >${codahale.metrics.version}</ version > </ dependency > < dependency > < groupId >io.dropwizard.metrics</ groupId > < artifactId >metrics-core</ artifactId > < version >${dropwizard.metrics.version}</ version > </ dependency > |
Этим изменением можно управлять в приложении конечного пользователя, поскольку вам нужно только перейти с одной версии на другую. Платформа с открытым исходным кодом, построенная на основе Dropwizard Metrics, гораздо сложнее реорганизовать, поскольку вам необходимо поддерживать две несовместимые версии одной и той же библиотеки. В конце концов, вы не хотите заставлять своих клиентов переходить к определенной зависимости Metrics.
К счастью, FlexyPool с самого начала имел свой собственный уровень абстракции Metrics. Изоляция структуры от внешних зависимостей — это безопасная мера, позволяющая без особых усилий менять местами зависимости.
Для поддержки имен пакетов Codahale и Dropwizard метрики FlexyPool создаются следующим образом:
Поскольку эти классы не могут находиться в одном банке, существует три модуля, в которых размещена эта иерархия:
- flexy-pool-core: определяет абстракцию FlexyPool Metrics
- flexy-codahale-metrics: реализует абстракцию метрик FlexyPool поверх Codahale Matrics
- flexy-dropwizard-metrics: реализует абстракцию метрик FlexyPool поверх матриц Dropwizard
Каждый MetricsFactory зарегистрирован в качестве поставщика услуг :
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
public class CodahaleMetricsFactoryService implements MetricsFactoryService { public static final String METRICS_CLASS_NAME = "com.codahale.metrics.Metric" ; @Override public MetricsFactory load() { return ClassLoaderUtils .findClass(METRICS_CLASS_NAME) ? CodahaleMetrics.FACTORY : null ; } } public class DropwizardMetricsFactoryService implements MetricsFactoryService { public static final String METRICS_CLASS_NAME = "io.dropwizard.metrics.Metric" ; @Override public MetricsFactory load() { return ClassLoaderUtils .findClass(METRICS_CLASS_NAME) ? DropwizardMetrics.FACTORY : null ; } } |
и сервисы разрешаются во время выполнения:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
|
private ServiceLoader<MetricsFactoryService> serviceLoader = ServiceLoader.load( MetricsFactoryService. class ); public MetricsFactory resolve() { for (MetricsFactoryService service : serviceLoader) { MetricsFactory metricsFactory = service.load(); if (metricsFactory != null ) { return metricsFactory; } } throw new IllegalStateException( "No MetricsFactory could be loaded!" ); } |
Вывод
Таким образом, FlexyPool может использовать обе реализации Metrics, и решение принимается динамически на основе доступной в настоящее время библиотеки. Метрика Dropwizard 4.0.0 еще не выпущена, но FlexyPool готов к предстоящим изменениям.
Ссылка: | Как FlexyPool поддерживает переименование пакета Dropwizard Metrics от нашего партнера по JCG Влада Михалча в блоге Влада Михалча . |