Skip to content

Commit 065d200

Browse files
committed
Auto module export with reentrant protection
Signed-off-by: JermaineHua <[email protected]>
1 parent 6d844ab commit 065d200

File tree

1 file changed

+11
-6
lines changed
  • sofa-boot-project/sofa-boot/src/main/java/com/alipay/sofa/boot/util

1 file changed

+11
-6
lines changed

sofa-boot-project/sofa-boot/src/main/java/com/alipay/sofa/boot/util/ModuleUtil.java

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,22 +23,29 @@
2323
import java.lang.reflect.Field;
2424
import java.util.Map;
2525
import java.util.Optional;
26+
import java.util.concurrent.atomic.AtomicBoolean;
2627

2728
/**
2829
* @author huazhongming
2930
* @since 4.4.0
3031
*/
3132
public class ModuleUtil {
3233

33-
private static final Logger LOGGER = SofaBootLoggerFactory
34-
.getLogger(ModuleUtil.class);
34+
private static final Logger LOGGER = SofaBootLoggerFactory
35+
.getLogger(ModuleUtil.class);
3536

3637
private static final MethodHandle implAddOpensToAllUnnamed;
38+
3739
private static final MethodHandle implAddOpens;
40+
3841
private static final MethodHandle implAddExportsToAllUnnamed;
42+
3943
private static final MethodHandle implAddExports;
44+
4045
private static final Map<String, Module> nameToModules;
4146

47+
private static final AtomicBoolean isExported = new AtomicBoolean(false);
48+
4249
static {
4350
implAddOpensToAllUnnamed = createModuleMethodHandle("implAddOpensToAllUnnamed",
4451
String.class);
@@ -54,7 +61,7 @@ public class ModuleUtil {
5461
*/
5562
public static void exportAllJDKModulePackageToAll() {
5663
try {
57-
if (nameToModules != null) {
64+
if (isExported.compareAndSet(false,true) && nameToModules != null) {
5865
nameToModules.forEach((name, module) -> module.getPackages().forEach(pkgName -> {
5966
if (isJDKModulePackage(pkgName)) {
6067
addOpensToAll(module, pkgName);
@@ -76,8 +83,7 @@ private static boolean isJDKModulePackage(String modulePackageName) {
7683
*/
7784
public static void exportAllModulePackageToAll() {
7885
try {
79-
Map<String, Module> nameToModules = getNameToModule();
80-
if (nameToModules != null) {
86+
if (isExported.compareAndSet(false,true) && nameToModules != null) {
8187
nameToModules.forEach((name, module) -> module.getPackages().forEach(pkgName -> {
8288
addOpensToAll(module, pkgName);
8389
addExportsToAll(module, pkgName);
@@ -244,5 +250,4 @@ private static Object getModuleLayerFieldsValue(String fieldName) {
244250
public static Map<String, Module> getNameToModule() {
245251
return (Map<String, Module>) getModuleLayerFieldsValue("nameToModule");
246252
}
247-
248253
}

0 commit comments

Comments
 (0)