Skip to content

Commit 71b3121

Browse files
Implemented useful Configuration through Spring
1 parent 4be4932 commit 71b3121

33 files changed

+373
-208
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@ target/
6868

6969
# EclipseStore
7070
storage
71+
storage-person
72+
storage-invoice
7173
storage-jpa
7274

7375
# == IntelliJ ==
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,27 @@
11
package software.xdev.spring.data.eclipse.store.demo.dual.storage.invoice;
22

3+
import static org.eclipse.store.storage.embedded.types.EmbeddedStorage.Foundation;
4+
5+
import java.nio.file.Path;
6+
7+
import org.eclipse.store.storage.embedded.types.EmbeddedStorageFoundation;
8+
import org.eclipse.store.storage.types.Storage;
39
import org.springframework.context.annotation.Configuration;
410

11+
import software.xdev.spring.data.eclipse.store.repository.config.EclipseStoreClientConfiguration;
512
import software.xdev.spring.data.eclipse.store.repository.config.EnableEclipseStoreRepositories;
613

714

815
@Configuration
9-
@EnableEclipseStoreRepositories("software.xdev.spring.data.eclipse.store.demo.dual.storage.invoice")
10-
public class PersistenceInvoiceConfiguration
16+
@EnableEclipseStoreRepositories(
17+
value = "software.xdev.spring.data.eclipse.store.demo.dual.storage.invoice",
18+
clientConfiguration = "persistenceInvoiceConfiguration"
19+
)
20+
public class PersistenceInvoiceConfiguration extends EclipseStoreClientConfiguration
1121
{
22+
@Override
23+
public EmbeddedStorageFoundation<?> getEmbeddedStorageFoundation()
24+
{
25+
return Foundation(Storage.Configuration(Storage.FileProvider(Path.of("storage-invoice"))));
26+
}
1227
}
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,27 @@
11
package software.xdev.spring.data.eclipse.store.demo.dual.storage.person;
22

3+
import static org.eclipse.store.storage.embedded.types.EmbeddedStorage.Foundation;
4+
5+
import java.nio.file.Path;
6+
7+
import org.eclipse.store.storage.embedded.types.EmbeddedStorageFoundation;
8+
import org.eclipse.store.storage.types.Storage;
39
import org.springframework.context.annotation.Configuration;
410

11+
import software.xdev.spring.data.eclipse.store.repository.config.EclipseStoreClientConfiguration;
512
import software.xdev.spring.data.eclipse.store.repository.config.EnableEclipseStoreRepositories;
613

714

815
@Configuration
9-
@EnableEclipseStoreRepositories("software.xdev.spring.data.eclipse.store.demo.dual.storage.person")
10-
public class PersistencePersonConfiguration
16+
@EnableEclipseStoreRepositories(
17+
value = "software.xdev.spring.data.eclipse.store.demo.dual.storage.person",
18+
clientConfigurationClass = PersistencePersonConfiguration.class
19+
)
20+
public class PersistencePersonConfiguration extends EclipseStoreClientConfiguration
1121
{
22+
@Override
23+
public EmbeddedStorageFoundation<?> getEmbeddedStorageFoundation()
24+
{
25+
return Foundation(Storage.Configuration(Storage.FileProvider(Path.of("storage-person"))));
26+
}
1227
}

spring-data-eclipse-store-jpa/src/test/java/software/xdev/spring/data/eclipse/store/jpa/integration/IntegrationTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
import software.xdev.spring.data.eclipse.store.jpa.integration.repository.PersonToTestInEclipseStoreRepository;
2828
import software.xdev.spring.data.eclipse.store.jpa.integration.repository.PersonToTestInJpa;
2929
import software.xdev.spring.data.eclipse.store.jpa.integration.repository.PersonToTestInJpaRepository;
30-
import software.xdev.spring.data.eclipse.store.repository.EclipseStoreStorage;
30+
import software.xdev.spring.data.eclipse.store.repository.config.EclipseStoreClientConfiguration;
3131
import software.xdev.spring.data.eclipse.store.repository.support.SimpleEclipseStoreRepository;
3232

3333

@@ -44,7 +44,7 @@ class IntegrationTest
4444
private EclipseStoreDataImporterComponent eclipseStoreDataImporter;
4545

4646
@Autowired
47-
private EclipseStoreStorage eclipseStoreStorage;
47+
private EclipseStoreClientConfiguration configuration;
4848

