Skip to content

Commit 7f4c971

Browse files
Added the ClassLoaderProvider to the RegisteringCopier to react to ClassLoader changes
1 parent bb98ddf commit 7f4c971

30 files changed

Lines changed: 151 additions & 66 deletions

File tree

spring-data-eclipse-store-demo/src/main/java/software/xdev/spring/data/eclipse/store/demo/complex/ComplexConfiguration.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,17 +26,14 @@ public class ComplexConfiguration extends EclipseStoreClientConfiguration
2626

2727
public static final String STORAGE_PATH = "storage-complex";
2828

29-
private final ClassLoaderProvider classLoaderProvider;
30-
3129
@Autowired
3230
public ComplexConfiguration(
3331
final EclipseStoreProperties defaultEclipseStoreProperties,
3432
final EmbeddedStorageFoundationFactory defaultEclipseStoreProvider,
3533
final ClassLoaderProvider classLoaderProvider
3634
)
3735
{
38-
super(defaultEclipseStoreProperties, defaultEclipseStoreProvider);
39-
this.classLoaderProvider = classLoaderProvider;
36+
super(defaultEclipseStoreProperties, defaultEclipseStoreProvider, classLoaderProvider);
4037
}
4138

4239
/**
@@ -53,7 +50,7 @@ public EmbeddedStorageFoundation<?> createEmbeddedStorageFoundation()
5350
final EmbeddedStorageFoundation<?> storageFoundation =
5451
EmbeddedStorage.Foundation(Storage.Configuration(Storage.FileProvider(Path.of(STORAGE_PATH))));
5552
// This is only needed, if a different ClassLoader is used (e.g. when using spring-dev-tools)
56-
storageFoundation.getConnectionFoundation().setClassLoaderProvider(this.classLoaderProvider);
53+
storageFoundation.getConnectionFoundation().setClassLoaderProvider(this.getClassLoaderProvider());
5754
return storageFoundation;
5855
}
5956

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

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,16 +26,13 @@ public class PersistenceInvoiceConfiguration extends EclipseStoreClientConfigura
2626
{
2727
public static final String STORAGE_PATH = "storage-invoice";
2828

29-
private final ClassLoaderProvider classLoaderProvider;
30-
3129
@Autowired
3230
protected PersistenceInvoiceConfiguration(
3331
final EclipseStoreProperties defaultEclipseStoreProperties,
3432
final EmbeddedStorageFoundationFactory defaultEclipseStoreProvider,
3533
final ClassLoaderProvider classLoaderProvider)
3634
{
37-
super(defaultEclipseStoreProperties, defaultEclipseStoreProvider);
38-
this.classLoaderProvider = classLoaderProvider;
35+
super(defaultEclipseStoreProperties, defaultEclipseStoreProvider, classLoaderProvider);
3936
}
4037

4138
/**
@@ -52,7 +49,7 @@ public EmbeddedStorageFoundation<?> createEmbeddedStorageFoundation()
5249
final EmbeddedStorageFoundation<?> storageFoundation =
5350
EmbeddedStorage.Foundation(Storage.Configuration(Storage.FileProvider(Path.of(STORAGE_PATH))));
5451
// This is only needed, if a different ClassLoader is used (e.g. when using spring-dev-tools)
55-
storageFoundation.getConnectionFoundation().setClassLoaderProvider(this.classLoaderProvider);
52+
storageFoundation.getConnectionFoundation().setClassLoaderProvider(getClassLoaderProvider());
5653
return storageFoundation;
5754
}
5855
}

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package software.xdev.spring.data.eclipse.store.demo.dual.storage.person;
22

3+
import org.eclipse.serializer.reflect.ClassLoaderProvider;
34
import org.eclipse.store.integrations.spring.boot.types.configuration.ConfigurationPair;
45
import org.eclipse.store.integrations.spring.boot.types.configuration.EclipseStoreProperties;
56
import org.eclipse.store.integrations.spring.boot.types.factories.EmbeddedStorageFoundationFactory;
@@ -31,9 +32,10 @@ public class PersistencePersonConfiguration extends EclipseStoreClientConfigurat
3132
public PersistencePersonConfiguration(
3233
final EclipseStoreProperties defaultEclipseStoreProperties,
3334
final EmbeddedStorageFoundationFactory defaultEclipseStoreProvider,
34-
final EclipseStoreProperties properties)
35+
final EclipseStoreProperties properties,
36+
final ClassLoaderProvider classLoaderProvider)
3537
{
36-
super(defaultEclipseStoreProperties, defaultEclipseStoreProvider);
38+
super(defaultEclipseStoreProperties, defaultEclipseStoreProvider, classLoaderProvider);
3739
this.foundation = defaultEclipseStoreProvider;
3840
this.properties = properties;
3941
}

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import java.nio.file.Path;
1919

20+
import org.eclipse.serializer.reflect.ClassLoaderProvider;
2021
import org.eclipse.store.integrations.spring.boot.types.configuration.EclipseStoreProperties;
2122
import org.eclipse.store.integrations.spring.boot.types.factories.EmbeddedStorageFoundationFactory;
2223
import org.springframework.beans.factory.DisposableBean;
@@ -45,9 +46,10 @@ public class TestConfiguration extends EclipseStoreClientConfiguration implement
4546
@Autowired
4647
protected TestConfiguration(
4748
final EclipseStoreProperties defaultEclipseStoreProperties,
48-
final EmbeddedStorageFoundationFactory defaultEclipseStoreProvider)
49+
final EmbeddedStorageFoundationFactory defaultEclipseStoreProvider,
50+
final ClassLoaderProvider classLoaderProvider)
4951
{
50-
super(defaultEclipseStoreProperties, defaultEclipseStoreProvider);
52+
super(defaultEclipseStoreProperties, defaultEclipseStoreProvider, classLoaderProvider);
5153
}
5254

5355
@EventListener

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,8 @@ private <T> void createRepositoryForType(
265265
storageInstance,
266266
storageInstance,
267267
new SupportedChecker.Implementation(),
268-
storageInstance
268+
storageInstance,
269+
this.configuration.getClassLoaderProvider()
269270
),
270271
domainClass,
271272
new EclipseStoreTransactionManager(),

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import org.eclipse.serializer.persistence.binary.jdk17.java.util.BinaryHandlerImmutableCollectionsSet12;
2626
import org.eclipse.serializer.persistence.types.Storer;
2727
import org.eclipse.serializer.reference.ObjectSwizzling;
28+
import org.eclipse.serializer.reflect.ClassLoaderProvider;
2829
import org.eclipse.store.storage.embedded.types.EmbeddedStorageFoundation;
2930
import org.eclipse.store.storage.embedded.types.EmbeddedStorageManager;
3031
import org.eclipse.store.storage.types.StorageManager;
@@ -69,6 +70,7 @@ public class EclipseStoreStorage
6970
*/
7071
private final Map<Class<?>, VersionManager<?>> versionManagers = new ConcurrentHashMap<>();
7172
private final EclipseStoreStorageFoundationProvider foundationProvider;
73+
private final ClassLoaderProvider classLoaderProvider;
7274
private EntitySetCollector entitySetCollector;
7375
private PersistableChecker persistenceChecker;
7476
private EmbeddedStorageManager storageManager;
@@ -81,6 +83,7 @@ public class EclipseStoreStorage
8183
public EclipseStoreStorage(final EclipseStoreClientConfiguration storeConfiguration)
8284
{
8385
this.foundationProvider = storeConfiguration;
86+
this.classLoaderProvider = storeConfiguration.getClassLoaderProvider();
8487
}
8588

