Skip to content

Commit 10bff63

Browse files
Simplified configuration injection in EclipseStoreRepositoryFactoryBean
1 parent de7559e commit 10bff63

4 files changed

Lines changed: 41 additions & 48 deletions

File tree

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
# 2.5.1
2+
3+
* Simplified configuration injection in ``EclipseStoreRepositoryFactoryBean``.
4+
15
# 2.5.0
26

37
* Updated org.springframework.boot.version to v3.4.1

spring-data-eclipse-store-demo/src/main/java/software/xdev/spring/data/eclipse/store/demo/dual/storage/invoice/PersistenceInvoiceConfiguration.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,14 @@
1111
import org.springframework.beans.factory.annotation.Autowired;
1212
import org.springframework.context.annotation.Configuration;
1313

14+
import software.xdev.spring.data.eclipse.store.demo.dual.storage.person.PersistencePersonConfiguration;
1415
import software.xdev.spring.data.eclipse.store.repository.config.EclipseStoreClientConfiguration;
1516
import software.xdev.spring.data.eclipse.store.repository.config.EnableEclipseStoreRepositories;
1617

1718

1819
/**
19-
* To set this configuration for the package we use the {@link EnableEclipseStoreRepositories#clientConfiguration()}
20-
* ()}. Another example:
20+
* To set this configuration for the package we use the {@link EnableEclipseStoreRepositories#clientConfiguration()}.
21+
* Another example:
2122
* {@link software.xdev.spring.data.eclipse.store.demo.dual.storage.person.PersistencePersonConfiguration}
2223
*/
2324
@Configuration
@@ -49,7 +50,7 @@ public EmbeddedStorageFoundation<?> createEmbeddedStorageFoundation()
4950
final EmbeddedStorageFoundation<?> storageFoundation =
5051
EmbeddedStorage.Foundation(Storage.Configuration(Storage.FileProvider(Path.of(STORAGE_PATH))));
5152
// This is only needed, if a different ClassLoader is used (e.g. when using spring-dev-tools)
52-
storageFoundation.getConnectionFoundation().setClassLoaderProvider(getClassLoaderProvider());
53+
storageFoundation.getConnectionFoundation().setClassLoaderProvider(this.getClassLoaderProvider());
5354
return storageFoundation;
5455
}
5556
}

