Skip to content

Commit 706b340

Browse files
Data Migration working
1 parent 8247d36 commit 706b340

File tree

7 files changed

+58
-75
lines changed

7 files changed

+58
-75
lines changed

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

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import java.util.HashMap;
2121
import java.util.Map;
2222
import java.util.concurrent.ConcurrentHashMap;
23-
import java.util.function.Supplier;
2423

2524
import org.eclipse.serializer.persistence.binary.jdk17.java.util.BinaryHandlerImmutableCollectionsList12;
2625
import org.eclipse.serializer.persistence.binary.jdk17.java.util.BinaryHandlerImmutableCollectionsSet12;
@@ -33,7 +32,6 @@
3332
import org.slf4j.Logger;
3433
import org.slf4j.LoggerFactory;
3534

36-
import software.xdev.micromigration.migrater.MicroMigrater;
3735
import software.xdev.spring.data.eclipse.store.core.EntityListProvider;
3836
import software.xdev.spring.data.eclipse.store.core.EntityProvider;
3937
import software.xdev.spring.data.eclipse.store.exceptions.AlreadyRegisteredException;
@@ -81,7 +79,6 @@ public class EclipseStoreStorage
8179
private final Map<Class<?>, VersionManager<?>> versionManagers = new ConcurrentHashMap<>();
8280
private final EclipseStoreStorageFoundationProvider foundationProvider;
8381
private final ClassLoaderProvider classLoaderProvider;
84-
private final Supplier<MicroMigrater> dataMigraterProvider;
8582
private EntitySetCollector entitySetCollector;
8683
private PersistableChecker persistenceChecker;
8784
private EmbeddedStorageManager storageManager;
@@ -95,7 +92,6 @@ public EclipseStoreStorage(final EclipseStoreClientConfiguration storeConfigurat
9592
{
9693
this.foundationProvider = storeConfiguration;
9794
this.classLoaderProvider = storeConfiguration.getClassLoaderProvider();
98-
this.dataMigraterProvider = storeConfiguration::getDataMigrator;
9995
}
10096

10197
public EmbeddedStorageManager getInstanceOfStorageManager()

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,8 @@ public class DefaultEclipseStoreClientConfiguration extends EclipseStoreClientCo
3535
protected DefaultEclipseStoreClientConfiguration(
3636
final EclipseStoreProperties defaultEclipseStoreProperties,
3737
final EmbeddedStorageFoundationFactory defaultEclipseStoreProvider,
38-
final ClassLoaderProvider classLoaderProvider,
39-
final Optional<MicroMigrater> possibleMigrater)
38+
final ClassLoaderProvider classLoaderProvider)
4039
{
41-
super(defaultEclipseStoreProperties, defaultEclipseStoreProvider, classLoaderProvider, possibleMigrater);
40+
super(defaultEclipseStoreProperties, defaultEclipseStoreProvider, classLoaderProvider);
4241
}
4342
}

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

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

18-
import java.util.Optional;
19-
2018
import org.eclipse.serializer.reflect.ClassLoaderProvider;
2119
import org.eclipse.store.integrations.spring.boot.types.configuration.EclipseStoreProperties;
2220
import org.eclipse.store.integrations.spring.boot.types.factories.EmbeddedStorageFoundationFactory;
2321
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
2422
import org.springframework.context.annotation.Bean;
2523
import org.springframework.stereotype.Component;
2624

27-
import software.xdev.micromigration.migrater.MicroMigrater;
28-
2925

3026
@Component
3127
public class DefaultEclipseStoreClientConfigurationFactory
@@ -35,13 +31,11 @@ public class DefaultEclipseStoreClientConfigurationFactory
3531
public DefaultEclipseStoreClientConfiguration getEclipseStoreClientConfiguration(
3632
final EclipseStoreProperties defaultEclipseStoreProperties,
3733
final EmbeddedStorageFoundationFactory defaultEclipseStoreProvider,
38-
final ClassLoaderProvider classLoaderProvider,
39-
final Optional<MicroMigrater> possibleMigrater)
34+
final ClassLoaderProvider classLoaderProvider)
4035
{
4136
return new DefaultEclipseStoreClientConfiguration(
4237
defaultEclipseStoreProperties,
4338
defaultEclipseStoreProvider,
44-
classLoaderProvider,
45-
possibleMigrater);
39+
classLoaderProvider);
4640
}
4741
}

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

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

