2

I have a spring boot(2.3.0.RELEASE) application which uses hibernate(5.4.15.Final) and spring-session-data-redis. Sessions are persisted to redis using redisson. The Redisson client is created programmatically and is exposed as a Bean.

Is there a way to re-use the above bean.

What I have tried:

I have created the following class that tries to inject the RedissonClient by extending RedissonRegionFactory

@DependsOn("redis-client")
public class RedissonCachingConfiguration extends RedissonRegionFactory {
    private RedissonClient redissonClient;

    @Autowired
    public RedissonCachingConfiguration(RedissonClient redissonClient) {
        this.redissonClient = redissonClient;
    }

    @Override
    protected RedissonClient createRedissonClient(Map properties) {
        return redissonClient;
    }
}

But RedissonClient is null in the constructor and the following stack trace is thrown.

Caused by: org.hibernate.boot.registry.selector.spi.StrategySelectionException: Could not instantiate named strategy class [com.sso.relay.configuration.RedissonCachingConfiguration]
    at org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.resolveStrategy(StrategySelectorImpl.java:247) ~[hibernate-core-5.4.15.Final.jar:5.4.15.Final]
    at org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.resolveStrategy(StrategySelectorImpl.java:192) ~[hibernate-core-5.4.15.Final.jar:5.4.15.Final]
    at org.hibernate.cache.internal.RegionFactoryInitiator.resolveRegionFactory(RegionFactoryInitiator.java:93) ~[hibernate-core-5.4.15.Final.jar:5.4.15.Final]
    at org.hibernate.cache.internal.RegionFactoryInitiator.initiateService(RegionFactoryInitiator.java:47) ~[hibernate-core-5.4.15.Final.jar:5.4.15.Final]
    at org.hibernate.cache.internal.RegionFactoryInitiator.initiateService(RegionFactoryInitiator.java:32) ~[hibernate-core-5.4.15.Final.jar:5.4.15.Final]
    at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:101) ~[hibernate-core-5.4.15.Final.jar:5.4.15.Final]
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:263) ~[hibernate-core-5.4.15.Final.jar:5.4.15.Final]
    ... 15 common frames omitted
Caused by: org.hibernate.service.spi.ServiceException: Unable to call constructor of RegionFactory impl [com.sso.relay.configuration.RedissonCachingConfiguration]
    at org.hibernate.cache.internal.StrategyCreatorRegionFactoryImpl.create(StrategyCreatorRegionFactoryImpl.java:65) ~[hibernate-core-5.4.15.Final.jar:5.4.15.Final]
    at org.hibernate.cache.internal.StrategyCreatorRegionFactoryImpl.create(StrategyCreatorRegionFactoryImpl.java:23) ~[hibernate-core-5.4.15.Final.jar:5.4.15.Final]
    at org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.resolveStrategy(StrategySelectorImpl.java:243) ~[hibernate-core-5.4.15.Final.jar:5.4.15.Final]
    ... 21 common frames omitted
Caused by: java.lang.InstantiationException: com.sso.relay.configuration.RedissonCachingConfiguration
    at java.base/java.lang.Class.newInstance(Class.java:571) ~[na:na]
    at org.hibernate.cache.internal.StrategyCreatorRegionFactoryImpl.create(StrategyCreatorRegionFactoryImpl.java:62) ~[hibernate-core-5.4.15.Final.jar:5.4.15.Final]
    ... 23 common frames omitted
Caused by: java.lang.NoSuchMethodException: com.sso.relay.configuration.RedissonCachingConfiguration.<init>()
    at java.base/java.lang.Class.getConstructor0(Class.java:3349) ~[na:na]
    at java.base/java.lang.Class.newInstance(Class.java:556) ~[na:na]
    ... 24 common frames omitted

It looks to be trying to call the no-args constructor but there isn't one. I have tried adding a no-args constructor with setter injection but the client isn't injected.

Smiranda
  • 21
  • 1

0 Answers0