8689
private StorageManager getInstanceOfStorageManager()
@@ -94,6 +97,11 @@ public WorkingCopyRegistry getRegistry()
9497
return this.registry;
9598
}
9699

100+
public ClassLoaderProvider getClassLoaderProvider()
101+
{
102+
return this.classLoaderProvider;
103+
}
104+
97105
private synchronized void ensureEntitiesInRoot()
98106
{
99107
if(this.storageManager == null)

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

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

18+
import org.eclipse.serializer.reflect.ClassLoaderProvider;
1819
import org.eclipse.store.integrations.spring.boot.types.configuration.EclipseStoreProperties;
1920
import org.eclipse.store.integrations.spring.boot.types.factories.EmbeddedStorageFoundationFactory;
2021
import org.springframework.context.annotation.Configuration;
@@ -29,8 +30,9 @@ public class DefaultEclipseStoreClientConfiguration extends EclipseStoreClientCo
2930
{
3031
protected DefaultEclipseStoreClientConfiguration(
3132
final EclipseStoreProperties defaultEclipseStoreProperties,
32-
final EmbeddedStorageFoundationFactory defaultEclipseStoreProvider)
33+
final EmbeddedStorageFoundationFactory defaultEclipseStoreProvider,
34+
final ClassLoaderProvider classLoaderProvider)
3335
{
34-
super(defaultEclipseStoreProperties, defaultEclipseStoreProvider);
36+
super(defaultEclipseStoreProperties, defaultEclipseStoreProvider, classLoaderProvider);
3537
}
3638
}

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

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

