jamesnetherton commented on code in PR #7634:
URL: https://github.com/apache/camel-quarkus/pull/7634#discussion_r2276171520


##########
debezium-grouped-native.log:
##########
@@ -0,0 +1 @@
+[INFO] Scanning for projects...

Review Comment:
   I guess we can remove this.



##########
extensions-support/debezium/deployment/src/main/java/org/apache/camel/quarkus/support/debezium/deployment/DebeziumSupportProcessor.java:
##########
@@ -24,45 +50,104 @@
 import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem;
 import 
io.quarkus.deployment.builditem.nativeimage.RuntimeInitializedClassBuildItem;
 import org.apache.kafka.common.security.authenticator.SaslClientAuthenticator;
+import org.apache.kafka.connect.json.JsonConverter;
+import org.apache.kafka.connect.source.SourceTask;
+import org.jboss.jandex.DotName;
 import org.jboss.jandex.IndexView;
 
 public class DebeziumSupportProcessor {
 
     @BuildStep
-    ReflectiveClassBuildItem registerForReflection(CombinedIndexBuildItem 
combinedIndex) {
+    void addDependencies(BuildProducer<IndexDependencyBuildItem> 
indexDependency) {
+        indexDependency.produce(new 
IndexDependencyBuildItem("org.apache.kafka", "connect-json"));
+        indexDependency.produce(new IndexDependencyBuildItem("io.debezium", 
"debezium-api"));
+    }
+
+    @BuildStep
+    RuntimeInitializedClassBuildItem runtimeInitializedClasses() {
+        return new 
RuntimeInitializedClassBuildItem(SaslClientAuthenticator.class.getName());
+    }
+
+    @BuildStep
+    void reflectiveClasses(CombinedIndexBuildItem combinedIndex, 
BuildProducer<ReflectiveClassBuildItem> reflectiveClasses) {
         IndexView index = combinedIndex.getIndex();
 
         String[] dtos = index.getKnownClasses().stream().map(ci -> 
ci.name().toString())
                 .filter(n -> n.startsWith("org.apache.kafka.connect.json")
                         || n.startsWith("io.debezium.engine.spi"))
                 .sorted()
                 .toArray(String[]::new);
+        
reflectiveClasses.produce(ReflectiveClassBuildItem.builder(dtos).fields().build());
 
-        return ReflectiveClassBuildItem.builder(dtos).fields().build();
-    }
+        dtos = 
index.getAllKnownImplementations(DotName.createSimple(SnapshotLock.class.getName())).stream()
+                .map(ci -> ci.name().toString())
+                .sorted()
+                .toArray(String[]::new);
+        
reflectiveClasses.produce(ReflectiveClassBuildItem.builder(dtos).fields().build());
 
-    @BuildStep
-    ReflectiveClassBuildItem reflectiveClasses() {
-        return ReflectiveClassBuildItem.builder(new String[] { 
"org.apache.kafka.connect.storage.FileOffsetBackingStore",
+        reflectiveClasses.produce(ReflectiveClassBuildItem.builder(
+                "org.apache.kafka.connect.storage.FileOffsetBackingStore",
                 "org.apache.kafka.connect.storage.MemoryOffsetBackingStore",
+                "io.debezium.storage.kafka.history.KafkaSchemaHistory",
                 "io.debezium.relational.history.FileDatabaseHistory",
-                "io.debezium.embedded.ConvertingEngineBuilderFactory" 
}).build();
-    }
+                "io.debezium.embedded.ConvertingEngineBuilderFactory",
+                "io.debezium.processors.PostProcessorRegistry",
+                
"io.debezium.pipeline.txmetadata.DefaultTransactionMetadataFactory",
+                "io.debezium.schema.SchemaTopicNamingStrategy",
+                "io.debezium.storage.file.history.FileSchemaHistory")
+                .build());
 
-    @BuildStep
-    void addDependencies(BuildProducer<IndexDependencyBuildItem> 
indexDependency) {
-        indexDependency.produce(new 
IndexDependencyBuildItem("org.apache.kafka", "connect-json"));
-        indexDependency.produce(new IndexDependencyBuildItem("io.debezium", 
"debezium-api"));
+        reflectiveClasses.produce(ReflectiveClassBuildItem.builder(
+                DebeziumEngine.BuilderFactory.class,
+                ConvertingAsyncEngineBuilderFactory.class,
+                SaslClientAuthenticator.class,
+                JsonConverter.class,
+                DefaultTransactionMetadataFactory.class,
+                SchemaTopicNamingStrategy.class,
+                BaseSourceTask.class,
+                SinkNotificationChannel.class,
+                LogNotificationChannel.class,
+                JmxNotificationChannel.class,
+                SnapshotLock.class,
+                NoLockingSupport.class,
+                AlwaysSnapshotter.class,
+                InitialSnapshotter.class,
+                InitialOnlySnapshotter.class,
+                NoDataSnapshotter.class,
+                RecoverySnapshotter.class,
+                WhenNeededSnapshotter.class,
+                NeverSnapshotter.class,
+                SchemaOnlySnapshotter.class,
+                SchemaOnlyRecoverySnapshotter.class,
+                ConfigurationBasedSnapshotter.class,
+                SourceSignalChannel.class,
+                KafkaSignalChannel.class,
+                FileSignalChannel.class,
+                JmxSignalChannel.class,
+                InProcessSignalChannel.class,
+                StandardActionProvider.class,
+                SourceTask.class)
+                .build());
     }
 
-    @BuildStep
-    void registerServiceProviders(BuildProducer<NativeImageResourceBuildItem> 
nativeImage) {
-        nativeImage.produce(
+    @BuildStep()
+    void 
registerNativeImageResources(BuildProducer<NativeImageResourceBuildItem> 
resources) {
+        resources.produce(new NativeImageResourceBuildItem(
+                
"META-INF/services/io.debezium.embedded.async.ConvertingAsyncEngineBuilderFactory"));
+        resources.produce(
                 new 
NativeImageResourceBuildItem("META-INF/services/io.debezium.engine.DebeziumEngine$BuilderFactory"));
-    }
+        resources.produce(new 
NativeImageResourceBuildItem("META-INF/services/io.debezium.spi.snapshot.Snapshotter"));
+        resources.produce(new 
NativeImageResourceBuildItem("META-INF/services/io.debezium.spi.snapshot.Snapshotter"));

Review Comment:
   Seems we have `META-INF/services/io.debezium.spi.snapshot.Snapshotter` 
duplicated.
   
   In general, we should perhaps use `ServiceProviderBuildItem` instead of 
`NativeImageResourceBuildItem`, passing in the Service class name from 
Class.getName(). That way you detect breakages if APIs change / get removed etc.



##########
extensions/debezium-mongodb/deployment/src/main/java/org/apache/camel/quarkus/component/debezium/mongodb/deployment/DebeziumMongodbProcessor.java:
##########
@@ -32,8 +37,18 @@ FeatureBuildItem feature() {
     }
 
     @BuildStep
-    ReflectiveClassBuildItem reflectiveClasses() {
-        return ReflectiveClassBuildItem.builder(new String[] { 
MongoDbConnector.class.getName(),
-                MongoDbConnectorTask.class.getName() }).build();
+    void reflectiveClasses(BuildProducer<ReflectiveClassBuildItem> 
reflectiveClasses) {
+
+        reflectiveClasses.produce(ReflectiveClassBuildItem.builder(
+                MongoDbConnector.class,
+                MongoDbConnectorTask.class,
+                MongoDbSourceInfoStructMaker.class,
+                DefaultMongoDbAuthProvider.class,
+                SelectAllSnapshotQuery.class).build());
+    }
+
+    @BuildStep
+    void addDependencies(BuildProducer<IndexDependencyBuildItem> 
indexDependency) {
+        indexDependency.produce(new IndexDependencyBuildItem("io.debezium", 
"debezium-connector-mongodb"));

Review Comment:
   Question: There is no Jandex usage in `DebeziumMongodbProcessor`, so where 
do we use these indexed classes. Is it in `DebeziumSupportProcessor`?



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to