Skip to content

Commit

Permalink
fixup! Register Db2 resource bundle classes for reflection
Browse files Browse the repository at this point in the history
  • Loading branch information
zakkak committed Feb 26, 2025
1 parent 645c383 commit 0525f0f
Showing 1 changed file with 13 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,6 @@

import java.util.ListResourceBundle;
import java.util.ResourceBundle;
import java.util.Set;
import java.util.TreeSet;
import java.util.stream.Collectors;

import org.jboss.jandex.ClassInfo;
import org.jboss.jandex.DotName;
Expand Down Expand Up @@ -40,6 +37,7 @@
import io.quarkus.deployment.builditem.nativeimage.NativeImageAllowIncompleteClasspathBuildItem;
import io.quarkus.deployment.builditem.nativeimage.NativeImageConfigBuildItem;
import io.quarkus.deployment.builditem.nativeimage.NativeImageResourceBuildItem;
import io.quarkus.deployment.builditem.nativeimage.NativeImageResourceBundleBuildItem;
import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem;
import io.quarkus.deployment.builditem.nativeimage.ServiceProviderBuildItem;
import io.quarkus.jdbc.db2.runtime.DB2AgroalConnectionConfigurer;
Expand Down Expand Up @@ -90,8 +88,7 @@ void configureAgroalConnection(BuildProducer<AdditionalBeanBuildItem> additional
}

@BuildStep
void registerForReflection(CombinedIndexBuildItem index,
BuildProducer<ReflectiveClassBuildItem> reflectiveClass) {
void registerForReflection(BuildProducer<ReflectiveClassBuildItem> reflectiveClass) {
//Not strictly necessary when using Agroal, as it also registers
//any JDBC driver being configured explicitly through its configuration.
//We register it for the sake of people not using Agroal,
Expand All @@ -117,25 +114,25 @@ void registerForReflection(CombinedIndexBuildItem index,
reflectiveClass.produce(ReflectiveClassBuildItem.builder("com.ibm.pdq.cmx.client.DataSourceFactory")
.reason(getClass().getName() + " accessed reflectively by Db2 JDBC driver")
.build());
}

@BuildStep
void registerResources(CombinedIndexBuildItem index,
BuildProducer<NativeImageResourceBuildItem> resource,
BuildProducer<NativeImageResourceBundleBuildItem> resourceBundle) {
resource.produce(new NativeImageResourceBuildItem("pdq.properties"));
resource.produce(new NativeImageResourceBuildItem("com/ibm/db2/cmx/runtime/internal/resources/messages.properties"));

// we need to register for reflection all the classes of the driver that are ResourceBundles
for (ClassInfo resourceBundle : index.getIndex().getAllKnownSubclasses(RESOURCE_BUNDLE_DOT_NAME)) {
if (!resourceBundle.name().toString().startsWith(DB2_DRIVER_ROOT_PACKAGE)) {
for (ClassInfo bundle : index.getIndex().getAllKnownSubclasses(RESOURCE_BUNDLE_DOT_NAME)) {
if (!bundle.name().toString().startsWith(DB2_DRIVER_ROOT_PACKAGE)) {
continue;
}

reflectiveClass.produce(ReflectiveClassBuildItem.builder(resourceBundle.name().toString())
.reason("ResourceBundle accessed reflectively by Db2 JDBC driver")
.constructors().fields().methods().build());
resourceBundle.produce(new NativeImageResourceBundleBuildItem(bundle.name().toString()));
}
}

@BuildStep
void registerResources(BuildProducer<NativeImageResourceBuildItem> resource) {
resource.produce(new NativeImageResourceBuildItem("pdq.properties"));
resource.produce(new NativeImageResourceBuildItem("com/ibm/db2/cmx/runtime/internal/resources/messages.properties"));
}

@BuildStep
NativeImageConfigBuildItem build() {
// The DB2 JDBC driver has been updated with conditional checks for the
Expand Down

0 comments on commit 0525f0f

Please sign in to comment.