From 8a3aaae5913ffb14017fe98e427de3dacd074b66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tiar=C3=AA=20Balbi?= Date: Fri, 2 Feb 2024 12:45:05 -0800 Subject: [PATCH 1/2] Chore: version bump Spring boot 3.2.2 Infinitic 0.12.1" --- infinitic-spring-boot-3-starter/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/infinitic-spring-boot-3-starter/build.gradle.kts b/infinitic-spring-boot-3-starter/build.gradle.kts index 6b7e124..58310be 100644 --- a/infinitic-spring-boot-3-starter/build.gradle.kts +++ b/infinitic-spring-boot-3-starter/build.gradle.kts @@ -17,7 +17,7 @@ plugins { group = "com.tiarebalbi.infinitic" version = "1.1.0" -extra["infiniticVersion"] = "0.11.7" +extra["infiniticVersion"] = "0.12.1" val bootJar: org.springframework.boot.gradle.tasks.bundling.BootJar by tasks bootJar.enabled = false From fc6cdc172941adabf89929fd83f139f2d8159e17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tiar=C3=AA=20Balbi?= Date: Mon, 5 Feb 2024 08:20:43 -0800 Subject: [PATCH 2/2] Chore: Exposed Infinic Worker instance and version bump --- .../build.gradle.kts | 2 +- .../InfiniticSpringBoot3ExampleApplication.kt | 7 +- .../tiarebalbi/example/demo/DemoService.kt | 4 +- .../build.gradle.kts | 2 +- .../spring/InfiniticAutoConfiguration.kt | 84 +++++++++++-------- .../spring/InfiniticAutoConfigurationTest.kt | 13 ++- .../src/test/resources/application.properties | 4 +- .../src/test/resources/infinitic-client.yml | 6 -- ...nfinitic-worker.yml => infinitic-test.yml} | 9 +- 9 files changed, 77 insertions(+), 54 deletions(-) delete mode 100644 infinitic-spring-boot-3-starter/src/test/resources/infinitic-client.yml rename infinitic-spring-boot-3-starter/src/test/resources/{infinitic-worker.yml => infinitic-test.yml} (73%) diff --git a/infinitic-spring-boot-3-example/build.gradle.kts b/infinitic-spring-boot-3-example/build.gradle.kts index da792b5..0ee2033 100644 --- a/infinitic-spring-boot-3-example/build.gradle.kts +++ b/infinitic-spring-boot-3-example/build.gradle.kts @@ -9,7 +9,7 @@ plugins { group = "com.tiarebalbi.example" version = "0.0.1-SNAPSHOT" -extra["infiniticVersion"] = "0.11.6" +extra["infiniticVersion"] = "0.11.7" java { sourceCompatibility = JavaVersion.VERSION_17 diff --git a/infinitic-spring-boot-3-example/src/main/kotlin/com/tiarebalbi/example/InfiniticSpringBoot3ExampleApplication.kt b/infinitic-spring-boot-3-example/src/main/kotlin/com/tiarebalbi/example/InfiniticSpringBoot3ExampleApplication.kt index e138775..302460f 100644 --- a/infinitic-spring-boot-3-example/src/main/kotlin/com/tiarebalbi/example/InfiniticSpringBoot3ExampleApplication.kt +++ b/infinitic-spring-boot-3-example/src/main/kotlin/com/tiarebalbi/example/InfiniticSpringBoot3ExampleApplication.kt @@ -1,6 +1,7 @@ package com.tiarebalbi.example import com.tiarebalbi.example.demo.DemoService +import io.infinitic.clients.InfiniticClient import org.springframework.beans.factory.InitializingBean import org.springframework.boot.autoconfigure.SpringBootApplication import org.springframework.boot.runApplication @@ -18,7 +19,9 @@ fun main(args: Array) { class Config { @Bean - fun initService(demoService: DemoService) = InitializingBean { - demoService.runDemoFlow() + fun initService(demoService: DemoService, client: InfiniticClient) = InitializingBean { + val execution = client.dispatch(demoService::runDemoFlow) + println("Execution id: ${execution.id}") + println("Result: ${execution.await()}") } } \ No newline at end of file diff --git a/infinitic-spring-boot-3-example/src/main/kotlin/com/tiarebalbi/example/demo/DemoService.kt b/infinitic-spring-boot-3-example/src/main/kotlin/com/tiarebalbi/example/demo/DemoService.kt index 011f448..d267c4e 100644 --- a/infinitic-spring-boot-3-example/src/main/kotlin/com/tiarebalbi/example/demo/DemoService.kt +++ b/infinitic-spring-boot-3-example/src/main/kotlin/com/tiarebalbi/example/demo/DemoService.kt @@ -5,9 +5,11 @@ import org.springframework.stereotype.Service @Service class DemoService(private val infiniticClient: InfiniticClient) { - fun runDemoFlow() { + fun runDemoFlow(): String { val event = this.infiniticClient.newWorkflow(AnnotatedWorkflow::class.java) val result = event.concatABC("Demo-") println("Result: $result") + + return result } } \ No newline at end of file diff --git a/infinitic-spring-boot-3-starter/build.gradle.kts b/infinitic-spring-boot-3-starter/build.gradle.kts index 58310be..6b7e124 100644 --- a/infinitic-spring-boot-3-starter/build.gradle.kts +++ b/infinitic-spring-boot-3-starter/build.gradle.kts @@ -17,7 +17,7 @@ plugins { group = "com.tiarebalbi.infinitic" version = "1.1.0" -extra["infiniticVersion"] = "0.12.1" +extra["infiniticVersion"] = "0.11.7" val bootJar: org.springframework.boot.gradle.tasks.bundling.BootJar by tasks bootJar.enabled = false diff --git a/infinitic-spring-boot-3-starter/src/main/kotlin/com/tiarebalbi/infinitic/spring/InfiniticAutoConfiguration.kt b/infinitic-spring-boot-3-starter/src/main/kotlin/com/tiarebalbi/infinitic/spring/InfiniticAutoConfiguration.kt index 22deae8..ca95403 100644 --- a/infinitic-spring-boot-3-starter/src/main/kotlin/com/tiarebalbi/infinitic/spring/InfiniticAutoConfiguration.kt +++ b/infinitic-spring-boot-3-starter/src/main/kotlin/com/tiarebalbi/infinitic/spring/InfiniticAutoConfiguration.kt @@ -1,11 +1,8 @@ package com.tiarebalbi.infinitic.spring import io.infinitic.clients.InfiniticClient -import io.infinitic.pulsar.config.ClientConfig import io.infinitic.workers.InfiniticWorker -import io.infinitic.workers.config.WorkerConfig import org.slf4j.LoggerFactory -import org.springframework.beans.factory.InitializingBean import org.springframework.boot.autoconfigure.AutoConfiguration import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty @@ -17,33 +14,46 @@ import org.springframework.core.io.ResourceLoader /** * Configuration class for Infinitic Auto-Configuration. * - * This class is responsible for configuring the Infinitic library based on the provided application properties. - * It creates an InfiniticClient and configures it with the specified client configuration file. + * This class is responsible for configuring the Infinitic library based on + * the provided application properties. It creates an InfiniticClient and + * configures it with the specified client configuration file. * - * This class is annotated with `@Configuration` to indicate that it should be processed by Spring's application context. - * It is also annotated with `@ConditionalOnProperty` to conditionally enable this configuration based on the value of the - * "infinitic.enabled" property. If the property is not present or has a value other than "true", this configuration will + * This class is annotated with `@Configuration` to indicate that it should + * be processed by Spring's application context. It is also annotated with + * `@ConditionalOnProperty` to conditionally enable this configuration + * based on the value of the "infinitic.enabled" property. If the property + * is not present or has a value other than "true", this configuration will * not be loaded. * - * Configuration properties can be provided using the `InfiniticProperties` class, which is enabled with the - * `@EnableConfigurationProperties` annotation. + * Configuration properties can be provided using the `InfiniticProperties` + * class, which is enabled with the `@EnableConfigurationProperties` + * annotation. * - * The InfiniticAutoConfiguration class requires two constructor arguments: `InfiniticProperties` and `ResourceLoader`. + * The InfiniticAutoConfiguration class requires two constructor arguments: + * `InfiniticProperties` and `ResourceLoader`. * - * The `InfiniticProperties` argument is used to access the configuration properties for the Infinitic library, - * including the location of the client configuration file. + * The `InfiniticProperties` argument is used to access the configuration + * properties for the Infinitic library, including the location of the + * client configuration file. * - * The `ResourceLoader` argument is used to load the client configuration file from the classpath or file system. + * The `ResourceLoader` argument is used to load the client configuration + * file from the classpath or file system. * - * The `configureClient` method is annotated with `@Bean`, `@ConditionalOnProperty`, and `@ConditionalOnMissingBean`. - * It creates and configures an InfiniticClient bean if the "infinitic.client.enabled" property is present and has a - * value of "true". It uses the `getClientConfig` method to obtain the client configuration. + * The `configureClient` method is annotated with `@Bean`, + * `@ConditionalOnProperty`, and `@ConditionalOnMissingBean`. It creates + * and configures an InfiniticClient bean if the "infinitic.client.enabled" + * property is present and has a value of "true". It uses the + * `getClientConfig` method to obtain the client configuration. * - * The `getClientConfig` method retrieves the client configuration file location from the `InfiniticProperties` object, - * loads the file using the `ResourceLoader`, and creates a `ClientConfig` object from the loaded file. + * The `getClientConfig` method retrieves the client configuration file + * location from the `InfiniticProperties` object, loads the file using the + * `ResourceLoader`, and creates a `ClientConfig` object from the loaded + * file. * - * @param properties the InfiniticProperties object containing the configuration properties for the Infinitic library - * @param resourceLoader the ResourceLoader object used to load the client configuration file + * @param properties the InfiniticProperties object containing the + * configuration properties for the Infinitic library + * @param resourceLoader the ResourceLoader object used to load the client + * configuration file * @author tiare.balbi */ @AutoConfiguration @@ -62,40 +72,42 @@ class InfiniticAutoConfiguration( @Bean @ConditionalOnProperty(name = ["infinitic.worker.enabled"], havingValue = "true") @ConditionalOnMissingBean - fun configureWorker() = - InitializingBean { - val config = getWorkerConfig() - InfiniticWorker.fromConfig(config).use { - logger.info("Starting infinitic worker") - if (properties.worker.executionMode.isAsync()) { - it.startAsync() - } else { - it.start() - } + fun configureWorker(): InfiniticWorker { + val config = getWorkerConfig() + val worker = InfiniticWorker.fromConfigFile(config) + worker.use { + logger.info("Starting infinitic worker") + if (properties.worker.executionMode.isAsync()) { + it.startAsync() + } else { + it.start() } } + return worker + } + @Bean @ConditionalOnProperty(name = ["infinitic.client.enabled"], havingValue = "true") @ConditionalOnMissingBean fun configureClient(): InfiniticClient { logger.info("Configuring infinitic client") - return InfiniticClient.fromConfig(getClientConfig(), getWorkerConfig()) + return InfiniticClient.fromConfigFile(getClientConfig(), getWorkerConfig()) } - private fun getClientConfig(): ClientConfig { + private fun getClientConfig(): String { val configuration = properties.client.configuration ?: throw IllegalStateException("Unable to find client configuration file for infinitic.") val configurationFile = resourceLoader.getResource(configuration) - return ClientConfig.fromFile(configurationFile.file.absolutePath) + return configurationFile.file.absolutePath } - private fun getWorkerConfig(): WorkerConfig { + private fun getWorkerConfig(): String { val configuration = properties.worker.configuration ?: throw IllegalStateException("Unable to find worker infinitic configuration") val configurationFile = resourceLoader.getResource(configuration) - return WorkerConfig.fromFile(configurationFile.file.absolutePath) + return configurationFile.file.absolutePath } } diff --git a/infinitic-spring-boot-3-starter/src/test/kotlin/com/tiarebalbi/infinitic/spring/InfiniticAutoConfigurationTest.kt b/infinitic-spring-boot-3-starter/src/test/kotlin/com/tiarebalbi/infinitic/spring/InfiniticAutoConfigurationTest.kt index ef5a429..865c20b 100644 --- a/infinitic-spring-boot-3-starter/src/test/kotlin/com/tiarebalbi/infinitic/spring/InfiniticAutoConfigurationTest.kt +++ b/infinitic-spring-boot-3-starter/src/test/kotlin/com/tiarebalbi/infinitic/spring/InfiniticAutoConfigurationTest.kt @@ -2,21 +2,26 @@ package com.tiarebalbi.infinitic.spring import com.tiarebalbi.infinitic.tests.AnnotatedWorkflow import io.infinitic.clients.InfiniticClient +import io.infinitic.workers.InfiniticWorker import org.assertj.core.api.Assertions.assertThat import org.junit.jupiter.api.Test import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.test.context.SpringBootTest -@SpringBootTest(classes = [InfiniticAutoConfiguration::class], properties = ["infinitic.enabled=true"]) +@SpringBootTest(classes = [InfiniticAutoConfiguration::class]) class InfiniticAutoConfigurationTest { @Autowired private lateinit var infiniticClient: InfiniticClient + @Autowired + private lateinit var infiniticWorker: InfiniticWorker + @Test fun `should be able to trigger flow`() { - val event = this.infiniticClient.newWorkflow(AnnotatedWorkflow::class.java) - val result = event.concatABC("Demo-") + val event: AnnotatedWorkflow = + this.infiniticClient.newWorkflow(AnnotatedWorkflow::class.java, setOf("unit-test")) + val result = this.infiniticClient.dispatch(event::concatABC, "Demo-") - assertThat(result).isEqualTo("Demo-abc") + assertThat(result.await()).isEqualTo("Demo-abc") } } diff --git a/infinitic-spring-boot-3-starter/src/test/resources/application.properties b/infinitic-spring-boot-3-starter/src/test/resources/application.properties index c8a30f2..c969e65 100644 --- a/infinitic-spring-boot-3-starter/src/test/resources/application.properties +++ b/infinitic-spring-boot-3-starter/src/test/resources/application.properties @@ -3,8 +3,8 @@ infinitic.enabled=true ## Worker Setting infinitic.worker.enabled=true -infinitic.worker.configuration=classpath:infinitic-worker.yml +infinitic.worker.configuration=classpath:infinitic-test.yml ## Client Setting infinitic.client.enabled=true -infinitic.client.configuration=classpath:infinitic-client.yml +infinitic.client.configuration=classpath:infinitic-test.yml diff --git a/infinitic-spring-boot-3-starter/src/test/resources/infinitic-client.yml b/infinitic-spring-boot-3-starter/src/test/resources/infinitic-client.yml deleted file mode 100644 index 6c4eb43..0000000 --- a/infinitic-spring-boot-3-starter/src/test/resources/infinitic-client.yml +++ /dev/null @@ -1,6 +0,0 @@ -# Comment the line below to perform tests on a local Pulsar cluster -transport: inMemory - -pulsar: - tenant: infinitic - namespace: dev \ No newline at end of file diff --git a/infinitic-spring-boot-3-starter/src/test/resources/infinitic-worker.yml b/infinitic-spring-boot-3-starter/src/test/resources/infinitic-test.yml similarity index 73% rename from infinitic-spring-boot-3-starter/src/test/resources/infinitic-worker.yml rename to infinitic-spring-boot-3-starter/src/test/resources/infinitic-test.yml index ccefa8a..65df74f 100644 --- a/infinitic-spring-boot-3-starter/src/test/resources/infinitic-worker.yml +++ b/infinitic-spring-boot-3-starter/src/test/resources/infinitic-test.yml @@ -13,4 +13,11 @@ services: workflows: - name: annotatedWorkflow class: com.tiarebalbi.infinitic.tests.AnnotatedWorkflowImpl - concurrency: 5 \ No newline at end of file + concurrency: 5 + +workflowDefault: + concurrency: 5 + timeoutInSeconds: 30 + retry: + maximumRetries: 6 + checkMode: strict \ No newline at end of file