Skip to content

Commit 3f86eae

Browse files
committed
[proxima-core] fix ClassLoader in JPMS and DirectDataOperator
1 parent 4d064b7 commit 3f86eae

3 files changed

Lines changed: 14 additions & 1 deletion

File tree

core/src/main/java/cz/o2/proxima/core/repository/JPMSMain.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ public static void main(String[] args)
6464
new ChildLayerFirstClassLoader(finder, thisClass.getClassLoader());
6565
createModuleLayer(loaderCache, parentLayer, finder, parentLoader);
6666
log.info("Added module layer from path {} with modules {}", path, finder.findAll());
67+
Repository.setJpmsClassLoader(parentLoader);
6768
Thread.currentThread().setContextClassLoader(parentLoader);
6869
Class<?> loadedMainClass = parentLoader.loadClass(mainClass);
6970
Method main = loadedMainClass.getDeclaredMethod("main", String[].class);

core/src/main/java/cz/o2/proxima/core/repository/Repository.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import cz.o2.proxima.core.annotations.Evolving;
1919
import cz.o2.proxima.core.functional.Consumer;
2020
import cz.o2.proxima.core.scheme.ValueSerializerFactory;
21+
import cz.o2.proxima.core.util.internal.ClassLoaders.ChildLayerFirstClassLoader;
2122
import cz.o2.proxima.internal.com.google.common.annotations.VisibleForTesting;
2223
import cz.o2.proxima.internal.com.google.common.collect.Streams;
2324
import cz.o2.proxima.typesafe.config.Config;
@@ -32,7 +33,9 @@
3233
import java.util.Set;
3334
import java.util.concurrent.ConcurrentHashMap;
3435
import java.util.stream.Stream;
36+
import lombok.AccessLevel;
3537
import lombok.Getter;
38+
import lombok.Setter;
3639
import lombok.extern.slf4j.Slf4j;
3740

3841
/** Repository of all entities configured in the system. */
@@ -42,6 +45,9 @@ public abstract class Repository implements Serializable {
4245

4346
private static final long serialVersionUID = 1L;
4447

48+
@Setter(AccessLevel.PACKAGE)
49+
private static ChildLayerFirstClassLoader jpmsClassLoader = null;
50+
4551
/** Various validation flags. */
4652
public enum Validate {
4753
/** Do not perform any validations. */
@@ -94,6 +100,10 @@ public static Repository ofTest(Config config, Validate... validate) {
94100
return ConfigRepository.ofTest(config, validate);
95101
}
96102

103+
public static ClassLoader getJpmsClassloader() {
104+
return jpmsClassLoader;
105+
}
106+
97107
@SuppressWarnings({"unchecked", "rawtypes"})
98108
private static Iterable<DataOperatorFactory<?>> readDataOperatorFactories() {
99109
return (Iterable) ServiceLoader.load(DataOperatorFactory.class);

direct/core/src/main/java/cz/o2/proxima/direct/core/DirectDataOperator.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,9 @@ private static Factory<ExecutorService> createExecutorFactory() {
9393
"Error running task in thread {}, bailing out...", thr.getName(), exc);
9494
Runtime.getRuntime().exit(1);
9595
});
96-
t.setContextClassLoader(DirectDataOperator.class.getClassLoader());
96+
if (Repository.getJpmsClassloader() != null) {
97+
t.setContextClassLoader(Repository.getJpmsClassloader());
98+
}
9799
return t;
98100
});
99101
}

0 commit comments

Comments
 (0)