18-
import java.util.Optional;
19-
2018
import jakarta.validation.Validation;
2119
import jakarta.validation.Validator;
2220
import jakarta.validation.ValidatorFactory;
@@ -27,13 +25,16 @@
2725
import org.eclipse.store.storage.embedded.types.EmbeddedStorageFoundation;
2826
import org.slf4j.Logger;
2927
import org.slf4j.LoggerFactory;
28+
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
3029
import org.springframework.beans.factory.ObjectProvider;
3130
import org.springframework.beans.factory.annotation.Autowired;
3231
import org.springframework.beans.factory.annotation.Value;
3332
import org.springframework.boot.autoconfigure.transaction.TransactionManagerCustomizers;
33+
import org.springframework.context.ApplicationContext;
3434
import org.springframework.context.annotation.Bean;
3535
import org.springframework.context.annotation.ComponentScan;
3636
import org.springframework.context.annotation.Configuration;
37+
import org.springframework.context.annotation.Lazy;
3738
import org.springframework.context.event.ContextClosedEvent;
3839
import org.springframework.context.event.ContextRefreshedEvent;
3940
import org.springframework.context.event.EventListener;
@@ -81,8 +82,6 @@ public abstract class EclipseStoreClientConfiguration implements EclipseStoreSto
8182
@Value("${spring-data-eclipse-store.context-close-shutdown-storage.only-when-dev-tools:true}")
8283
protected boolean contextCloseShutdownStorageOnlyWhenDevTools;
8384

84-
protected MicroMigrater possibleMigrater;
85-
8685
/**
8786
* Upstream value from Spring Boot DevTools.
8887
*
@@ -92,31 +91,17 @@ public abstract class EclipseStoreClientConfiguration implements EclipseStoreSto
9291
protected boolean springDevtoolsRestartEnabled;
9392

9493
@SuppressWarnings("OptionalUsedAsFieldOrParameterType")
94+
@Lazy
9595
@Autowired
9696
protected EclipseStoreClientConfiguration(
9797
final EclipseStoreProperties defaultEclipseStoreProperties,
9898
final EmbeddedStorageFoundationFactory defaultEclipseStoreProvider,
99-
final ClassLoaderProvider classLoaderProvider,
100-
final Optional<MicroMigrater> possibleMigrater)
99+
final ClassLoaderProvider classLoaderProvider)
101100
{
102101
this.defaultEclipseStoreProperties = defaultEclipseStoreProperties;
103102
this.classLoaderProvider = classLoaderProvider;
104103
this.defaultEclipseStoreProperties.setAutoStart(false);
105104
this.defaultEclipseStoreProvider = defaultEclipseStoreProvider;
106-
this.possibleMigrater = possibleMigrater.orElse(null);
107-
}
108-
109-
protected EclipseStoreClientConfiguration(
110-
final EclipseStoreProperties defaultEclipseStoreProperties,
111-
final EmbeddedStorageFoundationFactory defaultEclipseStoreProvider,
112-
final ClassLoaderProvider classLoaderProvider)
113-
{
114-
this(
115-
defaultEclipseStoreProperties,
116-
defaultEclipseStoreProvider,
117-
classLoaderProvider,
118-
Optional.empty()
119-
);
120105
}
121106

122107
public EclipseStoreProperties getEclipseStoreProperties()
@@ -236,26 +221,28 @@ public Validator getValidator()
236221
}
237222
}
238223

224+
/**
225+
* <i>"Why don't you migrate the data wherever you call EclipseStoreMigrator.migrateStructure?"</i> - Because in
226+
* order to be able to access repositories in DataMigrationScripts, we can't have the migration-method block the
227+
* start of the storage. That would lead to a deadlock, and we don't want that.
228+
*/
239229
@EventListener
240230
public void migrateDataOnContextStarted(final ContextRefreshedEvent event)
241231
{
242-
// "Why don't you migrate the data wherever you call EclipseStoreMigrator.migrateStructure?" -
243-
// Because in order to be able to access repositories in DataMigrationScripts, we can't have
244-
// the migration-method block the start of the storage. That would lead to a deadlock, and we don't
245-
// want that.
246-
if(this.getDataMigrator() != null)
232+
final ApplicationContext applicationContext = event.getApplicationContext();
233+
try
247234
{
235+
final MicroMigrater dataMigrater = event.getApplicationContext().getBean(MicroMigrater.class);
248236
this.getStorageInstance().start(); // In case the storage hasn't started yet.
249237
EclipseStoreMigrator.migrateData(
250238
this.getStorageInstance().getRoot(),
251-
this.getDataMigrator(),
239+
dataMigrater,
252240
this.getStorageInstance().getInstanceOfStorageManager()
253241
);
254242
}
255-
}
256-
257-
public MicroMigrater getDataMigrator()
258-
{
259-
return this.possibleMigrater;
243+
catch(final NoSuchBeanDefinitionException e)
244+
{
245+
LOG.info("No migration of data needed since there is no migrater defined.");
246+
}
260247
}
261248
}

