diff --git a/ehcache-core/src/main/java/org/ehcache/core/spi/service/InstantiatorService.java b/ehcache-core/src/main/java/org/ehcache/core/spi/service/InstantiatorService.java index bee8b3652e..f00124faf6 100644 --- a/ehcache-core/src/main/java/org/ehcache/core/spi/service/InstantiatorService.java +++ b/ehcache-core/src/main/java/org/ehcache/core/spi/service/InstantiatorService.java @@ -19,5 +19,5 @@ public interface InstantiatorService extends Service { - T instantiate(Class clazz, Object[] arguments); + T instantiate(Class clazz, Object ... arguments) throws IllegalArgumentException; } diff --git a/ehcache-impl/src/main/java/org/ehcache/impl/internal/classes/DefaultInstantiatorService.java b/ehcache-impl/src/main/java/org/ehcache/impl/internal/classes/DefaultInstantiatorService.java index c3b35a0891..cd4f1a9f57 100644 --- a/ehcache-impl/src/main/java/org/ehcache/impl/internal/classes/DefaultInstantiatorService.java +++ b/ehcache-impl/src/main/java/org/ehcache/impl/internal/classes/DefaultInstantiatorService.java @@ -33,7 +33,7 @@ public void stop() { } @Override - public T instantiate(Class clazz, Object[] arguments) { + public T instantiate(Class clazz, Object ... arguments) { try { return ConstructorUtils.invokeConstructor(clazz, arguments); } catch (ReflectiveOperationException e) { diff --git a/ehcache-transactions/src/jakarta/java/org/ehcache/transactions/xa/txmgr/provider/LookupTransactionManagerProvider.java b/ehcache-transactions/src/jakarta/java/org/ehcache/transactions/xa/txmgr/provider/LookupTransactionManagerProvider.java index 69d8edb413..83506918f8 100644 --- a/ehcache-transactions/src/jakarta/java/org/ehcache/transactions/xa/txmgr/provider/LookupTransactionManagerProvider.java +++ b/ehcache-transactions/src/jakarta/java/org/ehcache/transactions/xa/txmgr/provider/LookupTransactionManagerProvider.java @@ -17,7 +17,9 @@ package org.ehcache.transactions.xa.txmgr.provider; import jakarta.transaction.TransactionManager; +import org.ehcache.core.spi.service.InstantiatorService; import org.ehcache.spi.service.Service; +import org.ehcache.spi.service.ServiceDependencies; import org.ehcache.spi.service.ServiceProvider; import org.ehcache.transactions.xa.txmgr.TransactionManagerWrapper; @@ -37,10 +39,11 @@ * Note that in this scheme, the lookup instance is not expected to cache the {@code TransactionManagerWrapper} * unless it can be considered a singleton. */ +@ServiceDependencies(InstantiatorService.class) public class LookupTransactionManagerProvider implements TransactionManagerProvider { - private final TransactionManagerLookup lookup; - private volatile TransactionManagerWrapper transactionManagerWrapper; + private final LookupTransactionManagerProviderConfiguration config; + private TransactionManagerWrapper transactionManagerWrapper; /** * Creates a new instance with the provided configuration. @@ -53,11 +56,7 @@ public LookupTransactionManagerProvider(LookupTransactionManagerProviderConfigur if (config == null) { throw new NullPointerException("LookupTransactionManagerProviderConfiguration cannot be null"); } - try { - lookup = config.getTransactionManagerLookup().newInstance(); - } catch (InstantiationException | IllegalAccessException e) { - throw new IllegalArgumentException("Could not instantiate lookup class", e); - } + this.config = config; } /** @@ -73,7 +72,8 @@ public TransactionManagerWrapper getTransactionManagerWrappe */ @Override public void start(ServiceProvider serviceProvider) { - this.transactionManagerWrapper = lookup.lookupTransactionManagerWrapper(); + InstantiatorService instantiatorService = serviceProvider.getService(InstantiatorService.class); + this.transactionManagerWrapper = instantiatorService.instantiate(config.getTransactionManagerLookup()).lookupTransactionManagerWrapper(); } /** diff --git a/ehcache-transactions/src/main/java/org/ehcache/transactions/xa/txmgr/provider/LookupTransactionManagerProvider.java b/ehcache-transactions/src/main/java/org/ehcache/transactions/xa/txmgr/provider/LookupTransactionManagerProvider.java index c3d2918503..bdeb072d85 100644 --- a/ehcache-transactions/src/main/java/org/ehcache/transactions/xa/txmgr/provider/LookupTransactionManagerProvider.java +++ b/ehcache-transactions/src/main/java/org/ehcache/transactions/xa/txmgr/provider/LookupTransactionManagerProvider.java @@ -16,7 +16,9 @@ package org.ehcache.transactions.xa.txmgr.provider; +import org.ehcache.core.spi.service.InstantiatorService; import org.ehcache.spi.service.Service; +import org.ehcache.spi.service.ServiceDependencies; import org.ehcache.spi.service.ServiceProvider; import org.ehcache.transactions.xa.txmgr.TransactionManagerWrapper; @@ -38,10 +40,11 @@ * Note that in this scheme, the lookup instance is not expected to cache the {@code TransactionManagerWrapper} * unless it can be considered a singleton. */ +@ServiceDependencies(InstantiatorService.class) public class LookupTransactionManagerProvider implements TransactionManagerProvider { - private final TransactionManagerLookup lookup; - private volatile TransactionManagerWrapper transactionManagerWrapper; + private final LookupTransactionManagerProviderConfiguration config; + private TransactionManagerWrapper transactionManagerWrapper; /** * Creates a new instance with the provided configuration. @@ -54,11 +57,7 @@ public LookupTransactionManagerProvider(LookupTransactionManagerProviderConfigur if (config == null) { throw new NullPointerException("LookupTransactionManagerProviderConfiguration cannot be null"); } - try { - lookup = config.getTransactionManagerLookup().newInstance(); - } catch (InstantiationException | IllegalAccessException e) { - throw new IllegalArgumentException("Could not instantiate lookup class", e); - } + this.config = config; } /** @@ -74,7 +73,8 @@ public TransactionManagerWrapper getTransactionManagerWrappe */ @Override public void start(ServiceProvider serviceProvider) { - this.transactionManagerWrapper = lookup.lookupTransactionManagerWrapper(); + InstantiatorService instantiatorService = serviceProvider.getService(InstantiatorService.class); + this.transactionManagerWrapper = instantiatorService.instantiate(config.getTransactionManagerLookup()).lookupTransactionManagerWrapper(); } /**