0

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:

  1. [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

OneCricketeer
  • 179,855
  • 19
  • 132
  • 245

0 Answers0