spring-data-eclipse-store/src/main/java/software/xdev/spring/data/eclipse/store/repository/root/data/version/DataMigrater.java

Lines changed: 31 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@
1616
package software.xdev.spring.data.eclipse.store.repository.root.data.version;
1717

1818
import java.util.List;
19+
import java.util.Optional;
1920
import java.util.TreeSet;
2021
import java.util.function.Consumer;
2122

2223
import org.springframework.beans.factory.annotation.Autowired;
23-
import org.springframework.context.annotation.Lazy;
2424
import org.springframework.stereotype.Component;
2525

2626
import software.xdev.micromigration.migrater.ExplicitMigrater;
@@ -30,16 +30,18 @@
3030
import software.xdev.micromigration.version.MigrationVersion;
3131
import software.xdev.micromigration.versionagnostic.VersionAgnosticMigrationEmbeddedStorageManager;
3232

33-
3433
@Component
3534
public class DataMigrater implements MicroMigrater
3635
{
37-
@Lazy
38-
@Autowired
39-
private List<DataMigrationScript> scripts;
40-
36+
private final List<DataMigrationScript> scripts;
4137
private ExplicitMigrater explicitMigrater;
4238

39+
@Autowired
40+
public DataMigrater(final Optional<List<DataMigrationScript>> scripts)
41+
{
42+
this.scripts = scripts.orElse(List.of());
43+
}
44+
4345
private ExplicitMigrater ensureExplicitMigrater()
4446
{
4547
if(this.explicitMigrater == null)
@@ -49,10 +51,19 @@ private ExplicitMigrater ensureExplicitMigrater()
4951
return this.explicitMigrater;
5052
}
5153

54+
private boolean isUseful()
55+
{
56+
return this.scripts != null && !this.scripts.isEmpty();
57+
}
58+
5259
@Override
5360
public TreeSet<? extends VersionAgnosticMigrationScript<?, ?>> getSortedScripts()
5461
{
55-
return this.ensureExplicitMigrater().getSortedScripts();
62+
if(this.isUseful())
63+
{
64+
return this.ensureExplicitMigrater().getSortedScripts();
65+
}
66+
return new TreeSet<>();
5667
}
5768

5869
@Override
@@ -61,7 +72,11 @@ private ExplicitMigrater ensureExplicitMigrater()
6172
final E storageManager,
6273
final Object root)
6374
{
64-
return this.ensureExplicitMigrater().migrateToNewest(fromVersion, storageManager, root);
75+
if(this.isUseful())
76+
{
77+
return this.ensureExplicitMigrater().migrateToNewest(fromVersion, storageManager, root);
78+
}
79+
return null;
6580
}
6681

6782
@Override
@@ -71,15 +86,22 @@ private ExplicitMigrater ensureExplicitMigrater()
7186
final E storageManager,
7287
final Object objectToMigrate)
7388
{
89+
if(this.isUseful())
90+
{
7491
return this.ensureExplicitMigrater()
7592
.migrateToVersion(fromVersion, targetVersion, storageManager, objectToMigrate);
93+
}
94+
return null;
7695
}
7796

7897
@Override
7998
public void registerNotificationConsumer(
8099
final Consumer<ScriptExecutionNotificationWithScriptReference> notificationConsumer
81100
)
82101
{
83-
this.ensureExplicitMigrater().registerNotificationConsumer(notificationConsumer);
102+
if(this.isUseful())
103+
{
104+
this.ensureExplicitMigrater().registerNotificationConsumer(notificationConsumer);
105+
}
84106
}
85107
}

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

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919

