diff --git a/database/spring-cloud-stream-binder-oracle-txeventq/spring-cloud-stream-binder-txeventq-sample/pom.xml b/database/spring-cloud-stream-binder-oracle-txeventq/spring-cloud-stream-binder-txeventq-sample/pom.xml
index afd26743..1626b6c6 100644
--- a/database/spring-cloud-stream-binder-oracle-txeventq/spring-cloud-stream-binder-txeventq-sample/pom.xml
+++ b/database/spring-cloud-stream-binder-oracle-txeventq/spring-cloud-stream-binder-txeventq-sample/pom.xml
@@ -1,6 +1,6 @@
-
+
4.0.0
com.oracle.database.spring.cloud-stream-binder
@@ -42,7 +42,7 @@
17
17
- 0.12.0
+ 0.13.0
3.4.3
1.20.6
@@ -86,4 +86,4 @@
test
-
\ No newline at end of file
+
diff --git a/database/starters/oracle-spring-boot-json-data-tools/pom.xml b/database/starters/oracle-spring-boot-json-data-tools/pom.xml
index 14702fe5..7aa86061 100644
--- a/database/starters/oracle-spring-boot-json-data-tools/pom.xml
+++ b/database/starters/oracle-spring-boot-json-data-tools/pom.xml
@@ -48,6 +48,13 @@
+
+
+ com.oracle.database.spring
+ oracle-spring-boot-starter-okafka
+ ${project.version}
+ true
+
com.oracle.database.spring
oracle-spring-boot-starter-ucp
diff --git a/database/starters/oracle-spring-boot-json-data-tools/src/main/java/com/oracle/spring/json/JsonCollectionsAutoConfiguration.java b/database/starters/oracle-spring-boot-json-data-tools/src/main/java/com/oracle/spring/json/JsonCollectionsAutoConfiguration.java
index 0c454bf3..a478a156 100644
--- a/database/starters/oracle-spring-boot-json-data-tools/src/main/java/com/oracle/spring/json/JsonCollectionsAutoConfiguration.java
+++ b/database/starters/oracle-spring-boot-json-data-tools/src/main/java/com/oracle/spring/json/JsonCollectionsAutoConfiguration.java
@@ -1,10 +1,13 @@
-// Copyright (c) 2024, Oracle and/or its affiliates.
+// Copyright (c) 2024, 2025, Oracle and/or its affiliates.
// Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl.
package com.oracle.spring.json;
import com.oracle.spring.json.jsonb.JSONB;
+import com.oracle.spring.json.kafka.OSONKafkaSerializationFactory;
import jakarta.json.bind.JsonbBuilder;
import oracle.sql.json.OracleJsonFactory;
+import org.apache.kafka.common.serialization.Deserializer;
+import org.apache.kafka.common.serialization.Serializer;
import org.eclipse.yasson.YassonJsonb;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
@@ -29,4 +32,13 @@ YassonJsonb yassonJsonb() {
public JSONB jsonb(OracleJsonFactory oracleJsonFactory, YassonJsonb yassonJsonb) {
return new JSONB(oracleJsonFactory, yassonJsonb);
}
+
+ @Bean
+ @ConditionalOnClass(value = {
+ Deserializer.class,
+ Serializer.class
+ })
+ public OSONKafkaSerializationFactory osonSerializationFactory(JSONB jsonb) {
+ return new OSONKafkaSerializationFactory(jsonb);
+ }
}
diff --git a/database/starters/oracle-spring-boot-starter-samples/oracle-spring-boot-sample-json-events/src/main/java/com/oracle/database/spring/jsonevents/serde/JSONBDeserializer.java b/database/starters/oracle-spring-boot-json-data-tools/src/main/java/com/oracle/spring/json/kafka/OSONDeserializer.java
similarity index 64%
rename from database/starters/oracle-spring-boot-starter-samples/oracle-spring-boot-sample-json-events/src/main/java/com/oracle/database/spring/jsonevents/serde/JSONBDeserializer.java
rename to database/starters/oracle-spring-boot-json-data-tools/src/main/java/com/oracle/spring/json/kafka/OSONDeserializer.java
index 867f44cb..aa7caa27 100644
--- a/database/starters/oracle-spring-boot-starter-samples/oracle-spring-boot-sample-json-events/src/main/java/com/oracle/database/spring/jsonevents/serde/JSONBDeserializer.java
+++ b/database/starters/oracle-spring-boot-json-data-tools/src/main/java/com/oracle/spring/json/kafka/OSONDeserializer.java
@@ -1,6 +1,6 @@
-// Copyright (c) 2024, Oracle and/or its affiliates.
+// Copyright (c) 2025, Oracle and/or its affiliates.
// Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl.
-package com.oracle.database.spring.jsonevents.serde;
+package com.oracle.spring.json.kafka;
import java.nio.ByteBuffer;
@@ -8,14 +8,14 @@
import org.apache.kafka.common.serialization.Deserializer;
/**
- * The JSONBDeserializer converts JSONB byte arrays to java objects.
+ * The OSONDeserializer converts JSONB byte arrays to java objects.
* @param deserialization type
*/
-public class JSONBDeserializer implements Deserializer {
+public class OSONDeserializer implements Deserializer {
private final JSONB jsonb;
private final Class clazz;
- public JSONBDeserializer(JSONB jsonb, Class clazz) {
+ public OSONDeserializer(JSONB jsonb, Class clazz) {
this.jsonb = jsonb;
this.clazz = clazz;
}
diff --git a/database/starters/oracle-spring-boot-json-data-tools/src/main/java/com/oracle/spring/json/kafka/OSONKafkaSerializationFactory.java b/database/starters/oracle-spring-boot-json-data-tools/src/main/java/com/oracle/spring/json/kafka/OSONKafkaSerializationFactory.java
new file mode 100644
index 00000000..f1ce5c73
--- /dev/null
+++ b/database/starters/oracle-spring-boot-json-data-tools/src/main/java/com/oracle/spring/json/kafka/OSONKafkaSerializationFactory.java
@@ -0,0 +1,21 @@
+// Copyright (c) 2025, Oracle and/or its affiliates.
+// Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl.
+package com.oracle.spring.json.kafka;
+
+import com.oracle.spring.json.jsonb.JSONB;
+
+public class OSONKafkaSerializationFactory {
+ private final JSONB jsonb;
+
+ public OSONKafkaSerializationFactory(JSONB jsonb) {
+ this.jsonb = jsonb;
+ }
+
+ public OSONDeserializer createDeserializer(Class clazz) {
+ return new OSONDeserializer<>(jsonb, clazz);
+ }
+
+ public OSONSerializer createSerializer() {
+ return new OSONSerializer<>(jsonb);
+ }
+}
diff --git a/database/starters/oracle-spring-boot-starter-samples/oracle-spring-boot-sample-json-events/src/main/java/com/oracle/database/spring/jsonevents/serde/JSONBSerializer.java b/database/starters/oracle-spring-boot-json-data-tools/src/main/java/com/oracle/spring/json/kafka/OSONSerializer.java
similarity index 60%
rename from database/starters/oracle-spring-boot-starter-samples/oracle-spring-boot-sample-json-events/src/main/java/com/oracle/database/spring/jsonevents/serde/JSONBSerializer.java
rename to database/starters/oracle-spring-boot-json-data-tools/src/main/java/com/oracle/spring/json/kafka/OSONSerializer.java
index 4197a65c..3a39f082 100644
--- a/database/starters/oracle-spring-boot-starter-samples/oracle-spring-boot-sample-json-events/src/main/java/com/oracle/database/spring/jsonevents/serde/JSONBSerializer.java
+++ b/database/starters/oracle-spring-boot-json-data-tools/src/main/java/com/oracle/spring/json/kafka/OSONSerializer.java
@@ -1,18 +1,18 @@
-// Copyright (c) 2024, Oracle and/or its affiliates.
+// Copyright (c) 2025, Oracle and/or its affiliates.
// Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl.
-package com.oracle.database.spring.jsonevents.serde;
+package com.oracle.spring.json.kafka;
import com.oracle.spring.json.jsonb.JSONB;
import org.apache.kafka.common.serialization.Serializer;
/**
- * The JSONBSerializer converts java objects to a JSONB byte array.
+ * The OSONSerializer converts java objects to a JSONB byte array.
* @param serialization type.
*/
-public class JSONBSerializer implements Serializer {
+public class OSONSerializer implements Serializer {
private final JSONB jsonb;
- public JSONBSerializer(JSONB jsonb) {
+ public OSONSerializer(JSONB jsonb) {
this.jsonb = jsonb;
}
diff --git a/database/starters/oracle-spring-boot-starter-samples/oracle-spring-boot-sample-json-events/src/main/java/com/oracle/database/spring/jsonevents/OKafkaConfiguration.java b/database/starters/oracle-spring-boot-starter-samples/oracle-spring-boot-sample-json-events/src/main/java/com/oracle/database/spring/jsonevents/OKafkaConfiguration.java
index d7e8164b..99c9de58 100644
--- a/database/starters/oracle-spring-boot-starter-samples/oracle-spring-boot-sample-json-events/src/main/java/com/oracle/database/spring/jsonevents/OKafkaConfiguration.java
+++ b/database/starters/oracle-spring-boot-starter-samples/oracle-spring-boot-sample-json-events/src/main/java/com/oracle/database/spring/jsonevents/OKafkaConfiguration.java
@@ -1,13 +1,11 @@
-// Copyright (c) 2024, Oracle and/or its affiliates.
+// Copyright (c) 2024, 2025, Oracle and/or its affiliates.
// Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl.
package com.oracle.database.spring.jsonevents;
import java.util.Properties;
import com.oracle.database.spring.jsonevents.model.Sensor;
-import com.oracle.database.spring.jsonevents.serde.JSONBDeserializer;
-import com.oracle.database.spring.jsonevents.serde.JSONBSerializer;
-import com.oracle.spring.json.jsonb.JSONB;
+import com.oracle.spring.json.kafka.OSONKafkaSerializationFactory;
import org.apache.kafka.clients.consumer.Consumer;
import org.apache.kafka.clients.producer.Producer;
import org.apache.kafka.common.serialization.Deserializer;
@@ -26,7 +24,6 @@
*/
@Configuration
public class OKafkaConfiguration {
- private final JSONB jsonb;
@Value("${app.ojdbcPath}")
private String ojdbcPath;
@@ -46,10 +43,6 @@ public class OKafkaConfiguration {
@Value("${app.consumerGroup:SensorEvents}")
private String consumerGroup;
- public OKafkaConfiguration(JSONB jsonb) {
- this.jsonb = jsonb;
- }
-
@Bean
@Qualifier("okafkaProperties")
public Properties okafkaProperties() {
@@ -64,7 +57,7 @@ public Properties okafkaProperties() {
@Bean
@Qualifier("okafkaConsumer")
- public Consumer okafkaConsumer() {
+ public Consumer okafkaConsumer(OSONKafkaSerializationFactory osonKafkaSerializationFactory) {
Properties props = okafkaProperties();
props.put("group.id", consumerGroup);
props.put("enable.auto.commit","false");
@@ -72,18 +65,18 @@ public Consumer okafkaConsumer() {
props.put("auto.offset.reset", "earliest");
Deserializer keyDeserializer = new StringDeserializer();
- Deserializer valueDeserializer = new JSONBDeserializer<>(jsonb, Sensor.class);
+ Deserializer valueDeserializer = osonKafkaSerializationFactory.createDeserializer(Sensor.class);
return new KafkaConsumer<>(props, keyDeserializer, valueDeserializer);
}
@Bean
@Qualifier("okafkaProducer")
- public Producer okafkaProducer() {
+ public Producer okafkaProducer(OSONKafkaSerializationFactory osonKafkaSerializationFactory) {
Properties props = okafkaProperties();
props.put("enable.idempotence", "true");
Serializer keySerializer = new StringSerializer();
- Serializer valueSerializer = new JSONBSerializer<>(jsonb);
+ Serializer valueSerializer = osonKafkaSerializationFactory.createSerializer();
return new KafkaProducer<>(props, keySerializer, valueSerializer);
}
}