Skip to content

Commit 4008141

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

File tree

1 file changed

+14
-5
lines changed
  • sofa-boot-project/sofa-boot/src/main/java/com/alipay/sofa/boot/util

1 file changed

+14
-5
lines changed

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

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,21 @@
3030
*/
3131
public class ModuleUtil {
3232

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

3636
private static final MethodHandle implAddOpensToAllUnnamed;
37+
3738
private static final MethodHandle implAddOpens;
39+
3840
private static final MethodHandle implAddExportsToAllUnnamed;
41+
3942
private static final MethodHandle implAddExports;
43+
4044
private static final Map<String, Module> nameToModules;
4145

46+
private static boolean isExported = false;
47+
4248
static {
4349
implAddOpensToAllUnnamed = createModuleMethodHandle("implAddOpensToAllUnnamed",
4450
String.class);
@@ -54,15 +60,17 @@ public class ModuleUtil {
5460
*/
5561
public static void exportAllJDKModulePackageToAll() {
5662
try {
57-
if (nameToModules != null) {
63+
if (!isExported && nameToModules != null) {
5864
nameToModules.forEach((name, module) -> module.getPackages().forEach(pkgName -> {
5965
if (isJDKModulePackage(pkgName)) {
6066
addOpensToAll(module, pkgName);
6167
addExportsToAll(module, pkgName);
6268
}
6369
}));
6470
}
71+
isExported = true;
6572
} catch (Throwable t) {
73+
isExported = false;
6674
LOGGER.error("Failed to export all JDK module package to all", t);
6775
}
6876
}
@@ -76,14 +84,15 @@ private static boolean isJDKModulePackage(String modulePackageName) {
7684
*/
7785
public static void exportAllModulePackageToAll() {
7886
try {
79-
Map<String, Module> nameToModules = getNameToModule();
80-
if (nameToModules != null) {
87+
if (!isExported && nameToModules != null) {
8188
nameToModules.forEach((name, module) -> module.getPackages().forEach(pkgName -> {
8289
addOpensToAll(module, pkgName);
8390
addExportsToAll(module, pkgName);
8491
}));
8592
}
93+
isExported = true;
8694
} catch (Throwable t) {
95+
isExported = false;
8796
LOGGER.error("Failed to export all module package to all", t);
8897
}
8998
}

0 commit comments

Comments
 (0)