Skip to content

Commit 440a01a

Browse files
Major restructuring of configuration
1 parent cdb294b commit 440a01a

8 files changed

Lines changed: 45 additions & 69 deletions

File tree

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,7 @@
2121
*/
2222
@Configuration
2323
@EnableEclipseStoreRepositories(
24-
value = "software.xdev.spring.data.eclipse.store.demo.dual.storage.invoice",
25-
clientConfiguration = "persistenceInvoiceConfiguration"
24+
basePackages = "software.xdev.spring.data.eclipse.store.demo.dual.storage.invoice"
2625
)
2726
public class PersistenceInvoiceConfiguration extends EclipseStoreClientConfiguration
2827
{

spring-data-eclipse-store-demo/src/main/java/software/xdev/spring/data/eclipse/store/demo/dual/storage/person/PersistencePersonConfiguration.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,7 @@
2020
*/
2121
@Configuration
2222
@EnableEclipseStoreRepositories(
23-
value = "software.xdev.spring.data.eclipse.store.demo.dual.storage.person",
24-
clientConfigurationClass = PersistencePersonConfiguration.class
23+
basePackages = "software.xdev.spring.data.eclipse.store.demo.dual.storage.person"
2524
)
2625
public class PersistencePersonConfiguration extends EclipseStoreClientConfiguration
2726
{

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import org.eclipse.store.integrations.spring.boot.types.configuration.EclipseStoreProperties;
1919
import org.eclipse.store.integrations.spring.boot.types.factories.EmbeddedStorageFoundationFactory;
2020
import org.springframework.beans.factory.annotation.Autowired;
21+
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
2122
import org.springframework.context.annotation.Configuration;
2223

2324

@@ -27,6 +28,7 @@
2728
* he created a different {@link EclipseStoreClientConfiguration}.
2829
*/
2930
@Configuration(proxyBeanMethods = false)
31+
@ConditionalOnMissingBean(EclipseStoreClientConfiguration.class)
3032
public class DefaultEclipseStoreClientConfiguration extends EclipseStoreClientConfiguration
3133
{
3234
@Autowired

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import org.eclipse.store.storage.embedded.types.EmbeddedStorageFoundation;
2121
import org.springframework.beans.factory.ObjectProvider;
2222
import org.springframework.beans.factory.annotation.Autowired;
23-
import org.springframework.beans.factory.annotation.Qualifier;
2423
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
2524
import org.springframework.boot.autoconfigure.transaction.TransactionManagerCustomizers;
2625
import org.springframework.context.annotation.Bean;
@@ -52,6 +51,8 @@ public abstract class EclipseStoreClientConfiguration implements EclipseStoreSto
5251
private final EclipseStoreProperties defaultEclipseStoreProperties;
5352
private final EmbeddedStorageFoundationFactory defaultEclipseStoreProvider;
5453

54+
private EclipseStoreStorage storageInstance;
55+
5556
@Autowired
5657
protected EclipseStoreClientConfiguration(
5758
final EclipseStoreProperties defaultEclipseStoreProperties,
@@ -62,9 +63,7 @@ protected EclipseStoreClientConfiguration(
6263
this.defaultEclipseStoreProvider = defaultEclipseStoreProvider;
6364
}
6465

65-
private EclipseStoreStorage storageInstance;
66-
67-
public EclipseStoreProperties getStoreConfiguration()
66+
public EclipseStoreProperties getEclipseStoreProperties()
6867
{
6968
return this.defaultEclipseStoreProperties;
7069
}
@@ -76,12 +75,12 @@ public EmbeddedStorageFoundationFactory getStoreProvider()
7675

7776
/**
7877
* Creates a {@link EmbeddedStorageFoundation} out of the two other provided functions {@link #getStoreProvider()}
79-
* and {@link #getStoreConfiguration()}.
78+
* and {@link #getEclipseStoreProperties()}.
8079
*/
8180
@Override
8281
public EmbeddedStorageFoundation<?> createEmbeddedStorageFoundation()
8382
{
84-
return this.getStoreProvider().createStorageFoundation(this.getStoreConfiguration());
83+
return this.getStoreProvider().createStorageFoundation(this.getEclipseStoreProperties());
8584
}
8685

8786
@Bean
@@ -99,6 +98,7 @@ public PlatformTransactionManager transactionManager(
9998
@Bean
10099
public EclipseStoreStorage getStorageInstance()
101100
{
101+
// hier muss was gemacht werden.
102102
if(this.storageInstance == null)
103103
{
104104
this.storageInstance = new EclipseStoreStorage(this);

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

Lines changed: 8 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,6 @@
1515
*/
1616
package software.xdev.spring.data.eclipse.store.repository.config;
1717

18-
import static software.xdev.spring.data.eclipse.store.repository.config.EnableEclipseStoreRepositories.CLIENT_CONFIGURATION_ANNOTATION_VALUE;
19-
import static software.xdev.spring.data.eclipse.store.repository.config.EnableEclipseStoreRepositories.CLIENT_CONFIGURATION_CLASS_ANNOTATION_VALUE;
20-
2118
import java.lang.annotation.Annotation;
2219
import java.util.Collection;
2320
import java.util.Collections;
@@ -26,11 +23,10 @@
2623
import jakarta.annotation.Nonnull;
2724

2825
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
29-
import org.springframework.core.annotation.AnnotationAttributes;
3026
import org.springframework.data.repository.config.AnnotationRepositoryConfigurationSource;
3127
import org.springframework.data.repository.config.RepositoryConfigurationExtension;
3228
import org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport;
33-
import org.springframework.util.ClassUtils;
29+
import org.springframework.data.repository.core.RepositoryMetadata;
3430

3531
import software.xdev.spring.data.eclipse.store.repository.interfaces.EclipseStoreCrudRepository;
3632
import software.xdev.spring.data.eclipse.store.repository.interfaces.EclipseStoreCustomRepository;
@@ -70,23 +66,10 @@ public String getRepositoryFactoryBeanClassName()
7066
return EclipseStoreRepositoryFactoryBean.class.getName();
7167
}
7268

73-
/**
74-
* This method puts the {@link EclipseStoreRepositoryFactoryBean#configuration} in the created
75-
* {@link EclipseStoreRepositoryFactoryBean}. This is important to link
76-
* {@link EnableEclipseStoreRepositories#clientConfiguration()} with the actual
77-
* {@link software.xdev.spring.data.eclipse.store.repository.EclipseStoreStorage}.
78-
*/
7969
@Override
8070
public void postProcess(final BeanDefinitionBuilder builder, final AnnotationRepositoryConfigurationSource config)
8171
{
82-
final AnnotationAttributes attributes = config.getAttributes();
83-
final Class<?> configurationClass = attributes.getClass(CLIENT_CONFIGURATION_CLASS_ANNOTATION_VALUE);
84-
String configurationString = attributes.getString(CLIENT_CONFIGURATION_ANNOTATION_VALUE);
85-
if(!configurationClass.equals(DefaultEclipseStoreClientConfiguration.class))
86-
{
87-
configurationString = ClassUtils.getShortNameAsProperty(configurationClass);
88-
}
89-
builder.addPropertyReference("configuration", configurationString);
72+
9073
}
9174

9275
@Override
@@ -116,4 +99,10 @@ protected Collection<Class<?>> getIdentifyingTypes()
11699
EclipseStoreListCrudRepository.class
117100
);
118101
}
102+
103+
@Override
104+
protected boolean useRepositoryConfiguration(final RepositoryMetadata metadata)
105+
{
106+
return super.useRepositoryConfiguration(metadata);
107+
}
119108
}

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

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import java.lang.annotation.Target;
2424

2525
import org.springframework.beans.factory.FactoryBean;
26-
import org.springframework.context.annotation.ComponentScan;
2726
import org.springframework.context.annotation.ComponentScan.Filter;
2827
import org.springframework.context.annotation.Import;
2928
import org.springframework.data.repository.config.DefaultRepositoryBaseClass;
@@ -42,10 +41,6 @@
4241
@Documented
4342
@Inherited
4443
@Import(EclipseStoreRepositoriesRegistrar.class)
45-
@ComponentScan({
46-
"software.xdev.spring.data.eclipse.store.importer",
47-
"software.xdev.spring.data.eclipse.store.repository"
48-
})
4944
public @interface EnableEclipseStoreRepositories
5045
{
5146

@@ -81,23 +76,6 @@
8176
*/
8277
Filter[] excludeFilters() default {};
8378

84-
String CLIENT_CONFIGURATION_ANNOTATION_VALUE = "clientConfiguration";
85-
86-
/**
87-
* @return the name of a {@link EclipseStoreClientConfiguration} to use.
88-
* {@link DefaultEclipseStoreClientConfiguration} is used if not defined.
89-
*/
90-
String clientConfiguration() default "defaultEclipseStoreClientConfiguration";
91-
92-
String CLIENT_CONFIGURATION_CLASS_ANNOTATION_VALUE = "clientConfigurationClass";
93-
94-
/**
95-
* @return the class of a {@link EclipseStoreClientConfiguration} to use.
96-
* {@link DefaultEclipseStoreClientConfiguration} is used if not defined.
97-
*/
98-
Class<? extends EclipseStoreClientConfiguration> clientConfigurationClass()
99-
default DefaultEclipseStoreClientConfiguration.class;
100-
10179
/**
10280
* Returns the postfix to be used when looking up custom repository implementations. Defaults to {@literal Impl} .
10381
* So for a repository named {@code PersonRepository} the corresponding implementation class will be looked up

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

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919

2020
import jakarta.annotation.Nonnull;
2121

22+
import org.springframework.beans.BeansException;
23+
import org.springframework.beans.factory.BeanFactory;
2224
import org.springframework.data.mapping.model.BasicPersistentEntity;
2325
import org.springframework.data.repository.core.EntityInformation;
2426
import org.springframework.data.repository.core.RepositoryInformation;
@@ -42,11 +44,17 @@
4244
*/
4345
public class EclipseStoreRepositoryFactory extends RepositoryFactorySupport
4446
{
45-
private final EclipseStoreStorage storage;
47+
private BeanFactory beanFactory;
4648

47-
public EclipseStoreRepositoryFactory(final EclipseStoreStorage storage)
49+
public EclipseStoreRepositoryFactory()
4850
{
49-
this.storage = storage;
51+
}
52+
53+
@Override
54+
public void setBeanFactory(final BeanFactory beanFactory) throws BeansException
55+
{
56+
super.setBeanFactory(beanFactory);
57+
this.beanFactory = beanFactory;
5058
}
5159

5260
@Override
@@ -62,17 +70,23 @@ protected Optional<QueryLookupStrategy> getQueryLookupStrategy(
6270
@Nullable final QueryLookupStrategy.Key key,
6371
@Nonnull final QueryMethodEvaluationContextProvider evaluationContextProvider)
6472
{
65-
return Optional.of(new EclipseStoreQueryLookupStrategy(this.storage, this::createWorkingCopier));
73+
return Optional.of(new EclipseStoreQueryLookupStrategy(this.getEclipseStoreStorage(), this::createWorkingCopier));
74+
}
75+
76+
private EclipseStoreStorage getEclipseStoreStorage()
77+
{
78+
return this.beanFactory.getBean(EclipseStoreStorage.class);
6679
}
6780

6881
@Override
6982
@Nonnull
7083
protected Object getTargetRepository(@Nonnull final RepositoryInformation metadata)
7184
{
85+
final EclipseStoreStorage eclipseStoreStorage = this.getEclipseStoreStorage();
7286
return this.getTargetRepositoryViaReflection(
7387
metadata,
74-
this.storage,
75-
this.createWorkingCopier(metadata.getDomainType(), this.storage),
88+
eclipseStoreStorage,
89+
this.createWorkingCopier(metadata.getDomainType(), eclipseStoreStorage),
7690
metadata.getDomainType()
7791
);
7892
}

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

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -25,37 +25,32 @@
2525
import org.springframework.data.repository.core.support.RepositoryFactorySupport;
2626
import org.springframework.stereotype.Component;
2727

28-
import software.xdev.spring.data.eclipse.store.repository.config.EclipseStoreClientConfiguration;
28+
import software.xdev.spring.data.eclipse.store.repository.EclipseStoreStorage;
2929

3030

3131
@ComponentScan({
3232
"software.xdev.spring.data.eclipse.store.repository",
3333
"software.xdev.spring.data.eclipse.store.transactions"
34-
})
34+
})
3535
@Component
3636
public class EclipseStoreRepositoryFactoryBean<T extends Repository<S, ID>, S, ID extends Serializable>
3737
extends RepositoryFactoryBeanSupport<T, S, ID>
3838
{
39-
private EclipseStoreClientConfiguration configuration;
39+
private final EclipseStoreStorage storage;
4040

4141
public EclipseStoreRepositoryFactoryBean(
42-
final Class<? extends T> repositoryInterface
42+
final Class<? extends T> repositoryInterface,
43+
final EclipseStoreStorage storage
4344
)
4445
{
4546
super(repositoryInterface);
46-
}
47-
48-
public void setConfiguration(final EclipseStoreClientConfiguration configuration)
49-
{
50-
this.configuration = configuration;
47+
this.storage = storage;
5148
}
5249

5350
@Override
5451
@Nonnull
5552
protected RepositoryFactorySupport createRepositoryFactory()
5653
{
57-
return new EclipseStoreRepositoryFactory(
58-
this.configuration.getStorageInstance()
59-
);
54+
return new EclipseStoreRepositoryFactory();
6055
}
6156
}

0 commit comments

Comments
 (0)