From de2dbb25bad4dd0f036543e9a2219dbf328c4588 Mon Sep 17 00:00:00 2001 From: Zheng Feng Date: Fri, 26 Apr 2024 16:12:18 +0800 Subject: [PATCH] Make all Record class and BeanPopulator to init at runtime --- .../jta/deployment/NarayanaJtaProcessor.java | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/extensions/narayana-jta/deployment/src/main/java/io/quarkus/narayana/jta/deployment/NarayanaJtaProcessor.java b/extensions/narayana-jta/deployment/src/main/java/io/quarkus/narayana/jta/deployment/NarayanaJtaProcessor.java index 135e39150cd2a..ca490cbb3496f 100644 --- a/extensions/narayana-jta/deployment/src/main/java/io/quarkus/narayana/jta/deployment/NarayanaJtaProcessor.java +++ b/extensions/narayana-jta/deployment/src/main/java/io/quarkus/narayana/jta/deployment/NarayanaJtaProcessor.java @@ -15,7 +15,11 @@ import jakarta.transaction.TransactionManager; import jakarta.transaction.TransactionScoped; +import com.arjuna.ats.arjuna.common.CoordinatorEnvironmentBean; +import com.arjuna.ats.arjuna.common.CoreEnvironmentBean; import com.arjuna.ats.arjuna.common.ObjectStoreEnvironmentBean; +import com.arjuna.ats.arjuna.common.RecoveryEnvironmentBean; +import com.arjuna.ats.arjuna.coordinator.AbstractRecord; import com.arjuna.ats.arjuna.recovery.TransactionStatusConnectionManager; import com.arjuna.ats.internal.arjuna.coordinator.CheckedActionFactoryImple; import com.arjuna.ats.internal.arjuna.objectstore.ShadowNoFileLockStore; @@ -32,10 +36,15 @@ import com.arjuna.ats.internal.jta.recovery.arjunacore.RecoverConnectableAtomicAction; import com.arjuna.ats.internal.jta.recovery.arjunacore.XARecoveryModule; import com.arjuna.ats.internal.jta.resources.arjunacore.XAResourceRecord; +import com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple; import com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionManagerImple; import com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionSynchronizationRegistryImple; import com.arjuna.ats.internal.jta.transaction.arjunacore.UserTransactionImple; +import com.arjuna.ats.jdbc.common.JDBCEnvironmentBean; import com.arjuna.ats.jta.common.JTAEnvironmentBean; +import com.arjuna.ats.jta.resources.LastResourceCommitOptimisation; +import com.arjuna.ats.txoj.common.TxojEnvironmentBean; +import com.arjuna.common.internal.util.propertyservice.BeanPopulator; import com.arjuna.common.util.propertyservice.PropertiesFactory; import io.quarkus.agroal.spi.JdbcDataSourceBuildItem; @@ -108,16 +117,28 @@ public void build(NarayanaJtaRecorder recorder, runtimeInit.produce(new RuntimeInitializedClassBuildItem(TransactionStatusConnectionManager.class.getName())); runtimeInit.produce(new RuntimeInitializedClassBuildItem(JTAActionStatusServiceXAResourceOrphanFilter.class.getName())); runtimeInit.produce(new RuntimeInitializedClassBuildItem(AtomicActionExpiryScanner.class.getName())); + runtimeInit.produce(new RuntimeInitializedClassBuildItem(TransactionImple.class.getName())); + runtimeInit.produce(new RuntimeInitializedClassBuildItem(BeanPopulator.class.getName())); + + indexBuildItem.getIndex().getAllKnownSubclasses(AbstractRecord.class).stream() + .map(r -> new RuntimeInitializedClassBuildItem(r.name().toString())) + .forEach(runtimeInit::produce); indexBuildItem.getIndex().getAllKnownSubclasses(JDBCImple_driver.class).stream() .map(impl -> ReflectiveClassBuildItem.builder(impl.name().toString()).build()) .forEach(reflectiveClass::produce); reflectiveClass.produce(ReflectiveClassBuildItem.builder(JTAEnvironmentBean.class, - UserTransactionImple.class, + CoreEnvironmentBean.class, + CoordinatorEnvironmentBean.class, + JDBCEnvironmentBean.class, + ObjectStoreEnvironmentBean.class, + TxojEnvironmentBean.class, + RecoveryEnvironmentBean.class).fields().methods().build()); + reflectiveClass.produce(ReflectiveClassBuildItem.builder(UserTransactionImple.class, CheckedActionFactoryImple.class, + LastResourceCommitOptimisation.class, TransactionManagerImple.class, TransactionSynchronizationRegistryImple.class, - ObjectStoreEnvironmentBean.class, ShadowNoFileLockStore.class, JDBCStore.class, SocketProcessId.class,