spring-data-eclipse-store/src/main/java/software/xdev/spring/data/eclipse/store/repository/config/EclipseStoreRepositoryConfigurationExtension.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ public String getRepositoryFactoryBeanClassName()
8181
* This is surely not the perfect way to get the correct configuration of that context, but it works with multiple
8282
* configurations, with no configuration and with a single configuration.
8383
*/
84+
@SuppressWarnings("NullableProblems")
8485
@Override
8586
public void postProcess(final BeanDefinitionBuilder builder, final AnnotationRepositoryConfigurationSource config)
8687
{

spring-data-eclipse-store/src/main/java/software/xdev/spring/data/eclipse/store/repository/support/EclipseStoreRepositoryFactoryBean.java

Lines changed: 32 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -16,23 +16,24 @@
1616
package software.xdev.spring.data.eclipse.store.repository.support;
1717

1818
import java.io.Serializable;
19-
import java.util.Objects;
19+
import java.util.List;
20+
import java.util.Optional;
2021

2122
import jakarta.annotation.Nonnull;
2223

2324
import org.slf4j.Logger;
2425
import org.slf4j.LoggerFactory;
25-
import org.springframework.beans.BeansException;
26-
import org.springframework.beans.factory.BeanFactory;
26+
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
27+
import org.springframework.beans.factory.annotation.Autowired;
2728
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
2829
import org.springframework.context.annotation.ComponentScan;
2930
import org.springframework.data.repository.Repository;
3031
import org.springframework.data.repository.config.AnnotationRepositoryConfigurationSource;
3132
import org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport;
3233
import org.springframework.data.repository.core.support.RepositoryFactorySupport;
3334
import org.springframework.stereotype.Component;
35+
import org.springframework.util.ClassUtils;
3436

35-
import software.xdev.spring.data.eclipse.store.repository.config.DefaultEclipseStoreClientConfiguration;
3637
import software.xdev.spring.data.eclipse.store.repository.config.EclipseStoreClientConfiguration;
3738
import software.xdev.spring.data.eclipse.store.repository.config.EclipseStoreRepositoryConfigurationExtension;
3839

@@ -47,9 +48,9 @@ public class EclipseStoreRepositoryFactoryBean<T extends Repository<S, ID>, S, I
4748
extends RepositoryFactoryBeanSupport<T, S, ID>
4849
{
4950
private static final Logger LOG = LoggerFactory.getLogger(EclipseStoreRepositoryFactoryBean.class);
50-
private EclipseStoreClientConfiguration configuration;
51-
private BeanFactory beanFactory;
5251
private Class<?> configurationClass;
52+
@Autowired
53+
private List<EclipseStoreClientConfiguration> configurations;
5354

5455
public EclipseStoreRepositoryFactoryBean(
5556
final Class<? extends T> repositoryInterface)
@@ -67,66 +68,52 @@ public void setConfigurationClass(final Class<?> configurationClass)
6768
this.configurationClass = configurationClass;
6869
}
6970

70-
@Override
71-
public void setBeanFactory(final BeanFactory beanFactory)
72-
{
73-
super.setBeanFactory(beanFactory);
74-
this.beanFactory = beanFactory;
75-
}
76-
7771
@Override
7872
@Nonnull
7973
protected RepositoryFactorySupport createRepositoryFactory()
8074
{
81-
final EclipseStoreClientConfiguration ensuredConfiguration = this.ensureConfiguration();
75+
final EclipseStoreClientConfiguration ensuredConfiguration = this.getSuitableConfiguration();
8276
return new EclipseStoreRepositoryFactory(
8377
ensuredConfiguration.getStorageInstance(),
8478
ensuredConfiguration.getTransactionManagerInstance(),
8579
ensuredConfiguration.getValidator()
8680
);
8781
}
8882

89-
private EclipseStoreClientConfiguration ensureConfiguration()
90-
{
91-
if(this.configuration == null)
92-
{
93-
this.configuration = this.createConfiguration();
94-
}
95-
return this.configuration;
96-
}
97-
9883
/**
9984
* This is surely not the perfect way to get the correct configuration of that context, but it works with multiple
10085
* configurations, with no configuration and with a single configuration.
10186
* <p>
102-
* It checks if there is a configuration class defined (through
103-
* {@link EclipseStoreRepositoryConfigurationExtension}) and then tries to get the bean for it. If no configuration
104-
* is set, the {@link DefaultEclipseStoreClientConfiguration} is used.
87+
* It checks if any of the available configurations are suitable from the {@link #configurationClass}
88+
* and if so, returns it. Otherwise the
89+
* {@link software.xdev.spring.data.eclipse.store.repository.config.DefaultEclipseStoreClientConfiguration}
90+
* should be injected into the {@link #configurations} and get returned.
10591
* </p>
10692
*/
107-
private EclipseStoreClientConfiguration createConfiguration()
93+
private EclipseStoreClientConfiguration getSuitableConfiguration()
10894
{
109-
Objects.requireNonNull(this.beanFactory);
110-
try
95+
if(this.configurationClass == null && this.configurations.size() == 1)
11196
{
112-
if(this.configurationClass != null
113-
&& this.beanFactory.getBean(this.configurationClass)
114-
instanceof final EclipseStoreClientConfiguration eclipseStoreConfiguration
115-
)
116-
{
117-
return eclipseStoreConfiguration;
118-
}
97+
return this.configurations.get(0);
11998
}
120-
catch(final BeansException ex)
99+
final Optional<EclipseStoreClientConfiguration> definedConfiguration = this.configurations
100+
.stream()
101+
.filter(
102+
configuration ->
103+
{
104+
if(this.configurationClass != null)
105+
{
106+
return this.configurationClass.getName()
107+
.equals(ClassUtils.getUserClass(configuration).getName());
108+
}
109+
return false;
110+
}
111+
)
112+
.findAny();
113+
if(definedConfiguration.isEmpty())
121114
{
122-
LOG.warn(
123-
"Could not initiate Bean %s. Using %s instead."
124-
.formatted(
125-
this.configurationClass.getSimpleName(),
126-
DefaultEclipseStoreClientConfiguration.class.getSimpleName()
127-
),
128-
ex);
115+
throw new NoSuchBeanDefinitionException(this.configurationClass);
129116
}
130-
return this.beanFactory.getBean(DefaultEclipseStoreClientConfiguration.class);
117+
return definedConfiguration.get();
131118
}
132119
}

0 commit comments

Comments
 (0)