Вступление
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 Влада Михалча в блоге Влада Михалча . |
