Я пытаюсь реализовать какую-то микросервисную архетектуру с использованием OSGI.
У меня есть пакет UserDAO, который получает соединение из пула соединений в другой пакет (соединитель).
Они связаны с сервисным API OSGI. Итак, вопросы:
1) Должен ли я зарегистрировать интерфейс (IConnector) в качестве службы или реализацию этого интерфейса (Connector):
serviceRegistration = bundleContext.registerService(IConnector.class.getName(), new Connector(), null);
VS
serviceRegistration = bundleContext.registerService(Connector.class.getName(), new Connector(), null);
Оба эти варианта работают нормально. Если я регистрирую IConnector (интерфейс), я просто отслеживаю его:
userDBConnectorTracker = new ServiceTracker(context, IConnector.class.getName(), this);
Точно так же, если я регистрирую Connector (реализация IConnector):
userDBConnectorTracker = new ServiceTracker(context, Connector.class.getName(), this);
2) Я хочу использовать DBCP или HikariCP, но во всех примерах с ними используются статические методы без интерфейса, например:
public class HikariCPDataSource {
private static HikariConfig config = new HikariConfig();
private static HikariDataSource ds;
static {
config.setJdbcUrl("jdbc:h2:mem:test");
config.setUsername("user");
config.setPassword("password");
config.addDataSourceProperty("cachePrepStmts", "true");
config.addDataSourceProperty("prepStmtCacheSize", "250");
config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
ds = new HikariDataSource(config);
}
public static Connection getConnection() throws SQLException {
return ds.getConnection();
}
private HikariCPDataSource(){}
}
Я пробовал это. Но тогда мне нужно изменить метод моего интерфейса на статический, как методы реализации:
Я не могу использовать это, потому что, если я зарегистрирую Interface моего класса Connector в качестве службы, это вызовет ошибку «статический метод в интерфейсе не разрешен».
Должен ли я просто удалить статические из всех методов в классе Connector?
Почему каждый использует статический в пуле соединений?