18+
import org.eclipse.serializer.reflect.ClassLoaderProvider;
1819
import org.eclipse.store.integrations.spring.boot.types.configuration.EclipseStoreProperties;
1920
import org.eclipse.store.integrations.spring.boot.types.factories.EmbeddedStorageFoundationFactory;
2021
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
@@ -29,8 +30,12 @@ public class DefaultEclipseStoreClientConfigurationFactory
2930
@ConditionalOnMissingBean(EclipseStoreClientConfiguration.class)
3031
public DefaultEclipseStoreClientConfiguration getEclipseStoreClientConfiguration(
3132
final EclipseStoreProperties defaultEclipseStoreProperties,
32-
final EmbeddedStorageFoundationFactory defaultEclipseStoreProvider)
33+
final EmbeddedStorageFoundationFactory defaultEclipseStoreProvider,
34+
final ClassLoaderProvider classLoaderProvider)
3335
{
34-
return new DefaultEclipseStoreClientConfiguration(defaultEclipseStoreProperties, defaultEclipseStoreProvider);
36+
return new DefaultEclipseStoreClientConfiguration(
37+
defaultEclipseStoreProperties,
38+
defaultEclipseStoreProvider,
39+
classLoaderProvider);
3540
}
3641
}

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

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

18+
import org.eclipse.serializer.reflect.ClassLoaderProvider;
1819
import org.eclipse.store.integrations.spring.boot.types.configuration.EclipseStoreProperties;
1920
import org.eclipse.store.integrations.spring.boot.types.factories.EmbeddedStorageFoundationFactory;
2021
import org.eclipse.store.storage.embedded.types.EmbeddedStorageFoundation;
@@ -60,6 +61,7 @@ public abstract class EclipseStoreClientConfiguration implements EclipseStoreSto
6061

6162
protected final EclipseStoreProperties defaultEclipseStoreProperties;
6263
protected final EmbeddedStorageFoundationFactory defaultEclipseStoreProvider;
64+
protected final ClassLoaderProvider classLoaderProvider;
6365

6466
protected EclipseStoreStorage storageInstance;
6567
protected EclipseStoreTransactionManager transactionManager;
@@ -81,9 +83,11 @@ public abstract class EclipseStoreClientConfiguration implements EclipseStoreSto
8183
@Autowired
8284
protected EclipseStoreClientConfiguration(
8385
final EclipseStoreProperties defaultEclipseStoreProperties,
84-
final EmbeddedStorageFoundationFactory defaultEclipseStoreProvider)
86+
final EmbeddedStorageFoundationFactory defaultEclipseStoreProvider,
87+
final ClassLoaderProvider classLoaderProvider)
8588
{
8689
this.defaultEclipseStoreProperties = defaultEclipseStoreProperties;
90+
this.classLoaderProvider = classLoaderProvider;
8791
this.defaultEclipseStoreProperties.setAutoStart(false);
8892
this.defaultEclipseStoreProvider = defaultEclipseStoreProvider;
8993
}
@@ -98,6 +102,11 @@ public EmbeddedStorageFoundationFactory getStoreProvider()
98102
return this.defaultEclipseStoreProvider;
99103
}
100104

105+
public ClassLoaderProvider getClassLoaderProvider()
106+
{
107+
return classLoaderProvider;
108+
}
109+
101110
/**
102111
* Creates a {@link EmbeddedStorageFoundation} out of the two other provided functions {@link #getStoreProvider()}
103112
* and {@link #getEclipseStoreProperties()}.

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,8 @@ private <T> WorkingCopier<T> createWorkingCopier(
8282
storage,
8383
storage,
8484
new SupportedChecker.Implementation(),
85-
storage
85+
storage,
86+
storage.getClassLoaderProvider()
8687
);
8788
}
8889

0 commit comments

Comments
 (0)