This is an automated email from the ASF dual-hosted git repository. aldettinger pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
commit 6431de6d0027ab9367a78650df3627a8a7795beb Author: JiriOndrusek <[email protected]> AuthorDate: Mon Feb 6 14:05:18 2023 +0100 Fix Quartz clustered native image compilation failure Fixes #4468 --- .../quartz/graal/QuartzSubstitutions.java | 41 ++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/extensions/quartz/runtime/src/main/java/org/apache/camel/quarkus/component/quartz/graal/QuartzSubstitutions.java b/extensions/quartz/runtime/src/main/java/org/apache/camel/quarkus/component/quartz/graal/QuartzSubstitutions.java index 5cf282f74e..73ff2ebf52 100644 --- a/extensions/quartz/runtime/src/main/java/org/apache/camel/quarkus/component/quartz/graal/QuartzSubstitutions.java +++ b/extensions/quartz/runtime/src/main/java/org/apache/camel/quarkus/component/quartz/graal/QuartzSubstitutions.java @@ -20,11 +20,18 @@ import java.io.ByteArrayOutputStream; import java.sql.Blob; import java.sql.PreparedStatement; import java.sql.SQLException; +import java.util.Properties; import java.util.function.BooleanSupplier; +import com.oracle.svm.core.annotate.Alias; +import com.oracle.svm.core.annotate.Delete; +import com.oracle.svm.core.annotate.KeepOriginal; import com.oracle.svm.core.annotate.Substitute; import com.oracle.svm.core.annotate.TargetClass; +import org.quartz.impl.StdSchedulerFactory; import org.quartz.impl.jdbcjobstore.CUBRIDDelegate; +import org.quartz.utils.C3p0PoolingConnectionProvider; +import org.quartz.utils.PoolingConnectionProvider; public final class QuartzSubstitutions { } @@ -49,6 +56,40 @@ final class SubstituteCUBRIDDelegate { } } +// Cuts out unwanted references to C3P0ProxyConnection if c3p0 not on the classpath +@TargetClass(value = StdSchedulerFactory.class, onlyWith = C3p0IsAbsent.class) +@KeepOriginal +final class SubstituteStdSchedulerFactory { + + @Alias + private void setBeanProps(Object obj, Properties props) { + } + + @Substitute + private void populateProviderWithExtraProps(PoolingConnectionProvider cp, Properties props) throws Exception { + Properties copyProps = new Properties(); + copyProps.putAll(props); + + // Remove all the default properties first (they don't always match to setter name, and they are already + // been set!) + copyProps.remove(PoolingConnectionProvider.DB_DRIVER); + copyProps.remove(PoolingConnectionProvider.DB_URL); + copyProps.remove(PoolingConnectionProvider.DB_USER); + copyProps.remove(PoolingConnectionProvider.DB_PASSWORD); + copyProps.remove(PoolingConnectionProvider.DB_MAX_CONNECTIONS); + copyProps.remove(PoolingConnectionProvider.DB_VALIDATION_QUERY); + copyProps.remove(PoolingConnectionProvider.POOLING_PROVIDER); + + setBeanProps(cp.getDataSource(), copyProps); + } +} + +// Delete unwanted class C3p0PoolingConnectionProvider if c3p0 not on the classpath +@TargetClass(value = C3p0PoolingConnectionProvider.class, onlyWith = C3p0IsAbsent.class) +@Delete +final class SubstituteC3p0PoolingConnectionProvider { +} + final class C3p0IsAbsent implements BooleanSupplier { @Override public boolean getAsBoolean() {
