Dropwizard and Guice: Injizieren von Environment
Ich erstelle derzeit eine Dropwizard + Guice + Jersey-basierte Anwendung, bei der der Datenbankzugriff derzeit von JDBI verwaltet wird.
Was ich erreichen möchte, ist eine typische Unternehmensarchitektur, in der Ressourcen auf Serviceklassen zugreifen, die auf eine DAO-Klasse zugreifen, die wiederum auf die Datenbank zugreift. Es wäre schön, dies alles auf eine korrekte DI-Weise zu verkabeln, obwohl ich meinen Objektgraphen vermutlich in der run () -Methode der Anwendung erstellen kann, wenn alles andere fehlschlägt.
Also, ich stoße auf dieses Problem, das hier erwähnt wurdeVo: Um eine DBIFactory zu erhalten, sind sowohl die Umgebung als auch die Konfiguration erforderlich, die zu dem Zeitpunkt verfügbar sein müssen, an dem Guice seine Injektionsmagie ausführt, und nicht zur run () - Zeit.
ls Dropwizard und Guice Noob habe ich es bisher geschafft, dass ich einen Provider für meine DAO-Objekte benötig
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);
}
}
enn Sie dies als Singleton-Anbieter registrieren, kann ich das UserDAO in meine Dienste einfüge
Now, wie bekommen wir eigentlich die Umgebung in den Provider eingespritzt? Momentan stecke ich bei Guice fest und beschwere mich, dass ich keinen geeigneten Konstruktor für die Umgebung gefunden habe. Daher wird versucht, ihn zu instanziieren und nicht von Dropwizard selbst zu holen.
Es scheint so, als wäre das machbar; dort ist der dropwizard-guice Paket, dessen DropWizardEnvironmentModule ist, denke ich, was ich brauche. Aber ich habe das Gefühl, dass mir hier nur ein Teil des Puzzles fehlt, um zu verstehen, wie man Dinge zusammensetzt. Ich habe es bisher nicht geschafft, ein vollständiges Arbeitsbeispiel zu finden ...