Im trying to bind a producer in a java aplication on the following code on my appModule:
protected void configure() {
try {
Environment environment = environment();
final JdbiFactory factory = new JdbiFactory();
final Jdbi jdbi = factory.build(environment, configuration.getDatabase(), DATABASE);
bind(CompanyNoticeRoundRepository.class).toInstance(jdbi.onDemand(CompanyNoticeRoundRepository.class));
bind(ISendNoticesRound.class).annotatedWith(Names.named("FreemiumCompanyNoticeRound")).to(SendNoticesRoundFreemium.class);
bind(new TypeLiteral<Producer<String, String>>(){}).toInstance(this.noticeKafka.getProducer());
bind(IProducerTopicHandler.class).to(ProducerTopicHandler.class);
bind(ISendNoticesRound.class).to(SendNoticesRoundCompany.class);
} catch (Exception e) {
this.logger.error(e.getMessage());
}
}
@Override
public void setConfiguration(AppConfiguration configuration) {
this.configuration = configuration;
}
public void setNoticeKafka(KafkaProducerBundle<String, String, AppConfiguration> noticeKafka) {
this.noticeKafka = noticeKafka;
}
And my kafkaProducerBundle in MainApplication:
public final KafkaProducerBundle<String, String, AppConfiguration> kafka = new KafkaProducerBundle<String, String, AppConfiguration>(Collections.emptyList()) {
private Producer<String, String> producer;
@Override
public void run(AppConfiguration configuration, Environment environment) {
KafkaProducerFactory<String, String> kafkaProducerFactory =
Objects.requireNonNull(this.getKafkaProducerFactory(configuration));
Tracing tracing = Tracing.current();
Collection<String> topics = configuration.getTopicsName();
this.producer = kafkaProducerFactory.build(environment.lifecycle(), environment.healthChecks(), topics, tracing,
Collections.emptyMap());
}
@Override
public KafkaProducerFactory<String, String> getKafkaProducerFactory(AppConfiguration configuration) {
return configuration.getKafkaProducerFactory();
}
@Override
public Producer<String, String> getProducer() {
return Objects.requireNonNull(this.producer);
}
};
And my initilize:
public void initialize(Bootstrap<AppConfiguration> bootstrap) {
//Guice
AppModule module = new AppModule();
module.setNoticeKafka(this.kafka);
bootstrap.addBundle(GuiceBundle.builder()
.enableAutoConfig("...")
.modules(module)
.printDiagnosticInfo()
.build());
//Google Secrets Manager
// ParameterStoreSourceProvider parameterStoreSourceProvider = new ParameterStoreSourceProvider(bootstrap.getConfigurationSourceProvider());
// bootstrap.setConfigurationSourceProvider(parameterStoreSourceProvider);
//Command
bootstrap.addCommand(new ExecuteCommand(this));
}
but when i try to start the application i receive the following error:
- [Guice/MissingImplementation]: No implementation for Producer<String, String> was bound.
Requested by: 1 : AppModule.configure(AppModule.java:37) _ installed by: Elements$ElementsAsModule -> AppModule
the dependency:
<dependency>
<groupId>io.dropwizard.modules</groupId>
<artifactId>dropwizard-kafka</artifactId>
<version>4.0.0</version>
</dependency>
I really dont know what to do, can u guys ṕlease help me?
Ive tried to set he module.SetNoticeKafka before guice, created a class for producer, but none worked