4949
/**
5050
* Super simple test if there are any start-up errors when running parallel to a JPA configuration
@@ -72,10 +72,10 @@ void testEclipseStoreImport()
7272
final List<?> allEntities = simpleEclipseStoreRepositories.get(0).findAll();
7373
Assertions.assertEquals(1, allEntities.size());
7474

75-
this.eclipseStoreStorage.stop();
75+
this.configuration.getStorageInstance().stop();
7676
Assertions.assertEquals(
7777
1,
78-
this.eclipseStoreStorage.getEntityCount(PersonToTestInJpa.class),
78+
this.configuration.getStorageInstance().getEntityCount(PersonToTestInJpa.class),
7979
"After restart the imported entities are not there anymore.");
8080
}
8181

spring-data-eclipse-store-jpa/src/test/java/software/xdev/spring/data/eclipse/store/jpa/integration/TestConfiguration.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
import org.springframework.context.event.EventListener;
2929
import org.springframework.util.FileSystemUtils;
3030

31-
import software.xdev.spring.data.eclipse.store.repository.EclipseStoreStorage;
31+
import software.xdev.spring.data.eclipse.store.repository.config.EclipseStoreClientConfiguration;
3232
import software.xdev.spring.data.eclipse.store.repository.config.EnableEclipseStoreRepositories;
3333

3434

@@ -40,7 +40,7 @@
4040
public class TestConfiguration implements DisposableBean
4141
{
4242
@Autowired
43-
EclipseStoreStorage storage;
43+
EclipseStoreClientConfiguration configuration;
4444

4545
@Value("${org.eclipse.store.storage-directory}")
4646
private String storageDirectory;
@@ -49,15 +49,15 @@ public class TestConfiguration implements DisposableBean
4949
public void handleContextRefresh(final ContextRefreshedEvent event)
5050
{
5151
// Init with empty root object
52-
this.storage.clearData();
52+
this.configuration.getStorageInstance().clearData();
5353
}
5454

5555
@Override
5656
public void destroy() throws Exception
5757
{
5858
// End with empty root object
59-
this.storage.clearData();
60-
this.storage.stop();
59+
this.configuration.getStorageInstance().clearData();
60+
this.configuration.getStorageInstance().stop();
6161
FileSystemUtils.deleteRecursively(Path.of(this.storageDirectory));
6262
}
6363
}

spring-data-eclipse-store/src/main/java/software/xdev/spring/data/eclipse/store/importer/EclipseStoreDataImporter.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131

3232
import software.xdev.spring.data.eclipse.store.repository.EclipseStoreStorage;
3333
import software.xdev.spring.data.eclipse.store.repository.SupportedChecker;
34+
import software.xdev.spring.data.eclipse.store.repository.config.EclipseStoreClientConfiguration;
3435
import software.xdev.spring.data.eclipse.store.repository.support.SimpleEclipseStoreRepository;
3536
import software.xdev.spring.data.eclipse.store.repository.support.copier.working.RecursiveWorkingCopier;
3637

@@ -41,11 +42,11 @@
4142
public class EclipseStoreDataImporter
4243
{
4344
private static final Logger LOG = LoggerFactory.getLogger(EclipseStoreDataImporter.class);
44-
private final EclipseStoreStorage eclipseStoreStorage;
45+
private final EclipseStoreClientConfiguration configuration;
4546

46-
public EclipseStoreDataImporter(final EclipseStoreStorage eclipseStoreStorage)
47+
public EclipseStoreDataImporter(final EclipseStoreClientConfiguration configuration)
4748
{
48-
this.eclipseStoreStorage = eclipseStoreStorage;
49+
this.configuration = configuration;
4950
}
5051

5152
/**
@@ -196,13 +197,14 @@ private <T> void createRepositoryForType(
196197

197198
private <T> SimpleEclipseStoreRepository<T, ?> createEclipseStoreRepo(final Class<T> domainClass)
198199
{
200+
final EclipseStoreStorage storageInstance = this.configuration.getStorageInstance();
199201
return new SimpleEclipseStoreRepository<>(
200-
this.eclipseStoreStorage,
202+
storageInstance,
201203
new RecursiveWorkingCopier<>(
202204
domainClass,
203-
this.eclipseStoreStorage.getRegistry(),
204-
this.eclipseStoreStorage,
205-
this.eclipseStoreStorage,
205+
storageInstance.getRegistry(),
206+
storageInstance,
207+
storageInstance,
206208
new SupportedChecker.Implementation()),
207209
domainClass);
208210
}

spring-data-eclipse-store/src/main/java/software/xdev/spring/data/eclipse/store/importer/EclipseStoreDataImporterComponent.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
import org.springframework.context.ApplicationContext;
2424
import org.springframework.stereotype.Component;
2525

26-
import software.xdev.spring.data.eclipse.store.repository.EclipseStoreStorage;
26+
import software.xdev.spring.data.eclipse.store.repository.config.EclipseStoreClientConfiguration;
2727
import software.xdev.spring.data.eclipse.store.repository.support.SimpleEclipseStoreRepository;
2828

2929

@@ -37,10 +37,10 @@ public class EclipseStoreDataImporterComponent
3737
private final ApplicationContext applicationContext;
3838

3939
public EclipseStoreDataImporterComponent(
40-
final EclipseStoreStorage eclipseStoreStorage,
40+
final EclipseStoreClientConfiguration configuration,
4141
final ApplicationContext applicationContext)
4242
{
43-
this.importer = new EclipseStoreDataImporter(eclipseStoreStorage);
43+
this.importer = new EclipseStoreDataImporter(configuration);
4444
this.applicationContext = applicationContext;
4545
}
4646

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

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -26,22 +26,19 @@
2626
import org.eclipse.serializer.persistence.binary.jdk17.java.util.BinaryHandlerImmutableCollectionsList12;
2727
import org.eclipse.serializer.persistence.binary.jdk17.java.util.BinaryHandlerImmutableCollectionsSet12;
2828
import org.eclipse.serializer.persistence.types.Storer;
29-
import org.eclipse.store.integrations.spring.boot.types.EclipseStoreProvider;
30-
import org.eclipse.store.integrations.spring.boot.types.configuration.EclipseStoreProperties;
3129
import org.eclipse.store.storage.embedded.types.EmbeddedStorageFoundation;
3230
import org.eclipse.store.storage.types.StorageManager;
3331
import org.slf4j.Logger;
3432
import org.slf4j.LoggerFactory;
35-
import org.springframework.stereotype.Component;
3633

3734
import software.xdev.spring.data.eclipse.store.core.IdentitySet;
3835
import software.xdev.spring.data.eclipse.store.exceptions.AlreadyRegisteredException;
36+
import software.xdev.spring.data.eclipse.store.repository.config.EclipseStoreClientConfiguration;
37+
import software.xdev.spring.data.eclipse.store.repository.config.EclipseStoreStorageFoundationProvider;
3938
import software.xdev.spring.data.eclipse.store.repository.support.copier.id.IdSetter;
4039
import software.xdev.spring.data.eclipse.store.repository.support.reposyncer.RepositorySynchronizer;
4140
import software.xdev.spring.data.eclipse.store.repository.support.reposyncer.SimpleRepositorySynchronizer;
4241

43-
44-
@Component
4542
public class EclipseStoreStorage
4643
implements EntityListProvider, IdSetterProvider, PersistableChecker
4744
{
@@ -50,21 +47,17 @@ public class EclipseStoreStorage
5047
private final Map<Class<?>, IdSetter<?>> entityClassToIdSetter = new HashMap<>();
5148
private EntitySetCollector entitySetCollector;
5249
private PersistableChecker persistenceChecker;
53-
private final EclipseStoreProperties storeConfiguration;
54-
private final EclipseStoreProvider storeProvider;
50+
private final EclipseStoreStorageFoundationProvider foundationProvider;
5551

5652
private StorageManager storageManager;
5753
private Root root;
5854

5955
private final WorkingCopyRegistry registry = new WorkingCopyRegistry();
6056
private RepositorySynchronizer repositorySynchronizer;
6157

62-
public EclipseStoreStorage(
63-
final EclipseStoreProperties storeConfiguration,
64-
final EclipseStoreProvider storeProvider)
58+
public EclipseStoreStorage(final EclipseStoreClientConfiguration storeConfiguration)
6559
{
66-
this.storeConfiguration = storeConfiguration;
67-
this.storeProvider = storeProvider;
60+
this.foundationProvider = storeConfiguration;
6861
}
6962

7063
private synchronized StorageManager getInstanceOfStorageManager()
@@ -85,7 +78,7 @@ private synchronized void ensureEntitiesInRoot()
8578
LOG.info("Starting storage...");
8679
this.root = new Root();
8780
final EmbeddedStorageFoundation<?> embeddedStorageFoundation =
88-
this.storeProvider.createStorageFoundation(this.storeConfiguration);
81+
this.foundationProvider.getEmbeddedStorageFoundation();
8982
embeddedStorageFoundation.registerTypeHandler(BinaryHandlerImmutableCollectionsSet12.New());
9083
embeddedStorageFoundation.registerTypeHandler(BinaryHandlerImmutableCollectionsList12.New());
9184
this.storageManager = embeddedStorageFoundation.start(this.root);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/*
2+
* Copyright © 2023 XDEV Software (https://xdev.software)
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package software.xdev.spring.data.eclipse.store.repository.config;
17+
18+
import org.springframework.context.annotation.Configuration;
19+
20+
21+
@Configuration(proxyBeanMethods = false)
22+
public class DefaultEclipseStoreClientConfiguration extends EclipseStoreClientConfiguration
23+
{
24+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
/*
2+
* Copyright © 2023 XDEV Software (https://xdev.software)
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package software.xdev.spring.data.eclipse.store.repository.config;
17+
18+
import org.eclipse.store.integrations.spring.boot.types.EclipseStoreProvider;
19+
import org.eclipse.store.integrations.spring.boot.types.EclipseStoreProviderImpl;
20+
import org.eclipse.store.integrations.spring.boot.types.configuration.EclipseStoreProperties;
21+
import org.eclipse.store.storage.embedded.types.EmbeddedStorageFoundation;
22+
import org.springframework.beans.factory.annotation.Autowired;
23+
import org.springframework.context.annotation.Configuration;
24+
25+
import software.xdev.spring.data.eclipse.store.repository.EclipseStoreStorage;
26+
27+
28+
@Configuration(proxyBeanMethods = false)
29+
public abstract class EclipseStoreClientConfiguration implements EclipseStoreStorageFoundationProvider
30+
{
31+
@Autowired
32+
private EclipseStoreProperties defaultEclipseStoreProperties;
33+
34+
@Autowired
35+
private EclipseStoreProviderImpl defaultEclipseStoreProvider;
36+
37+
private EclipseStoreStorage storageInstance;
38+
39+
public EclipseStoreProperties getStoreConfiguration()
40+
{
41+
return this.defaultEclipseStoreProperties;
42+
}
43+
44+
public EclipseStoreProvider getStoreProvider()
45+
{
46+
return this.defaultEclipseStoreProvider;
47+
}
48+
49+
@Override
50+
public EmbeddedStorageFoundation<?> getEmbeddedStorageFoundation()
51+
{
52+
return this.getStoreProvider().createStorageFoundation(this.getStoreConfiguration());
53+
}
54+
55+
public EclipseStoreStorage getStorageInstance()
56+
{
57+
if(this.storageInstance == null)
58+
{
59+
this.storageInstance = new EclipseStoreStorage(this);
60+
}
61+
return this.storageInstance;
62+
}
63+
}

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

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,22 @@
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+
1821
import java.lang.annotation.Annotation;
1922
import java.util.Collection;
2023
import java.util.Collections;
2124
import java.util.List;
2225

2326
import jakarta.annotation.Nonnull;
2427

28+
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
29+
import org.springframework.core.annotation.AnnotationAttributes;
30+
import org.springframework.data.repository.config.AnnotationRepositoryConfigurationSource;
2531
import org.springframework.data.repository.config.RepositoryConfigurationExtension;
2632
import org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport;
33+
import org.springframework.util.ClassUtils;
2734

2835
import software.xdev.spring.data.eclipse.store.repository.interfaces.EclipseStoreCrudRepository;
2936
import software.xdev.spring.data.eclipse.store.repository.interfaces.EclipseStoreCustomRepository;
@@ -63,6 +70,19 @@ public String getRepositoryFactoryBeanClassName()
6370
return EclipseStoreRepositoryFactoryBean.class.getName();
6471
}
6572

73+
@Override
74+
public void postProcess(final BeanDefinitionBuilder builder, final AnnotationRepositoryConfigurationSource config)
75+
{
76+
final AnnotationAttributes attributes = config.getAttributes();
77+
final Class<?> configurationClass = attributes.getClass(CLIENT_CONFIGURATION_CLASS_ANNOTATION_VALUE);
78+
String configurationString = attributes.getString(CLIENT_CONFIGURATION_ANNOTATION_VALUE);
79+
if(!configurationClass.equals(DefaultEclipseStoreClientConfiguration.class))
80+
{
81+
configurationString = ClassUtils.getShortNameAsProperty(configurationClass);
82+
}
83+
builder.addPropertyReference("configuration", configurationString);
84+
}
85+
6686
@Override
6787
@Nonnull
6888
public String getModuleIdentifier()

0 commit comments

Comments
 (0)