2020
import java.io.IOException;
2121
import java.nio.file.Path;
22-
import java.util.Optional;
2322

2423
import org.eclipse.serializer.reflect.ClassLoaderProvider;
2524
import org.eclipse.store.integrations.spring.boot.types.configuration.EclipseStoreProperties;
@@ -33,7 +32,6 @@
3332
import org.springframework.context.event.EventListener;
3433
import org.springframework.util.FileSystemUtils;
3534

36-
import software.xdev.micromigration.migrater.MicroMigrater;
3735
import software.xdev.spring.data.eclipse.store.helper.StorageDirectoryNameProvider;
3836
import software.xdev.spring.data.eclipse.store.repository.config.EclipseStoreClientConfiguration;
3937

@@ -42,23 +40,14 @@
4240
public class TestConfiguration extends EclipseStoreClientConfiguration
4341
{
4442
private final String storageDirectory = StorageDirectoryNameProvider.getNewStorageDirectoryPath();
45-
46-
protected TestConfiguration(
47-
final EclipseStoreProperties defaultEclipseStoreProperties,
48-
final EmbeddedStorageFoundationFactory defaultEclipseStoreProvider,
49-
final ClassLoaderProvider classLoaderProvider)
50-
{
51-
this(defaultEclipseStoreProperties, defaultEclipseStoreProvider, classLoaderProvider, Optional.empty());
52-
}
53-
43+
5444
@Autowired
5545
protected TestConfiguration(
5646
final EclipseStoreProperties defaultEclipseStoreProperties,
5747
final EmbeddedStorageFoundationFactory defaultEclipseStoreProvider,
58-
final ClassLoaderProvider classLoaderProvider,
59-
final Optional<MicroMigrater> possibleMigrater)
48+
final ClassLoaderProvider classLoaderProvider)
6049
{
61-
super(defaultEclipseStoreProperties, defaultEclipseStoreProvider, classLoaderProvider, possibleMigrater);
50+
super(defaultEclipseStoreProperties, defaultEclipseStoreProvider, classLoaderProvider);
6251
}
6352

6453
@Override

spring-data-eclipse-store/src/test/java/software/xdev/spring/data/eclipse/store/integration/isolated/tests/data/migration/own/migrator/DataMigrationOwnMigratorTestConfiguration.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,13 @@
1515
*/
1616
package software.xdev.spring.data.eclipse.store.integration.isolated.tests.data.migration.own.migrator;
1717

18-
import java.util.Optional;
19-
2018
import org.eclipse.serializer.reflect.ClassLoaderProvider;
2119
import org.eclipse.store.integrations.spring.boot.types.configuration.EclipseStoreProperties;
2220
import org.eclipse.store.integrations.spring.boot.types.factories.EmbeddedStorageFoundationFactory;
2321
import org.springframework.beans.factory.annotation.Autowired;
2422
import org.springframework.context.annotation.ComponentScan;
2523
import org.springframework.context.annotation.Configuration;
2624

27-
import software.xdev.micromigration.migrater.MicroMigrater;
2825
import software.xdev.spring.data.eclipse.store.integration.TestConfiguration;
2926
import software.xdev.spring.data.eclipse.store.repository.config.EnableEclipseStoreRepositories;
3027

@@ -38,9 +35,8 @@ public class DataMigrationOwnMigratorTestConfiguration extends TestConfiguration
3835
protected DataMigrationOwnMigratorTestConfiguration(
3936
final EclipseStoreProperties defaultEclipseStoreProperties,
4037
final EmbeddedStorageFoundationFactory defaultEclipseStoreProvider,
41-
final ClassLoaderProvider classLoaderProvider,
42-
final Optional<MicroMigrater> possibleMigrater)
38+
final ClassLoaderProvider classLoaderProvider)
4339
{
44-
super(defaultEclipseStoreProperties, defaultEclipseStoreProvider, classLoaderProvider, possibleMigrater);
40+
super(defaultEclipseStoreProperties, defaultEclipseStoreProvider, classLoaderProvider);
4541
}
4642
}

0 commit comments

Comments
 (0)