Dropwizard и Guice: инъекционная среда
В настоящее время я создаю приложение Dropwizard + Guice + Jersey, в котором доступ к базе данных в настоящее время обрабатывается JDBI.
Я пытаюсь добиться вашей типичной корпоративной архитектуры, где Ресурсы обращаются к классам Сервиса, обращаясь к классу DAO, который, в свою очередь, обращается к базе данных. Было бы хорошо, чтобы все это было правильно подключено, хотя я думаю, что смогу построить свой граф объектов в методе run () приложения, если все остальное не получится.
Итак, я сталкиваюсь с этой проблемой, которая была упомянута здесьдоДля получения DBIFactory требуется среда и конфигурация, которые должны быть доступны в то время, когда Guice выполняет инъекцию, а не во время выполнения ().
Будучи Dropwizard и Guice noob, я сумел собрать до сих пор то, что мне нужен провайдер для моих объектов DAO, что-то вроде мелодии
public class UserDAOProvider implements Provider<UserDAO> {
@Inject
Environment environment;
@Inject
Configuration configuration;
@Override
public UserDAO get() {
final DBIFactory factory = new DBIFactory();
final (MyConfiguration) config = (MyConfiguration) configuration;
DBI jdbi = null;
try {
jdbi = factory.build(environment, config.getDataSourceFactory(),
"mysql");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return jdbi.onDemand(UserDAO.class);
}
}
Регистрация этого как единственного поставщика должна позволить мне тогда ввести UserDAO в мои Услуги.
Теперь, как мы на самом деле внедряем среду в провайдера? В настоящее время я застрял в Guice, жалуясь на то, что не нашел подходящего конструктора для Environment, поэтому он пытается создать его экземпляр, а не получить его от самого Dropwizard.
Кажется, что это выполнимо; Здесьdropwizard-Guice пакет, у которого DropWizardEnvironmentModule, я думаю, что мне нужно. Но я чувствую, что мне здесь не хватает какой-то части головоломки, чтобы понять, как все сложить. Мне не удалось найти полный рабочий пример ...