From 0dfcb5ea4d9b2dfa06b768a8ef72edce0f7bab7b Mon Sep 17 00:00:00 2001 From: Matej Novotny Date: Tue, 28 Jul 2026 14:39:47 +0200 Subject: [PATCH 01/13] Configure surefire to run tests on the classpath --- pom.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pom.xml b/pom.xml index ce4b346672..68071f1ca9 100644 --- a/pom.xml +++ b/pom.xml @@ -469,6 +469,12 @@ + + maven-surefire-plugin + + false + + From c652bc84fcdacf660cac8cfb7afbaa781b91b055 Mon Sep 17 00:00:00 2001 From: Matej Novotny Date: Tue, 28 Jul 2026 14:49:25 +0200 Subject: [PATCH 02/13] Add module-info.java to weld-core-impl --- impl/pom.xml | 23 +++++++++++++++++++++++ impl/src/main/java/module-info.java | 16 ++++++++++++++++ pom.xml | 2 +- 3 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 impl/src/main/java/module-info.java diff --git a/impl/pom.xml b/impl/pom.xml index 74b09709ca..e04e8278f8 100644 --- a/impl/pom.xml +++ b/impl/pom.xml @@ -124,6 +124,29 @@ + + org.apache.maven.plugins + maven-compiler-plugin + + + -proc:full + --add-reads + org.jboss.weld.core=ALL-UNNAMED + + + + org.jboss.logging + jboss-logging-processor + ${jboss.logging.processor.version} + + + org.jboss.logging + jboss-logging + ${jboss.logging.version} + + + + org.apache.maven.plugins maven-surefire-plugin diff --git a/impl/src/main/java/module-info.java b/impl/src/main/java/module-info.java new file mode 100644 index 0000000000..29589a9099 --- /dev/null +++ b/impl/src/main/java/module-info.java @@ -0,0 +1,16 @@ +module org.jboss.weld.core { + requires transitive org.jboss.weld.spi; + requires org.jboss.classfilewriter; + requires org.jboss.logging; + requires static org.jboss.logging.annotations; + requires static jakarta.el; + requires static jakarta.persistence; + requires static java.naming; + requires static jdk.unsupported; + + exports org.jboss.weld.module; + + uses org.jboss.weld.module.WeldModule; + uses jakarta.enterprise.inject.spi.Extension; + uses jakarta.enterprise.inject.build.compatible.spi.BuildCompatibleExtension; +} diff --git a/pom.xml b/pom.xml index 68071f1ca9..e365f7e385 100644 --- a/pom.xml +++ b/pom.xml @@ -90,7 +90,7 @@ 4.10.2.0 4.10.2 7.9.0 - 7.0.Beta2 + 7.0-SNAPSHOT 5.1.0.Final From 8f351c7e8961d937dc04e3117b7935e7cd7201f6 Mon Sep 17 00:00:00 2001 From: Matej Novotny Date: Tue, 28 Jul 2026 14:57:46 +0200 Subject: [PATCH 03/13] Add module-info.java to sub-modules (ejb, web, jta, jsf, let) --- modules/ejb/src/main/java/module-info.java | 9 +++++++++ modules/jsf/src/main/java/module-info.java | 6 ++++++ modules/jta/src/main/java/module-info.java | 8 ++++++++ modules/web/src/main/java/module-info.java | 9 +++++++++ .../src/main/java/module-info.java | 11 +++++++++++ 5 files changed, 43 insertions(+) create mode 100644 modules/ejb/src/main/java/module-info.java create mode 100644 modules/jsf/src/main/java/module-info.java create mode 100644 modules/jta/src/main/java/module-info.java create mode 100644 modules/web/src/main/java/module-info.java create mode 100644 weld-lite-extension-translator/src/main/java/module-info.java diff --git a/modules/ejb/src/main/java/module-info.java b/modules/ejb/src/main/java/module-info.java new file mode 100644 index 0000000000..1a397ce226 --- /dev/null +++ b/modules/ejb/src/main/java/module-info.java @@ -0,0 +1,9 @@ +module org.jboss.weld.module.ejb { + requires org.jboss.weld.core; + requires org.jboss.weld.spi; + requires static jakarta.ejb; + requires static jakarta.transaction; + + provides org.jboss.weld.module.WeldModule + with org.jboss.weld.module.ejb.WeldEjbModule; +} diff --git a/modules/jsf/src/main/java/module-info.java b/modules/jsf/src/main/java/module-info.java new file mode 100644 index 0000000000..49291b276f --- /dev/null +++ b/modules/jsf/src/main/java/module-info.java @@ -0,0 +1,6 @@ +module org.jboss.weld.module.jsf { + requires org.jboss.weld.core; + requires org.jboss.weld.spi; + requires static jakarta.faces; + requires static jakarta.servlet; +} diff --git a/modules/jta/src/main/java/module-info.java b/modules/jta/src/main/java/module-info.java new file mode 100644 index 0000000000..27855d9b12 --- /dev/null +++ b/modules/jta/src/main/java/module-info.java @@ -0,0 +1,8 @@ +module org.jboss.weld.module.jta { + requires org.jboss.weld.core; + requires org.jboss.weld.spi; + requires static jakarta.transaction; + + provides org.jboss.weld.module.WeldModule + with org.jboss.weld.module.jta.WeldTransactionsModule; +} diff --git a/modules/web/src/main/java/module-info.java b/modules/web/src/main/java/module-info.java new file mode 100644 index 0000000000..eda42aeeab --- /dev/null +++ b/modules/web/src/main/java/module-info.java @@ -0,0 +1,9 @@ +module org.jboss.weld.module.web { + requires org.jboss.weld.core; + requires org.jboss.weld.spi; + requires static jakarta.el; + requires static jakarta.servlet; + + provides org.jboss.weld.module.WeldModule + with org.jboss.weld.module.web.WeldWebModule; +} diff --git a/weld-lite-extension-translator/src/main/java/module-info.java b/weld-lite-extension-translator/src/main/java/module-info.java new file mode 100644 index 0000000000..350d9b8c55 --- /dev/null +++ b/weld-lite-extension-translator/src/main/java/module-info.java @@ -0,0 +1,11 @@ +module org.jboss.weld.lite.extension.translator { + requires org.jboss.weld.core; + requires org.jboss.weld.spi; + requires org.jboss.logging; + + exports org.jboss.weld.lite.extension.translator to + org.jboss.weld.se, org.jboss.weld.servlet; + + provides jakarta.enterprise.inject.build.compatible.spi.BuildServices + with org.jboss.weld.lite.extension.translator.BuildServicesImpl; +} From 3b1f454ef85a8ffc6236e098b02def050084c34e Mon Sep 17 00:00:00 2001 From: Matej Novotny Date: Tue, 28 Jul 2026 15:34:52 +0200 Subject: [PATCH 04/13] Add module-info.java to environment modules (common, SE, servlet) --- .../common/src/main/java/module-info.java | 18 ++++++++++++ .../se/core/src/main/java/module-info.java | 18 ++++++++++++ environments/servlet/core/pom.xml | 28 +++++++++++++++++++ .../core/src/main/java/module-info.java | 15 ++++++++++ 4 files changed, 79 insertions(+) create mode 100644 environments/common/src/main/java/module-info.java create mode 100644 environments/se/core/src/main/java/module-info.java create mode 100644 environments/servlet/core/src/main/java/module-info.java diff --git a/environments/common/src/main/java/module-info.java b/environments/common/src/main/java/module-info.java new file mode 100644 index 0000000000..aa4f1da59b --- /dev/null +++ b/environments/common/src/main/java/module-info.java @@ -0,0 +1,18 @@ +module org.jboss.weld.environment.common { + requires transitive org.jboss.weld.core; + requires org.jboss.logging; + requires static org.jboss.jandex; + + exports org.jboss.weld.environment to + org.jboss.weld.se, org.jboss.weld.servlet; + exports org.jboss.weld.environment.deployment to + org.jboss.weld.se, org.jboss.weld.servlet; + exports org.jboss.weld.environment.deployment.discovery to + org.jboss.weld.se, org.jboss.weld.servlet; + exports org.jboss.weld.environment.deployment.discovery.jandex to + org.jboss.weld.se, org.jboss.weld.servlet; + exports org.jboss.weld.environment.logging to + org.jboss.weld.se, org.jboss.weld.servlet; + exports org.jboss.weld.environment.util to + org.jboss.weld.se, org.jboss.weld.servlet; +} diff --git a/environments/se/core/src/main/java/module-info.java b/environments/se/core/src/main/java/module-info.java new file mode 100644 index 0000000000..59d74d5996 --- /dev/null +++ b/environments/se/core/src/main/java/module-info.java @@ -0,0 +1,18 @@ +module org.jboss.weld.se { + requires transitive org.jboss.weld.core; + requires org.jboss.weld.environment.common; + requires org.jboss.weld.lite.extension.translator; + requires org.jboss.logging; + + exports org.jboss.weld.environment.se; + exports org.jboss.weld.environment.se.bindings; + exports org.jboss.weld.environment.se.contexts; + exports org.jboss.weld.environment.se.events; + + provides jakarta.enterprise.inject.se.SeContainerInitializer + with org.jboss.weld.environment.se.Weld; + provides jakarta.enterprise.inject.spi.CDIProvider + with org.jboss.weld.environment.se.WeldSEProvider; + provides jakarta.enterprise.inject.spi.Extension + with org.jboss.weld.environment.se.WeldSEBeanRegistrant; +} diff --git a/environments/servlet/core/pom.xml b/environments/servlet/core/pom.xml index f829370b05..066f8e52f4 100644 --- a/environments/servlet/core/pom.xml +++ b/environments/servlet/core/pom.xml @@ -151,4 +151,32 @@ + + + + org.apache.maven.plugins + maven-compiler-plugin + + + -proc:full + --add-reads + org.jboss.weld.servlet=ALL-UNNAMED + + + + org.jboss.logging + jboss-logging-processor + ${jboss.logging.processor.version} + + + org.jboss.logging + jboss-logging + ${jboss.logging.version} + + + + + + + diff --git a/environments/servlet/core/src/main/java/module-info.java b/environments/servlet/core/src/main/java/module-info.java new file mode 100644 index 0000000000..d8cf20b84a --- /dev/null +++ b/environments/servlet/core/src/main/java/module-info.java @@ -0,0 +1,15 @@ +module org.jboss.weld.servlet { + requires transitive org.jboss.weld.core; + requires org.jboss.weld.environment.common; + requires org.jboss.weld.lite.extension.translator; + requires org.jboss.logging; + requires jakarta.servlet; + requires static org.apache.tomcat.catalina; + + exports org.jboss.weld.environment.servlet; + + provides jakarta.servlet.ServletContainerInitializer + with org.jboss.weld.environment.servlet.EnhancedListener; + provides jakarta.enterprise.inject.spi.CDIProvider + with org.jboss.weld.environment.servlet.WeldProvider; +} From 505ae2dab0b86581e947005fba67633b217eccb9 Mon Sep 17 00:00:00 2001 From: Matej Novotny Date: Wed, 29 Jul 2026 12:08:46 +0200 Subject: [PATCH 05/13] Add qualified exports and configure module compilation --- bom/pom.xml | 2 +- environments/common/pom.xml | 26 +++++ .../common/src/main/java/module-info.java | 1 + environments/se/build/pom.xml | 9 ++ environments/se/core/pom.xml | 17 +++ .../se/core/src/main/java/module-info.java | 1 + environments/servlet/build/pom.xml | 9 ++ impl/src/main/java/module-info.java | 108 ++++++++++++++++++ modules/ejb/src/main/java/module-info.java | 1 + modules/web/pom.xml | 28 +++++ modules/web/src/main/java/module-info.java | 3 + weld-lite-extension-translator/pom.xml | 26 +++++ .../src/main/java/module-info.java | 1 + 13 files changed, 231 insertions(+), 1 deletion(-) diff --git a/bom/pom.xml b/bom/pom.xml index db17051879..69165741ef 100644 --- a/bom/pom.xml +++ b/bom/pom.xml @@ -30,7 +30,7 @@ - 7.0.Beta2 + 7.0-SNAPSHOT 3.2.8 1.7.0 https://repository.jboss.org/nexus/service/local/staging/deploy/maven2/ diff --git a/environments/common/pom.xml b/environments/common/pom.xml index fd3cf1b234..74280cd945 100644 --- a/environments/common/pom.xml +++ b/environments/common/pom.xml @@ -48,4 +48,30 @@ + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + -proc:full + + + + org.jboss.logging + jboss-logging-processor + ${jboss.logging.processor.version} + + + org.jboss.logging + jboss-logging + ${jboss.logging.version} + + + + + + diff --git a/environments/common/src/main/java/module-info.java b/environments/common/src/main/java/module-info.java index aa4f1da59b..30a9e5bd49 100644 --- a/environments/common/src/main/java/module-info.java +++ b/environments/common/src/main/java/module-info.java @@ -1,6 +1,7 @@ module org.jboss.weld.environment.common { requires transitive org.jboss.weld.core; requires org.jboss.logging; + requires static org.jboss.logging.annotations; requires static org.jboss.jandex; exports org.jboss.weld.environment to diff --git a/environments/se/build/pom.xml b/environments/se/build/pom.xml index 6bc143dc5d..bf1e131a89 100644 --- a/environments/se/build/pom.xml +++ b/environments/se/build/pom.xml @@ -90,6 +90,15 @@ + + + *:* + + module-info.class + META-INF/versions/*/module-info.class + + + diff --git a/environments/se/core/pom.xml b/environments/se/core/pom.xml index 344f082973..4c617a3253 100644 --- a/environments/se/core/pom.xml +++ b/environments/se/core/pom.xml @@ -164,6 +164,23 @@ org.apache.maven.plugins maven-compiler-plugin + + + -proc:full + + + + org.jboss.logging + jboss-logging-processor + ${jboss.logging.processor.version} + + + org.jboss.logging + jboss-logging + ${jboss.logging.version} + + + compile diff --git a/environments/se/core/src/main/java/module-info.java b/environments/se/core/src/main/java/module-info.java index 59d74d5996..46a5fa3af7 100644 --- a/environments/se/core/src/main/java/module-info.java +++ b/environments/se/core/src/main/java/module-info.java @@ -3,6 +3,7 @@ requires org.jboss.weld.environment.common; requires org.jboss.weld.lite.extension.translator; requires org.jboss.logging; + requires static org.jboss.logging.annotations; exports org.jboss.weld.environment.se; exports org.jboss.weld.environment.se.bindings; diff --git a/environments/servlet/build/pom.xml b/environments/servlet/build/pom.xml index 7cb043ae6b..8c53c9b75f 100644 --- a/environments/servlet/build/pom.xml +++ b/environments/servlet/build/pom.xml @@ -106,6 +106,15 @@ jakarta.el:el-api + + + *:* + + module-info.class + META-INF/versions/*/module-info.class + + + diff --git a/impl/src/main/java/module-info.java b/impl/src/main/java/module-info.java index 29589a9099..9a949cb5c7 100644 --- a/impl/src/main/java/module-info.java +++ b/impl/src/main/java/module-info.java @@ -3,13 +3,121 @@ requires org.jboss.classfilewriter; requires org.jboss.logging; requires static org.jboss.logging.annotations; + requires static jakarta.cdi.el; requires static jakarta.el; requires static jakarta.persistence; requires static java.naming; requires static jdk.unsupported; + exports org.jboss.weld to + org.jboss.weld.module.ejb, org.jboss.weld.module.web, + org.jboss.weld.module.jta, org.jboss.weld.module.jsf, + org.jboss.weld.se, org.jboss.weld.servlet; exports org.jboss.weld.module; + // Proxy packages — exported unqualified because proxy bytecode defined in + // user modules via Lookup.defineClass() references these types and the JVM + // resolves supertypes eagerly at class-linking time + exports org.jboss.weld.bean.proxy; + exports org.jboss.weld.bean.proxy.util; + exports org.jboss.weld.interceptor.proxy; + exports org.jboss.weld.interceptor.util.proxy; + + // Qualified exports for sibling Weld modules + exports org.jboss.weld.annotated.enhanced to + org.jboss.weld.module.ejb; + exports org.jboss.weld.annotated.enhanced.jlr to + org.jboss.weld.module.ejb; + exports org.jboss.weld.annotated.slim to + org.jboss.weld.module.ejb; + exports org.jboss.weld.bean to + org.jboss.weld.module.ejb, org.jboss.weld.lite.extension.translator; + exports org.jboss.weld.bean.attributes to + org.jboss.weld.module.ejb; + exports org.jboss.weld.bean.builtin to + org.jboss.weld.module.ejb, org.jboss.weld.module.web, + org.jboss.weld.se, org.jboss.weld.servlet; + exports org.jboss.weld.bean.builtin.ee to + org.jboss.weld.module.jta; + exports org.jboss.weld.bean.interceptor to + org.jboss.weld.module.ejb; + exports org.jboss.weld.bootstrap to + org.jboss.weld.module.ejb, org.jboss.weld.module.web, + org.jboss.weld.se, org.jboss.weld.servlet; + exports org.jboss.weld.bootstrap.events to + org.jboss.weld.lite.extension.translator, org.jboss.weld.se; + exports org.jboss.weld.config to + org.jboss.weld.module.web, org.jboss.weld.environment.common, + org.jboss.weld.se, org.jboss.weld.servlet; + exports org.jboss.weld.contexts to + org.jboss.weld.module.ejb, org.jboss.weld.module.web, + org.jboss.weld.se; + exports org.jboss.weld.contexts.beanstore to + org.jboss.weld.module.ejb, org.jboss.weld.module.web, + org.jboss.weld.se; + exports org.jboss.weld.contexts.cache to + org.jboss.weld.module.ejb, org.jboss.weld.module.web; + exports org.jboss.weld.event to + org.jboss.weld.module.ejb, org.jboss.weld.module.web, + org.jboss.weld.module.jta, org.jboss.weld.se; + exports org.jboss.weld.exceptions to + org.jboss.weld.module.ejb, org.jboss.weld.module.web, + org.jboss.weld.lite.extension.translator, org.jboss.weld.environment.common, + org.jboss.weld.se; + exports org.jboss.weld.executor to + org.jboss.weld.se; + exports org.jboss.weld.injection to + org.jboss.weld.module.ejb, org.jboss.weld.module.jta; + exports org.jboss.weld.injection.producer to + org.jboss.weld.module.ejb; + exports org.jboss.weld.interceptor.spi.model to + org.jboss.weld.module.ejb; + exports org.jboss.weld.invokable to + org.jboss.weld.lite.extension.translator; + exports org.jboss.weld.literal to + org.jboss.weld.environment.common; + exports org.jboss.weld.logging to + org.jboss.weld.module.ejb, org.jboss.weld.module.web, + org.jboss.weld.module.jta, org.jboss.weld.lite.extension.translator; + exports org.jboss.weld.manager to + org.jboss.weld.module.ejb, org.jboss.weld.module.web, + org.jboss.weld.module.jta, org.jboss.weld.module.jsf, + org.jboss.weld.se, org.jboss.weld.servlet; + exports org.jboss.weld.metadata to + org.jboss.weld.se; + exports org.jboss.weld.metadata.cache to + org.jboss.weld.module.ejb; + exports org.jboss.weld.resolution to + org.jboss.weld.module.jta; + exports org.jboss.weld.resources to + org.jboss.weld.module.ejb, org.jboss.weld.module.web, + org.jboss.weld.module.jsf, org.jboss.weld.environment.common, + org.jboss.weld.se, org.jboss.weld.servlet; + exports org.jboss.weld.serialization to + org.jboss.weld.module.ejb, org.jboss.weld.module.web; + exports org.jboss.weld.util to + org.jboss.weld.module.ejb, org.jboss.weld.module.web, + org.jboss.weld.module.jta, org.jboss.weld.module.jsf, + org.jboss.weld.environment.common, org.jboss.weld.se, + org.jboss.weld.servlet; + exports org.jboss.weld.util.annotated to + org.jboss.weld.se; + exports org.jboss.weld.util.bytecode to + org.jboss.weld.module.ejb; + exports org.jboss.weld.util.cache to + org.jboss.weld.environment.common, org.jboss.weld.se, + org.jboss.weld.servlet; + exports org.jboss.weld.util.collections to + org.jboss.weld.module.ejb, org.jboss.weld.module.web, + org.jboss.weld.environment.common, org.jboss.weld.se, + org.jboss.weld.servlet; + exports org.jboss.weld.util.reflection to + org.jboss.weld.module.ejb, org.jboss.weld.module.web, + org.jboss.weld.lite.extension.translator, org.jboss.weld.se, + org.jboss.weld.servlet; + exports org.jboss.weld.xml to + org.jboss.weld.environment.common; + uses org.jboss.weld.module.WeldModule; uses jakarta.enterprise.inject.spi.Extension; uses jakarta.enterprise.inject.build.compatible.spi.BuildCompatibleExtension; diff --git a/modules/ejb/src/main/java/module-info.java b/modules/ejb/src/main/java/module-info.java index 1a397ce226..a0849cd50d 100644 --- a/modules/ejb/src/main/java/module-info.java +++ b/modules/ejb/src/main/java/module-info.java @@ -1,6 +1,7 @@ module org.jboss.weld.module.ejb { requires org.jboss.weld.core; requires org.jboss.weld.spi; + requires org.jboss.classfilewriter; requires static jakarta.ejb; requires static jakarta.transaction; diff --git a/modules/web/pom.xml b/modules/web/pom.xml index c9948f6b6c..aca5e002a6 100644 --- a/modules/web/pom.xml +++ b/modules/web/pom.xml @@ -80,6 +80,34 @@ + + + + org.apache.maven.plugins + maven-compiler-plugin + + + -proc:full + --add-reads + org.jboss.weld.module.web=ALL-UNNAMED + + + + org.jboss.logging + jboss-logging-processor + ${jboss.logging.processor.version} + + + org.jboss.logging + jboss-logging + ${jboss.logging.version} + + + + + + + findbugs diff --git a/modules/web/src/main/java/module-info.java b/modules/web/src/main/java/module-info.java index eda42aeeab..b8bb2b196d 100644 --- a/modules/web/src/main/java/module-info.java +++ b/modules/web/src/main/java/module-info.java @@ -1,6 +1,9 @@ module org.jboss.weld.module.web { requires org.jboss.weld.core; requires org.jboss.weld.spi; + requires org.jboss.logging; + requires static org.jboss.logging.annotations; + requires static jakarta.cdi.el; requires static jakarta.el; requires static jakarta.servlet; diff --git a/weld-lite-extension-translator/pom.xml b/weld-lite-extension-translator/pom.xml index 7aa1da10a2..5bad32893e 100644 --- a/weld-lite-extension-translator/pom.xml +++ b/weld-lite-extension-translator/pom.xml @@ -33,6 +33,32 @@ + + + + org.apache.maven.plugins + maven-compiler-plugin + + + -proc:full + + + + org.jboss.logging + jboss-logging-processor + ${jboss.logging.processor.version} + + + org.jboss.logging + jboss-logging + ${jboss.logging.version} + + + + + + + findbugs diff --git a/weld-lite-extension-translator/src/main/java/module-info.java b/weld-lite-extension-translator/src/main/java/module-info.java index 350d9b8c55..38056c320d 100644 --- a/weld-lite-extension-translator/src/main/java/module-info.java +++ b/weld-lite-extension-translator/src/main/java/module-info.java @@ -2,6 +2,7 @@ requires org.jboss.weld.core; requires org.jboss.weld.spi; requires org.jboss.logging; + requires static org.jboss.logging.annotations; exports org.jboss.weld.lite.extension.translator to org.jboss.weld.se, org.jboss.weld.servlet; From d00347ff4dcdfec490f8b870ea058d8c4dccec2d Mon Sep 17 00:00:00 2001 From: Matej Novotny Date: Wed, 29 Jul 2026 12:14:32 +0200 Subject: [PATCH 06/13] Exclude module-info.class from shaded JARs --- bundles/osgi/pom.xml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/bundles/osgi/pom.xml b/bundles/osgi/pom.xml index 247652246d..4ed7be200a 100644 --- a/bundles/osgi/pom.xml +++ b/bundles/osgi/pom.xml @@ -245,6 +245,13 @@ META-INF/services/** + + *:* + + module-info.class + META-INF/versions/*/module-info.class + + From aa8614dccd46178948ce285dd996350587bdebc0 Mon Sep 17 00:00:00 2001 From: Matej Novotny Date: Wed, 29 Jul 2026 12:24:35 +0200 Subject: [PATCH 07/13] Implement centralized JPMS module access forwarding --- .../runtime/InvokableAnnotatedMethod.java | 2 + .../proxy/util/WeldDefaultProxyServices.java | 24 +++------ .../jboss/weld/bootstrap/WeldBootstrap.java | 11 +++- .../weld/invokable/MethodHandleUtils.java | 14 ++--- .../java/org/jboss/weld/util/BeanMethods.java | 2 + .../weld/util/reflection/Reflections.java | 53 +++++++++++++++++++ 6 files changed, 77 insertions(+), 29 deletions(-) diff --git a/impl/src/main/java/org/jboss/weld/annotated/runtime/InvokableAnnotatedMethod.java b/impl/src/main/java/org/jboss/weld/annotated/runtime/InvokableAnnotatedMethod.java index c913220226..a8a3cbc91e 100644 --- a/impl/src/main/java/org/jboss/weld/annotated/runtime/InvokableAnnotatedMethod.java +++ b/impl/src/main/java/org/jboss/weld/annotated/runtime/InvokableAnnotatedMethod.java @@ -49,6 +49,7 @@ public InvokableAnnotatedMethod(AnnotatedMethod annotatedMethod) { Method method = annotatedMethod.getJavaMember(); this.methods = Collections., Method> singletonMap(method.getDeclaringClass(), method); if (method != null && !method.isAccessible()) { + Reflections.ensureModuleAccess(method.getDeclaringClass()); method.setAccessible(true); } } @@ -83,6 +84,7 @@ public X invokeOnInstance(Object instance, Object... parameters) throws Ille Method delegate = annotatedMethod.getJavaMember(); method = Reflections.lookupMethod(instance.getClass(), delegate.getName(), delegate.getParameterTypes()); if (method != null && !method.canAccess(instance)) { + Reflections.ensureModuleAccess(method.getDeclaringClass()); method.setAccessible(true); } synchronized (this) { diff --git a/impl/src/main/java/org/jboss/weld/bean/proxy/util/WeldDefaultProxyServices.java b/impl/src/main/java/org/jboss/weld/bean/proxy/util/WeldDefaultProxyServices.java index 9737f16b6e..67c15c3526 100644 --- a/impl/src/main/java/org/jboss/weld/bean/proxy/util/WeldDefaultProxyServices.java +++ b/impl/src/main/java/org/jboss/weld/bean/proxy/util/WeldDefaultProxyServices.java @@ -40,6 +40,7 @@ import org.jboss.weld.logging.BeanLogger; import org.jboss.weld.proxy.WeldClientProxy; import org.jboss.weld.serialization.spi.ProxyServices; +import org.jboss.weld.util.reflection.Reflections; /** * This class is a default implementation of ProxyServices that will only be loaded if no other implementation is detected. @@ -149,51 +150,40 @@ private WeldProxyDeclaringCL returnWeldCL(ClassLoader loader) { */ private Class defineWithMethodLookup(String classToDefineName, byte[] classBytes, Class originalClass, ClassLoader loader) { - Module thisModule = WeldDefaultProxyServices.class.getModule(); - Module apiModule = WeldClientProxy.class.getModule(); - try { Class lookupBaseClass; try { - // In case of decorators, it looks like we sometimes need the original class instead lookupBaseClass = loader.loadClass(classToDefineName.substring(0, classToDefineName.indexOf("$"))); } catch (Exception e) { lookupBaseClass = originalClass; } - // Ensure we can read the other module, and the other module can read us + Reflections.ensureModuleAccess(lookupBaseClass); + Module thisModule = WeldDefaultProxyServices.class.getModule(); + Module apiModule = WeldClientProxy.class.getModule(); Module lookupClassModule = lookupBaseClass.getModule(); - if (!thisModule.canRead(lookupClassModule)) { - // we need to read the other module in order to have privateLookup access - // see javadoc for MethodHandles.privateLookupIn() - thisModule.addReads(lookupClassModule); - } - - try { - // the other module needs to read us, since the proxy we are - // about to generate inside that module uses our classes + if (lookupClassModule.isNamed()) { MethodHandle ensureReadsMethod = null; if (!lookupClassModule.canRead(thisModule)) { ensureReadsMethod = generateEnsureReadsMethod(lookupBaseClass); ensureReadsMethod.invoke(thisModule); } - if (!lookupClassModule.canRead(apiModule)) { if (ensureReadsMethod == null) { ensureReadsMethod = generateEnsureReadsMethod(lookupBaseClass); } ensureReadsMethod.invoke(apiModule); } - } catch (Throwable t) { - throw new RuntimeException(t); } MethodHandles.Lookup lookup = MethodHandles.privateLookupIn(lookupBaseClass, MethodHandles.lookup()); return lookup.defineClass(classBytes); } catch (IllegalAccessException e) { throw new RuntimeException(e); + } catch (Throwable t) { + throw new RuntimeException(t); } } diff --git a/impl/src/main/java/org/jboss/weld/bootstrap/WeldBootstrap.java b/impl/src/main/java/org/jboss/weld/bootstrap/WeldBootstrap.java index 214a26d2da..72116f1eda 100644 --- a/impl/src/main/java/org/jboss/weld/bootstrap/WeldBootstrap.java +++ b/impl/src/main/java/org/jboss/weld/bootstrap/WeldBootstrap.java @@ -23,6 +23,7 @@ import org.jboss.weld.bootstrap.api.Bootstrap; import org.jboss.weld.bootstrap.api.CDI11Bootstrap; import org.jboss.weld.bootstrap.api.Environment; +import org.jboss.weld.bootstrap.api.ModuleAccessForwarder; import org.jboss.weld.bootstrap.api.TypeDiscoveryConfiguration; import org.jboss.weld.bootstrap.api.helpers.RegistrySingletonProvider; import org.jboss.weld.bootstrap.spi.BeanDeploymentArchive; @@ -34,6 +35,7 @@ import org.jboss.weld.logging.BootstrapLogger; import org.jboss.weld.manager.BeanManagerImpl; import org.jboss.weld.util.ServiceLoader; +import org.jboss.weld.util.reflection.Reflections; import org.jboss.weld.xml.BeansXmlParser; import org.jboss.weld.xml.BeansXmlStreamParser; import org.jboss.weld.xml.BeansXmlValidator; @@ -58,6 +60,12 @@ public WeldBootstrap() { beansXmlValidator = SystemPropertiesConfiguration.INSTANCE.isXmlValidationDisabled() ? null : new BeansXmlValidator(); } + @Override + public void setModuleAccessForwarder(ModuleAccessForwarder forwarder) { + String moduleName = forwarder.getClass().getModule().getName(); + Reflections.setModuleAccessForwarder(forwarder, moduleName); + } + @Override public synchronized TypeDiscoveryConfiguration startExtensions(Iterable> extensions) { return weldStartup.startExtensions(extensions); @@ -115,6 +123,7 @@ public synchronized void shutdown() { weldRuntime.shutdown(); weldRuntime = null; } + Reflections.clearModuleAccessForwarder(); } @Override @@ -160,4 +169,4 @@ private void checkInitializationNotAlreadyEnded() { throw BootstrapLogger.LOG.callingBootstrapMethodAfterContainerHasBeenInitialized(); } } -} \ No newline at end of file +} diff --git a/impl/src/main/java/org/jboss/weld/invokable/MethodHandleUtils.java b/impl/src/main/java/org/jboss/weld/invokable/MethodHandleUtils.java index 7e35f7a746..2f254e2afd 100644 --- a/impl/src/main/java/org/jboss/weld/invokable/MethodHandleUtils.java +++ b/impl/src/main/java/org/jboss/weld/invokable/MethodHandleUtils.java @@ -17,6 +17,7 @@ import jakarta.enterprise.invoke.Invoker; import org.jboss.weld.logging.InvokerLogger; +import org.jboss.weld.util.reflection.Reflections; class MethodHandleUtils { private MethodHandleUtils() { @@ -86,17 +87,8 @@ private static MethodHandles.Lookup lookupFor(Executable method) throws IllegalA return MethodHandles.publicLookup(); } - // to create a method handle for a `protected`, package-private or `private` method, - // we need a private lookup in the declaring class - Module thisModule = MethodHandleUtils.class.getModule(); - Class targetClass = method.getDeclaringClass(); - Module targetModule = targetClass.getModule(); - if (!thisModule.canRead(targetModule)) { - // we need to read the other module in order to have privateLookup access - // see javadoc for MethodHandles.privateLookupIn() - thisModule.addReads(targetModule); - } - return MethodHandles.privateLookupIn(targetClass, MethodHandles.lookup()); + Reflections.ensureModuleAccess(method.getDeclaringClass()); + return MethodHandles.privateLookupIn(method.getDeclaringClass(), MethodHandles.lookup()); } static MethodHandle createMethodHandle(Method method) { diff --git a/impl/src/main/java/org/jboss/weld/util/BeanMethods.java b/impl/src/main/java/org/jboss/weld/util/BeanMethods.java index 76bc5a28e3..834ed0a165 100644 --- a/impl/src/main/java/org/jboss/weld/util/BeanMethods.java +++ b/impl/src/main/java/org/jboss/weld/util/BeanMethods.java @@ -51,6 +51,7 @@ import org.jboss.weld.util.collections.ImmutableList; import org.jboss.weld.util.collections.ImmutableSet; import org.jboss.weld.util.reflection.Formats; +import org.jboss.weld.util.reflection.Reflections; public class BeanMethods { @@ -360,6 +361,7 @@ public void processMethod(EnhancedAnnotatedMethod method) { if (methodMetadata == null) { methodMetadata = new LinkedList(); } + Reflections.ensureModuleAccess(javaMethod.getDeclaringClass()); javaMethod.setAccessible(true); methodMetadata.add(method.getJavaMember()); } diff --git a/impl/src/main/java/org/jboss/weld/util/reflection/Reflections.java b/impl/src/main/java/org/jboss/weld/util/reflection/Reflections.java index f96ca93fb3..abc7e1a543 100644 --- a/impl/src/main/java/org/jboss/weld/util/reflection/Reflections.java +++ b/impl/src/main/java/org/jboss/weld/util/reflection/Reflections.java @@ -38,7 +38,9 @@ import java.util.HashSet; import java.util.Map; import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import org.jboss.weld.bootstrap.api.ModuleAccessForwarder; import org.jboss.weld.exceptions.WeldException; import org.jboss.weld.logging.ReflectionLogger; import org.jboss.weld.resources.spi.ResourceLoader; @@ -545,6 +547,53 @@ public static boolean hasDeclaredField(Class javaClass, String name) { return false; } + private static final Set forwardedPackages = ConcurrentHashMap.newKeySet(); + private static volatile ModuleAccessForwarder moduleAccessForwarder; + private static volatile String entryPointModuleName; + + public static void setModuleAccessForwarder(ModuleAccessForwarder forwarder, String moduleName) { + moduleAccessForwarder = forwarder; + entryPointModuleName = moduleName; + } + + public static void clearModuleAccessForwarder() { + moduleAccessForwarder = null; + entryPointModuleName = null; + forwardedPackages.clear(); + } + + public static void ensureModuleAccess(Class targetClass) { + Module targetModule = targetClass.getModule(); + if (!targetModule.isNamed()) { + return; + } + Module coreModule = Reflections.class.getModule(); + if (!coreModule.canRead(targetModule)) { + coreModule.addReads(targetModule); + } + String pkg = targetClass.getPackageName(); + if (targetModule.isOpen(pkg, coreModule)) { + return; + } + ModuleAccessForwarder forwarder = moduleAccessForwarder; + String key = targetModule.getName() + "/" + pkg; + if (forwardedPackages.add(key) && forwarder != null) { + try { + forwarder.forwardAccess(targetModule, pkg, coreModule); + } catch (Exception e) { + String target = entryPointModuleName != null + ? entryPointModuleName + : "org.jboss.weld.se"; + throw new RuntimeException( + "Cannot access package '" + pkg + "' in module '" + + targetModule.getName() + "'. Add 'opens " + pkg + + " to " + target + ";' to your module-info.java" + + " to allow CDI bean discovery and injection.", + e); + } + } + } + /** * Set the {@code accessible} flag for this accessible object. * Uses {@link AccessibleObject#isAccessible()} to check accessibility. @@ -564,6 +613,9 @@ public static void ensureAccessible(AccessibleObject accessibleObject) { */ public static void ensureAccessible(AccessibleObject accessibleObject, Object instance) { if (accessibleObject != null) { + if (accessibleObject instanceof Member member) { + ensureModuleAccess(member.getDeclaringClass()); + } if (instance != null) { if (!accessibleObject.canAccess(instance)) { accessibleObject.setAccessible(true); @@ -584,6 +636,7 @@ public static void ensureAccessible(AccessibleObject accessibleObject, Object in * @param */ public static T getAccessibleCopyOfMember(T member) { + ensureModuleAccess(member.getDeclaringClass()); T copy = copyMember(member); copy.setAccessible(true); return copy; From 1b3e43ab327bfdc88e070b7b6852f0dc6492a9e3 Mon Sep 17 00:00:00 2001 From: Matej Novotny Date: Wed, 29 Jul 2026 12:36:03 +0200 Subject: [PATCH 08/13] Wire JPMS module access forwarding into SE and Servlet bootstrap --- .../main/java/org/jboss/weld/environment/se/Weld.java | 1 + .../weld/environment/servlet/WeldServletLifecycle.java | 1 + .../weld/environment/undertow/UndertowContainer.java | 9 ++++++++- .../java/org/jboss/weld/util/reflection/Reflections.java | 5 ++++- 4 files changed, 14 insertions(+), 2 deletions(-) diff --git a/environments/se/core/src/main/java/org/jboss/weld/environment/se/Weld.java b/environments/se/core/src/main/java/org/jboss/weld/environment/se/Weld.java index 9f948b4b8d..d7086079cd 100644 --- a/environments/se/core/src/main/java/org/jboss/weld/environment/se/Weld.java +++ b/environments/se/core/src/main/java/org/jboss/weld/environment/se/Weld.java @@ -831,6 +831,7 @@ public WeldContainer initialize() { } final WeldBootstrap bootstrap = new WeldBootstrap(); + bootstrap.setModuleAccessForwarder((source, pkg, target) -> source.addOpens(pkg, target)); // load possible additional BDA parseAdditionalBeanDefiningAnnotations(); final Deployment deployment = createDeployment(resourceLoader, bootstrap); diff --git a/environments/servlet/core/src/main/java/org/jboss/weld/environment/servlet/WeldServletLifecycle.java b/environments/servlet/core/src/main/java/org/jboss/weld/environment/servlet/WeldServletLifecycle.java index 55653e71f9..b2ddfb2a84 100644 --- a/environments/servlet/core/src/main/java/org/jboss/weld/environment/servlet/WeldServletLifecycle.java +++ b/environments/servlet/core/src/main/java/org/jboss/weld/environment/servlet/WeldServletLifecycle.java @@ -148,6 +148,7 @@ boolean initialize(ServletContext context) { } final CDI11Bootstrap bootstrap = new WeldBootstrap(); + bootstrap.setModuleAccessForwarder((source, pkg, target) -> source.addOpens(pkg, target)); if (isBootstrapNeeded) { final CDI11Deployment deployment = createDeployment(context, bootstrap); diff --git a/environments/servlet/core/src/main/java/org/jboss/weld/environment/undertow/UndertowContainer.java b/environments/servlet/core/src/main/java/org/jboss/weld/environment/undertow/UndertowContainer.java index db67df2974..f150ffa749 100644 --- a/environments/servlet/core/src/main/java/org/jboss/weld/environment/undertow/UndertowContainer.java +++ b/environments/servlet/core/src/main/java/org/jboss/weld/environment/undertow/UndertowContainer.java @@ -29,7 +29,14 @@ public class UndertowContainer implements Container { @Override public boolean touch(ResourceLoader resourceLoader, ContainerContext context) throws Exception { - return context.getServletContext().getClass().getName().startsWith(UDT_SERVLET_PREFIX); + boolean isUndertow = context.getServletContext().getClass().getName().startsWith(UDT_SERVLET_PREFIX); + if (isUndertow) { + Module servletModule = this.getClass().getModule(); + if (servletModule.isNamed()) { + servletModule.addReads(context.getServletContext().getClass().getModule()); + } + } + return isUndertow; } @Override diff --git a/impl/src/main/java/org/jboss/weld/util/reflection/Reflections.java b/impl/src/main/java/org/jboss/weld/util/reflection/Reflections.java index abc7e1a543..097cca694a 100644 --- a/impl/src/main/java/org/jboss/weld/util/reflection/Reflections.java +++ b/impl/src/main/java/org/jboss/weld/util/reflection/Reflections.java @@ -563,11 +563,14 @@ public static void clearModuleAccessForwarder() { } public static void ensureModuleAccess(Class targetClass) { + Module coreModule = Reflections.class.getModule(); + if (!coreModule.isNamed()) { + return; + } Module targetModule = targetClass.getModule(); if (!targetModule.isNamed()) { return; } - Module coreModule = Reflections.class.getModule(); if (!coreModule.canRead(targetModule)) { coreModule.addReads(targetModule); } From 2197c841c5943163a7c5c115cf2033878c78e800 Mon Sep 17 00:00:00 2001 From: Matej Novotny Date: Wed, 29 Jul 2026 15:05:05 +0200 Subject: [PATCH 09/13] Add JPMS integration test module --- .../common/src/main/java/module-info.java | 2 + .../se/core/src/main/java/module-info.java | 2 + .../core/src/main/java/module-info.java | 2 + impl/src/main/java/module-info.java | 3 + .../weld/util/reflection/Reflections.java | 4 + pom.xml | 6 ++ tests-jpms/pom.xml | 62 +++++++++++++++ tests-jpms/src/main/java/module-info.java | 4 + .../jpms/beans/ApplicationScopedBean.java | 10 +++ .../jpms/beans/ConstructorInjectedBean.java | 18 +++++ .../weld/tests/jpms/beans/DependentBean.java | 10 +++ .../tests/jpms/beans/FieldInjectedBean.java | 14 ++++ .../tests/jpms/beans/InterceptedBean.java | 11 +++ .../jboss/weld/tests/jpms/beans/Logged.java | 16 ++++ .../tests/jpms/beans/LoggingInterceptor.java | 18 +++++ .../tests/jpms/closed/ClosedPackageBean.java | 10 +++ .../src/main/resources/META-INF/beans.xml | 8 ++ .../weld/tests/jpms/JpmsIntegrationIT.java | 77 +++++++++++++++++++ .../src/main/java/module-info.java | 4 + 19 files changed, 281 insertions(+) create mode 100644 tests-jpms/pom.xml create mode 100644 tests-jpms/src/main/java/module-info.java create mode 100644 tests-jpms/src/main/java/org/jboss/weld/tests/jpms/beans/ApplicationScopedBean.java create mode 100644 tests-jpms/src/main/java/org/jboss/weld/tests/jpms/beans/ConstructorInjectedBean.java create mode 100644 tests-jpms/src/main/java/org/jboss/weld/tests/jpms/beans/DependentBean.java create mode 100644 tests-jpms/src/main/java/org/jboss/weld/tests/jpms/beans/FieldInjectedBean.java create mode 100644 tests-jpms/src/main/java/org/jboss/weld/tests/jpms/beans/InterceptedBean.java create mode 100644 tests-jpms/src/main/java/org/jboss/weld/tests/jpms/beans/Logged.java create mode 100644 tests-jpms/src/main/java/org/jboss/weld/tests/jpms/beans/LoggingInterceptor.java create mode 100644 tests-jpms/src/main/java/org/jboss/weld/tests/jpms/closed/ClosedPackageBean.java create mode 100644 tests-jpms/src/main/resources/META-INF/beans.xml create mode 100644 tests-jpms/src/test/java/org/jboss/weld/tests/jpms/JpmsIntegrationIT.java diff --git a/environments/common/src/main/java/module-info.java b/environments/common/src/main/java/module-info.java index 30a9e5bd49..9e409006bb 100644 --- a/environments/common/src/main/java/module-info.java +++ b/environments/common/src/main/java/module-info.java @@ -4,6 +4,8 @@ requires static org.jboss.logging.annotations; requires static org.jboss.jandex; + opens org.jboss.weld.environment.logging to org.jboss.logging; + exports org.jboss.weld.environment to org.jboss.weld.se, org.jboss.weld.servlet; exports org.jboss.weld.environment.deployment to diff --git a/environments/se/core/src/main/java/module-info.java b/environments/se/core/src/main/java/module-info.java index 46a5fa3af7..11297d2d9a 100644 --- a/environments/se/core/src/main/java/module-info.java +++ b/environments/se/core/src/main/java/module-info.java @@ -5,6 +5,8 @@ requires org.jboss.logging; requires static org.jboss.logging.annotations; + opens org.jboss.weld.environment.se.logging to org.jboss.logging; + exports org.jboss.weld.environment.se; exports org.jboss.weld.environment.se.bindings; exports org.jboss.weld.environment.se.contexts; diff --git a/environments/servlet/core/src/main/java/module-info.java b/environments/servlet/core/src/main/java/module-info.java index d8cf20b84a..4e3c6c673b 100644 --- a/environments/servlet/core/src/main/java/module-info.java +++ b/environments/servlet/core/src/main/java/module-info.java @@ -6,6 +6,8 @@ requires jakarta.servlet; requires static org.apache.tomcat.catalina; + opens org.jboss.weld.environment.servlet.logging to org.jboss.logging; + exports org.jboss.weld.environment.servlet; provides jakarta.servlet.ServletContainerInitializer diff --git a/impl/src/main/java/module-info.java b/impl/src/main/java/module-info.java index 9a949cb5c7..af161583aa 100644 --- a/impl/src/main/java/module-info.java +++ b/impl/src/main/java/module-info.java @@ -2,6 +2,7 @@ requires transitive org.jboss.weld.spi; requires org.jboss.classfilewriter; requires org.jboss.logging; + requires java.logging; requires static org.jboss.logging.annotations; requires static jakarta.cdi.el; requires static jakarta.el; @@ -118,6 +119,8 @@ exports org.jboss.weld.xml to org.jboss.weld.environment.common; + opens org.jboss.weld.logging to org.jboss.logging; + uses org.jboss.weld.module.WeldModule; uses jakarta.enterprise.inject.spi.Extension; uses jakarta.enterprise.inject.build.compatible.spi.BuildCompatibleExtension; diff --git a/impl/src/main/java/org/jboss/weld/util/reflection/Reflections.java b/impl/src/main/java/org/jboss/weld/util/reflection/Reflections.java index 097cca694a..0729d1ef70 100644 --- a/impl/src/main/java/org/jboss/weld/util/reflection/Reflections.java +++ b/impl/src/main/java/org/jboss/weld/util/reflection/Reflections.java @@ -571,6 +571,10 @@ public static void ensureModuleAccess(Class targetClass) { if (!targetModule.isNamed()) { return; } + String moduleName = targetModule.getName(); + if (moduleName.startsWith("java.") || moduleName.startsWith("jdk.")) { + return; + } if (!coreModule.canRead(targetModule)) { coreModule.addReads(targetModule); } diff --git a/pom.xml b/pom.xml index e365f7e385..377e6e77e9 100644 --- a/pom.xml +++ b/pom.xml @@ -517,6 +517,12 @@ inject-tck-runner + + jpms-tests + + tests-jpms + + tck diff --git a/tests-jpms/pom.xml b/tests-jpms/pom.xml new file mode 100644 index 0000000000..9a24e91000 --- /dev/null +++ b/tests-jpms/pom.xml @@ -0,0 +1,62 @@ + + + + org.jboss.weld + weld-core-parent + 7.0.0-SNAPSHOT + ../pom.xml + + 4.0.0 + weld-tests-jpms + Weld JPMS Integration Tests + jar + + + + org.jboss.weld.se + weld-se-core + + + org.junit.jupiter + junit-jupiter + 5.12.2 + test + + + + + + + maven-compiler-plugin + + + -proc:none + + + + + maven-surefire-plugin + + true + + + + maven-failsafe-plugin + 3.5.4 + + true + + + + + integration-test + verify + + + + + + + diff --git a/tests-jpms/src/main/java/module-info.java b/tests-jpms/src/main/java/module-info.java new file mode 100644 index 0000000000..41eeca9e3c --- /dev/null +++ b/tests-jpms/src/main/java/module-info.java @@ -0,0 +1,4 @@ +module weld.tests.jpms { + requires org.jboss.weld.se; + opens org.jboss.weld.tests.jpms.beans to org.jboss.weld.se; +} diff --git a/tests-jpms/src/main/java/org/jboss/weld/tests/jpms/beans/ApplicationScopedBean.java b/tests-jpms/src/main/java/org/jboss/weld/tests/jpms/beans/ApplicationScopedBean.java new file mode 100644 index 0000000000..96c5a3f8b1 --- /dev/null +++ b/tests-jpms/src/main/java/org/jboss/weld/tests/jpms/beans/ApplicationScopedBean.java @@ -0,0 +1,10 @@ +package org.jboss.weld.tests.jpms.beans; + +import jakarta.enterprise.context.ApplicationScoped; + +@ApplicationScoped +public class ApplicationScopedBean { + public String hello() { + return "hello"; + } +} diff --git a/tests-jpms/src/main/java/org/jboss/weld/tests/jpms/beans/ConstructorInjectedBean.java b/tests-jpms/src/main/java/org/jboss/weld/tests/jpms/beans/ConstructorInjectedBean.java new file mode 100644 index 0000000000..74303585d6 --- /dev/null +++ b/tests-jpms/src/main/java/org/jboss/weld/tests/jpms/beans/ConstructorInjectedBean.java @@ -0,0 +1,18 @@ +package org.jboss.weld.tests.jpms.beans; + +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; + +@ApplicationScoped +public class ConstructorInjectedBean { + private final DependentBean dependent; + + @Inject + public ConstructorInjectedBean(DependentBean dependent) { + this.dependent = dependent; + } + + public String delegated() { + return dependent.value(); + } +} diff --git a/tests-jpms/src/main/java/org/jboss/weld/tests/jpms/beans/DependentBean.java b/tests-jpms/src/main/java/org/jboss/weld/tests/jpms/beans/DependentBean.java new file mode 100644 index 0000000000..05012fe71c --- /dev/null +++ b/tests-jpms/src/main/java/org/jboss/weld/tests/jpms/beans/DependentBean.java @@ -0,0 +1,10 @@ +package org.jboss.weld.tests.jpms.beans; + +import jakarta.enterprise.context.Dependent; + +@Dependent +public class DependentBean { + public String value() { + return "dependent"; + } +} diff --git a/tests-jpms/src/main/java/org/jboss/weld/tests/jpms/beans/FieldInjectedBean.java b/tests-jpms/src/main/java/org/jboss/weld/tests/jpms/beans/FieldInjectedBean.java new file mode 100644 index 0000000000..cd2ba30f4a --- /dev/null +++ b/tests-jpms/src/main/java/org/jboss/weld/tests/jpms/beans/FieldInjectedBean.java @@ -0,0 +1,14 @@ +package org.jboss.weld.tests.jpms.beans; + +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; + +@ApplicationScoped +public class FieldInjectedBean { + @Inject + private DependentBean dependent; + + public String delegated() { + return dependent.value(); + } +} diff --git a/tests-jpms/src/main/java/org/jboss/weld/tests/jpms/beans/InterceptedBean.java b/tests-jpms/src/main/java/org/jboss/weld/tests/jpms/beans/InterceptedBean.java new file mode 100644 index 0000000000..643d563daa --- /dev/null +++ b/tests-jpms/src/main/java/org/jboss/weld/tests/jpms/beans/InterceptedBean.java @@ -0,0 +1,11 @@ +package org.jboss.weld.tests.jpms.beans; + +import jakarta.enterprise.context.ApplicationScoped; + +@ApplicationScoped +@Logged +public class InterceptedBean { + public String work() { + return "intercepted"; + } +} diff --git a/tests-jpms/src/main/java/org/jboss/weld/tests/jpms/beans/Logged.java b/tests-jpms/src/main/java/org/jboss/weld/tests/jpms/beans/Logged.java new file mode 100644 index 0000000000..7c94476a12 --- /dev/null +++ b/tests-jpms/src/main/java/org/jboss/weld/tests/jpms/beans/Logged.java @@ -0,0 +1,16 @@ +package org.jboss.weld.tests.jpms.beans; + +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.TYPE; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +import jakarta.interceptor.InterceptorBinding; + +@InterceptorBinding +@Retention(RUNTIME) +@Target({ METHOD, TYPE }) +public @interface Logged { +} diff --git a/tests-jpms/src/main/java/org/jboss/weld/tests/jpms/beans/LoggingInterceptor.java b/tests-jpms/src/main/java/org/jboss/weld/tests/jpms/beans/LoggingInterceptor.java new file mode 100644 index 0000000000..d9bf94c505 --- /dev/null +++ b/tests-jpms/src/main/java/org/jboss/weld/tests/jpms/beans/LoggingInterceptor.java @@ -0,0 +1,18 @@ +package org.jboss.weld.tests.jpms.beans; + +import jakarta.interceptor.AroundInvoke; +import jakarta.interceptor.Interceptor; +import jakarta.interceptor.InvocationContext; + +@Interceptor +@Logged +public class LoggingInterceptor { + + public static boolean invoked = false; + + @AroundInvoke + public Object log(InvocationContext ctx) throws Exception { + invoked = true; + return ctx.proceed(); + } +} diff --git a/tests-jpms/src/main/java/org/jboss/weld/tests/jpms/closed/ClosedPackageBean.java b/tests-jpms/src/main/java/org/jboss/weld/tests/jpms/closed/ClosedPackageBean.java new file mode 100644 index 0000000000..0da657cf91 --- /dev/null +++ b/tests-jpms/src/main/java/org/jboss/weld/tests/jpms/closed/ClosedPackageBean.java @@ -0,0 +1,10 @@ +package org.jboss.weld.tests.jpms.closed; + +import jakarta.enterprise.context.ApplicationScoped; + +@ApplicationScoped +public class ClosedPackageBean { + public String value() { + return "closed"; + } +} diff --git a/tests-jpms/src/main/resources/META-INF/beans.xml b/tests-jpms/src/main/resources/META-INF/beans.xml new file mode 100644 index 0000000000..018cb257fe --- /dev/null +++ b/tests-jpms/src/main/resources/META-INF/beans.xml @@ -0,0 +1,8 @@ + + + org.jboss.weld.tests.jpms.beans.LoggingInterceptor + + diff --git a/tests-jpms/src/test/java/org/jboss/weld/tests/jpms/JpmsIntegrationIT.java b/tests-jpms/src/test/java/org/jboss/weld/tests/jpms/JpmsIntegrationIT.java new file mode 100644 index 0000000000..1146bd07ab --- /dev/null +++ b/tests-jpms/src/test/java/org/jboss/weld/tests/jpms/JpmsIntegrationIT.java @@ -0,0 +1,77 @@ +package org.jboss.weld.tests.jpms; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.fail; + +import jakarta.enterprise.inject.se.SeContainer; + +import org.jboss.weld.environment.se.Weld; +import org.jboss.weld.tests.jpms.beans.ApplicationScopedBean; +import org.jboss.weld.tests.jpms.beans.ConstructorInjectedBean; +import org.jboss.weld.tests.jpms.beans.DependentBean; +import org.jboss.weld.tests.jpms.beans.FieldInjectedBean; +import org.jboss.weld.tests.jpms.beans.InterceptedBean; +import org.jboss.weld.tests.jpms.beans.LoggingInterceptor; +import org.jboss.weld.tests.jpms.closed.ClosedPackageBean; +import org.junit.jupiter.api.Test; + +public class JpmsIntegrationIT { + + @Test + public void testBeansOnModulePath() { + Weld weld = new Weld().disableDiscovery() + .packages(ApplicationScopedBean.class) + .interceptors(LoggingInterceptor.class); + try (SeContainer container = weld.initialize()) { + ApplicationScopedBean appScoped = container.select(ApplicationScopedBean.class).get(); + assertEquals("hello", appScoped.hello()); + assertNotEquals(ApplicationScopedBean.class, appScoped.getClass(), + "ApplicationScoped bean should be a proxy"); + + DependentBean dependent = container.select(DependentBean.class).get(); + assertEquals("dependent", dependent.value()); + + FieldInjectedBean fieldInjected = container.select(FieldInjectedBean.class).get(); + assertEquals("dependent", fieldInjected.delegated()); + + ConstructorInjectedBean ctorInjected = container.select(ConstructorInjectedBean.class).get(); + assertEquals("dependent", ctorInjected.delegated()); + + LoggingInterceptor.invoked = false; + InterceptedBean intercepted = container.select(InterceptedBean.class).get(); + assertEquals("intercepted", intercepted.work()); + assertTrue(LoggingInterceptor.invoked, "Interceptor should have been invoked"); + } + } + + @Test + public void testMissingOpensGivesClearErrorMessage() { + try { + Weld weld = new Weld().disableDiscovery() + .packages(ClosedPackageBean.class); + try (SeContainer container = weld.initialize()) { + container.select(ClosedPackageBean.class).get(); + fail("Should have thrown — package is not opened"); + } + } catch (Exception e) { + String msgs = collectMessages(e); + assertTrue(msgs.contains("opens"), + "Error chain should mention 'opens' directive, got: " + msgs); + assertTrue(msgs.contains("org.jboss.weld.tests.jpms.closed"), + "Error chain should mention the closed package, got: " + msgs); + } + } + + private String collectMessages(Throwable t) { + StringBuilder sb = new StringBuilder(); + while (t != null) { + if (t.getMessage() != null) { + sb.append(t.getMessage()).append(" "); + } + t = t.getCause(); + } + return sb.toString(); + } +} diff --git a/weld-lite-extension-translator/src/main/java/module-info.java b/weld-lite-extension-translator/src/main/java/module-info.java index 38056c320d..785b3470f8 100644 --- a/weld-lite-extension-translator/src/main/java/module-info.java +++ b/weld-lite-extension-translator/src/main/java/module-info.java @@ -4,9 +4,13 @@ requires org.jboss.logging; requires static org.jboss.logging.annotations; + opens org.jboss.weld.lite.extension.translator.logging to org.jboss.logging; + exports org.jboss.weld.lite.extension.translator to org.jboss.weld.se, org.jboss.weld.servlet; + uses jakarta.enterprise.inject.build.compatible.spi.BuildCompatibleExtension; + provides jakarta.enterprise.inject.build.compatible.spi.BuildServices with org.jboss.weld.lite.extension.translator.BuildServicesImpl; } From 5f7ed2566d87f38b0ca5a952ede3b6eabd4745cc Mon Sep 17 00:00:00 2001 From: Matej Novotny Date: Wed, 29 Jul 2026 16:50:43 +0200 Subject: [PATCH 10/13] Fix race condition in module access forwarding and apply review fixes --- .../core/src/main/java/module-info.java | 1 + .../weld/util/reflection/Reflections.java | 47 +++++++++++++------ modules/web/src/main/java/module-info.java | 2 + pom.xml | 1 + tests-jpms/pom.xml | 4 +- .../src/main/resources/META-INF/beans.xml | 8 ---- 6 files changed, 39 insertions(+), 24 deletions(-) delete mode 100644 tests-jpms/src/main/resources/META-INF/beans.xml diff --git a/environments/servlet/core/src/main/java/module-info.java b/environments/servlet/core/src/main/java/module-info.java index 4e3c6c673b..63ca9dac23 100644 --- a/environments/servlet/core/src/main/java/module-info.java +++ b/environments/servlet/core/src/main/java/module-info.java @@ -3,6 +3,7 @@ requires org.jboss.weld.environment.common; requires org.jboss.weld.lite.extension.translator; requires org.jboss.logging; + requires static org.jboss.logging.annotations; requires jakarta.servlet; requires static org.apache.tomcat.catalina; diff --git a/impl/src/main/java/org/jboss/weld/util/reflection/Reflections.java b/impl/src/main/java/org/jboss/weld/util/reflection/Reflections.java index 0729d1ef70..a259cb60dd 100644 --- a/impl/src/main/java/org/jboss/weld/util/reflection/Reflections.java +++ b/impl/src/main/java/org/jboss/weld/util/reflection/Reflections.java @@ -39,6 +39,7 @@ import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CountDownLatch; import org.jboss.weld.bootstrap.api.ModuleAccessForwarder; import org.jboss.weld.exceptions.WeldException; @@ -547,7 +548,7 @@ public static boolean hasDeclaredField(Class javaClass, String name) { return false; } - private static final Set forwardedPackages = ConcurrentHashMap.newKeySet(); + private static final ConcurrentHashMap forwardedPackages = new ConcurrentHashMap<>(); private static volatile ModuleAccessForwarder moduleAccessForwarder; private static volatile String entryPointModuleName; @@ -557,9 +558,9 @@ public static void setModuleAccessForwarder(ModuleAccessForwarder forwarder, Str } public static void clearModuleAccessForwarder() { + forwardedPackages.clear(); moduleAccessForwarder = null; entryPointModuleName = null; - forwardedPackages.clear(); } public static void ensureModuleAccess(Class targetClass) { @@ -583,21 +584,39 @@ public static void ensureModuleAccess(Class targetClass) { return; } ModuleAccessForwarder forwarder = moduleAccessForwarder; + if (forwarder == null) { + return; + } + // ConcurrentBeanDeployer processes beans in parallel, so multiple threads + // may need access to the same package simultaneously. A CountDownLatch + // ensures only one thread calls addOpens() while others wait for it to + // complete before proceeding to setAccessible(). String key = targetModule.getName() + "/" + pkg; - if (forwardedPackages.add(key) && forwarder != null) { + CountDownLatch latch = new CountDownLatch(1); + CountDownLatch existing = forwardedPackages.putIfAbsent(key, latch); + if (existing != null) { try { - forwarder.forwardAccess(targetModule, pkg, coreModule); - } catch (Exception e) { - String target = entryPointModuleName != null - ? entryPointModuleName - : "org.jboss.weld.se"; - throw new RuntimeException( - "Cannot access package '" + pkg + "' in module '" - + targetModule.getName() + "'. Add 'opens " + pkg - + " to " + target + ";' to your module-info.java" - + " to allow CDI bean discovery and injection.", - e); + existing.await(); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); } + return; + } + try { + forwarder.forwardAccess(targetModule, pkg, coreModule); + } catch (Exception e) { + forwardedPackages.remove(key); + String target = entryPointModuleName != null + ? entryPointModuleName + : coreModule.getName(); + throw new RuntimeException( + "Cannot access package '" + pkg + "' in module '" + + targetModule.getName() + "'. Add 'opens " + pkg + + " to " + target + ";' to your module-info.java" + + " to allow CDI bean discovery and injection.", + e); + } finally { + latch.countDown(); } } diff --git a/modules/web/src/main/java/module-info.java b/modules/web/src/main/java/module-info.java index b8bb2b196d..17a4e66086 100644 --- a/modules/web/src/main/java/module-info.java +++ b/modules/web/src/main/java/module-info.java @@ -7,6 +7,8 @@ requires static jakarta.el; requires static jakarta.servlet; + opens org.jboss.weld.module.web.logging to org.jboss.logging; + provides org.jboss.weld.module.WeldModule with org.jboss.weld.module.web.WeldWebModule; } diff --git a/pom.xml b/pom.xml index 377e6e77e9..0e857bbe2f 100644 --- a/pom.xml +++ b/pom.xml @@ -85,6 +85,7 @@ 4.0.0 3.0.2 4.13.2 + 6.1.2 1.2.6 3.3.7 4.10.2.0 diff --git a/tests-jpms/pom.xml b/tests-jpms/pom.xml index 9a24e91000..96a04d9195 100644 --- a/tests-jpms/pom.xml +++ b/tests-jpms/pom.xml @@ -21,7 +21,7 @@ org.junit.jupiter junit-jupiter - 5.12.2 + ${junit.jupiter.version} test @@ -44,7 +44,7 @@ maven-failsafe-plugin - 3.5.4 + ${surefire.version} true diff --git a/tests-jpms/src/main/resources/META-INF/beans.xml b/tests-jpms/src/main/resources/META-INF/beans.xml deleted file mode 100644 index 018cb257fe..0000000000 --- a/tests-jpms/src/main/resources/META-INF/beans.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - org.jboss.weld.tests.jpms.beans.LoggingInterceptor - - From 412494c5a2b96ede3573914efd32a5b22c4610a4 Mon Sep 17 00:00:00 2001 From: Matej Novotny Date: Wed, 29 Jul 2026 17:16:54 +0200 Subject: [PATCH 11/13] Move JPMS tests into default test profile --- pom.xml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/pom.xml b/pom.xml index 0e857bbe2f..3164d02544 100644 --- a/pom.xml +++ b/pom.xml @@ -516,11 +516,6 @@ lang-model-tck tests-arquillian inject-tck-runner - - - - jpms-tests - tests-jpms From 5e2e699fbe8f441a58a089b265d12a74bc127d33 Mon Sep 17 00:00:00 2001 From: Matej Novotny Date: Wed, 29 Jul 2026 17:27:58 +0200 Subject: [PATCH 12/13] CI: build Weld API SNAPSHOT from fork before core build --- .github/workflows/ci-actions.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/ci-actions.yml b/.github/workflows/ci-actions.yml index 987b90c412..a71aac9f14 100644 --- a/.github/workflows/ci-actions.yml +++ b/.github/workflows/ci-actions.yml @@ -45,6 +45,10 @@ jobs: # Caching is an automated pre/post action that installs the cache if the key exists and exports the cache # after the job is done. In this case we refresh the cache monthly (by changing key) to avoid unlimited growth. key: q2maven-main-${{ steps.get-date.outputs.date }} + - name: Build Weld API SNAPSHOT + run: | + git clone --branch jpms-migration --depth 1 https://github.com/manovotn/api.git /tmp/weld-api + mvn -f /tmp/weld-api/pom.xml clean install -DskipTests -Dno-format -B -V - name: Build Weld SNAPSHOT run: mvn clean install -DskipTests -Dno-format -B -V -Dhttp.keepAlive=false -Dmaven.wagon.http.pool=false -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 - name: Patch WildFly From 1df1df2056a6ec0234aa9da0b0ab23a3b8422ede Mon Sep 17 00:00:00 2001 From: Matej Novotny Date: Wed, 29 Jul 2026 17:52:18 +0200 Subject: [PATCH 13/13] Add SPDX license headers to new files --- environments/common/src/main/java/module-info.java | 4 ++++ environments/se/core/src/main/java/module-info.java | 4 ++++ environments/servlet/core/src/main/java/module-info.java | 4 ++++ impl/src/main/java/module-info.java | 4 ++++ modules/ejb/src/main/java/module-info.java | 4 ++++ modules/jsf/src/main/java/module-info.java | 4 ++++ modules/jta/src/main/java/module-info.java | 4 ++++ modules/web/src/main/java/module-info.java | 4 ++++ tests-jpms/src/main/java/module-info.java | 4 ++++ .../jboss/weld/tests/jpms/beans/ApplicationScopedBean.java | 4 ++++ .../jboss/weld/tests/jpms/beans/ConstructorInjectedBean.java | 4 ++++ .../java/org/jboss/weld/tests/jpms/beans/DependentBean.java | 4 ++++ .../org/jboss/weld/tests/jpms/beans/FieldInjectedBean.java | 4 ++++ .../java/org/jboss/weld/tests/jpms/beans/InterceptedBean.java | 4 ++++ .../src/main/java/org/jboss/weld/tests/jpms/beans/Logged.java | 4 ++++ .../org/jboss/weld/tests/jpms/beans/LoggingInterceptor.java | 4 ++++ .../org/jboss/weld/tests/jpms/closed/ClosedPackageBean.java | 4 ++++ .../java/org/jboss/weld/tests/jpms/JpmsIntegrationIT.java | 4 ++++ weld-lite-extension-translator/src/main/java/module-info.java | 4 ++++ 19 files changed, 76 insertions(+) diff --git a/environments/common/src/main/java/module-info.java b/environments/common/src/main/java/module-info.java index 9e409006bb..bc6d93832a 100644 --- a/environments/common/src/main/java/module-info.java +++ b/environments/common/src/main/java/module-info.java @@ -1,3 +1,7 @@ +/* + * Copyright The Weld Authors + * SPDX-License-Identifier: Apache-2.0 + */ module org.jboss.weld.environment.common { requires transitive org.jboss.weld.core; requires org.jboss.logging; diff --git a/environments/se/core/src/main/java/module-info.java b/environments/se/core/src/main/java/module-info.java index 11297d2d9a..00a02d75af 100644 --- a/environments/se/core/src/main/java/module-info.java +++ b/environments/se/core/src/main/java/module-info.java @@ -1,3 +1,7 @@ +/* + * Copyright The Weld Authors + * SPDX-License-Identifier: Apache-2.0 + */ module org.jboss.weld.se { requires transitive org.jboss.weld.core; requires org.jboss.weld.environment.common; diff --git a/environments/servlet/core/src/main/java/module-info.java b/environments/servlet/core/src/main/java/module-info.java index 63ca9dac23..ee29bc49a1 100644 --- a/environments/servlet/core/src/main/java/module-info.java +++ b/environments/servlet/core/src/main/java/module-info.java @@ -1,3 +1,7 @@ +/* + * Copyright The Weld Authors + * SPDX-License-Identifier: Apache-2.0 + */ module org.jboss.weld.servlet { requires transitive org.jboss.weld.core; requires org.jboss.weld.environment.common; diff --git a/impl/src/main/java/module-info.java b/impl/src/main/java/module-info.java index af161583aa..8a3760ee87 100644 --- a/impl/src/main/java/module-info.java +++ b/impl/src/main/java/module-info.java @@ -1,3 +1,7 @@ +/* + * Copyright The Weld Authors + * SPDX-License-Identifier: Apache-2.0 + */ module org.jboss.weld.core { requires transitive org.jboss.weld.spi; requires org.jboss.classfilewriter; diff --git a/modules/ejb/src/main/java/module-info.java b/modules/ejb/src/main/java/module-info.java index a0849cd50d..41a24edf4e 100644 --- a/modules/ejb/src/main/java/module-info.java +++ b/modules/ejb/src/main/java/module-info.java @@ -1,3 +1,7 @@ +/* + * Copyright The Weld Authors + * SPDX-License-Identifier: Apache-2.0 + */ module org.jboss.weld.module.ejb { requires org.jboss.weld.core; requires org.jboss.weld.spi; diff --git a/modules/jsf/src/main/java/module-info.java b/modules/jsf/src/main/java/module-info.java index 49291b276f..c49c704a1b 100644 --- a/modules/jsf/src/main/java/module-info.java +++ b/modules/jsf/src/main/java/module-info.java @@ -1,3 +1,7 @@ +/* + * Copyright The Weld Authors + * SPDX-License-Identifier: Apache-2.0 + */ module org.jboss.weld.module.jsf { requires org.jboss.weld.core; requires org.jboss.weld.spi; diff --git a/modules/jta/src/main/java/module-info.java b/modules/jta/src/main/java/module-info.java index 27855d9b12..72eba1e08f 100644 --- a/modules/jta/src/main/java/module-info.java +++ b/modules/jta/src/main/java/module-info.java @@ -1,3 +1,7 @@ +/* + * Copyright The Weld Authors + * SPDX-License-Identifier: Apache-2.0 + */ module org.jboss.weld.module.jta { requires org.jboss.weld.core; requires org.jboss.weld.spi; diff --git a/modules/web/src/main/java/module-info.java b/modules/web/src/main/java/module-info.java index 17a4e66086..1b58d04cd9 100644 --- a/modules/web/src/main/java/module-info.java +++ b/modules/web/src/main/java/module-info.java @@ -1,3 +1,7 @@ +/* + * Copyright The Weld Authors + * SPDX-License-Identifier: Apache-2.0 + */ module org.jboss.weld.module.web { requires org.jboss.weld.core; requires org.jboss.weld.spi; diff --git a/tests-jpms/src/main/java/module-info.java b/tests-jpms/src/main/java/module-info.java index 41eeca9e3c..a71996138d 100644 --- a/tests-jpms/src/main/java/module-info.java +++ b/tests-jpms/src/main/java/module-info.java @@ -1,3 +1,7 @@ +/* + * Copyright The Weld Authors + * SPDX-License-Identifier: Apache-2.0 + */ module weld.tests.jpms { requires org.jboss.weld.se; opens org.jboss.weld.tests.jpms.beans to org.jboss.weld.se; diff --git a/tests-jpms/src/main/java/org/jboss/weld/tests/jpms/beans/ApplicationScopedBean.java b/tests-jpms/src/main/java/org/jboss/weld/tests/jpms/beans/ApplicationScopedBean.java index 96c5a3f8b1..dc2a407114 100644 --- a/tests-jpms/src/main/java/org/jboss/weld/tests/jpms/beans/ApplicationScopedBean.java +++ b/tests-jpms/src/main/java/org/jboss/weld/tests/jpms/beans/ApplicationScopedBean.java @@ -1,3 +1,7 @@ +/* + * Copyright The Weld Authors + * SPDX-License-Identifier: Apache-2.0 + */ package org.jboss.weld.tests.jpms.beans; import jakarta.enterprise.context.ApplicationScoped; diff --git a/tests-jpms/src/main/java/org/jboss/weld/tests/jpms/beans/ConstructorInjectedBean.java b/tests-jpms/src/main/java/org/jboss/weld/tests/jpms/beans/ConstructorInjectedBean.java index 74303585d6..af1d002606 100644 --- a/tests-jpms/src/main/java/org/jboss/weld/tests/jpms/beans/ConstructorInjectedBean.java +++ b/tests-jpms/src/main/java/org/jboss/weld/tests/jpms/beans/ConstructorInjectedBean.java @@ -1,3 +1,7 @@ +/* + * Copyright The Weld Authors + * SPDX-License-Identifier: Apache-2.0 + */ package org.jboss.weld.tests.jpms.beans; import jakarta.enterprise.context.ApplicationScoped; diff --git a/tests-jpms/src/main/java/org/jboss/weld/tests/jpms/beans/DependentBean.java b/tests-jpms/src/main/java/org/jboss/weld/tests/jpms/beans/DependentBean.java index 05012fe71c..a1f9059e0f 100644 --- a/tests-jpms/src/main/java/org/jboss/weld/tests/jpms/beans/DependentBean.java +++ b/tests-jpms/src/main/java/org/jboss/weld/tests/jpms/beans/DependentBean.java @@ -1,3 +1,7 @@ +/* + * Copyright The Weld Authors + * SPDX-License-Identifier: Apache-2.0 + */ package org.jboss.weld.tests.jpms.beans; import jakarta.enterprise.context.Dependent; diff --git a/tests-jpms/src/main/java/org/jboss/weld/tests/jpms/beans/FieldInjectedBean.java b/tests-jpms/src/main/java/org/jboss/weld/tests/jpms/beans/FieldInjectedBean.java index cd2ba30f4a..1281af6359 100644 --- a/tests-jpms/src/main/java/org/jboss/weld/tests/jpms/beans/FieldInjectedBean.java +++ b/tests-jpms/src/main/java/org/jboss/weld/tests/jpms/beans/FieldInjectedBean.java @@ -1,3 +1,7 @@ +/* + * Copyright The Weld Authors + * SPDX-License-Identifier: Apache-2.0 + */ package org.jboss.weld.tests.jpms.beans; import jakarta.enterprise.context.ApplicationScoped; diff --git a/tests-jpms/src/main/java/org/jboss/weld/tests/jpms/beans/InterceptedBean.java b/tests-jpms/src/main/java/org/jboss/weld/tests/jpms/beans/InterceptedBean.java index 643d563daa..45e4ecce30 100644 --- a/tests-jpms/src/main/java/org/jboss/weld/tests/jpms/beans/InterceptedBean.java +++ b/tests-jpms/src/main/java/org/jboss/weld/tests/jpms/beans/InterceptedBean.java @@ -1,3 +1,7 @@ +/* + * Copyright The Weld Authors + * SPDX-License-Identifier: Apache-2.0 + */ package org.jboss.weld.tests.jpms.beans; import jakarta.enterprise.context.ApplicationScoped; diff --git a/tests-jpms/src/main/java/org/jboss/weld/tests/jpms/beans/Logged.java b/tests-jpms/src/main/java/org/jboss/weld/tests/jpms/beans/Logged.java index 7c94476a12..21dbb1b3b9 100644 --- a/tests-jpms/src/main/java/org/jboss/weld/tests/jpms/beans/Logged.java +++ b/tests-jpms/src/main/java/org/jboss/weld/tests/jpms/beans/Logged.java @@ -1,3 +1,7 @@ +/* + * Copyright The Weld Authors + * SPDX-License-Identifier: Apache-2.0 + */ package org.jboss.weld.tests.jpms.beans; import static java.lang.annotation.ElementType.METHOD; diff --git a/tests-jpms/src/main/java/org/jboss/weld/tests/jpms/beans/LoggingInterceptor.java b/tests-jpms/src/main/java/org/jboss/weld/tests/jpms/beans/LoggingInterceptor.java index d9bf94c505..190e206eef 100644 --- a/tests-jpms/src/main/java/org/jboss/weld/tests/jpms/beans/LoggingInterceptor.java +++ b/tests-jpms/src/main/java/org/jboss/weld/tests/jpms/beans/LoggingInterceptor.java @@ -1,3 +1,7 @@ +/* + * Copyright The Weld Authors + * SPDX-License-Identifier: Apache-2.0 + */ package org.jboss.weld.tests.jpms.beans; import jakarta.interceptor.AroundInvoke; diff --git a/tests-jpms/src/main/java/org/jboss/weld/tests/jpms/closed/ClosedPackageBean.java b/tests-jpms/src/main/java/org/jboss/weld/tests/jpms/closed/ClosedPackageBean.java index 0da657cf91..64ab4fc983 100644 --- a/tests-jpms/src/main/java/org/jboss/weld/tests/jpms/closed/ClosedPackageBean.java +++ b/tests-jpms/src/main/java/org/jboss/weld/tests/jpms/closed/ClosedPackageBean.java @@ -1,3 +1,7 @@ +/* + * Copyright The Weld Authors + * SPDX-License-Identifier: Apache-2.0 + */ package org.jboss.weld.tests.jpms.closed; import jakarta.enterprise.context.ApplicationScoped; diff --git a/tests-jpms/src/test/java/org/jboss/weld/tests/jpms/JpmsIntegrationIT.java b/tests-jpms/src/test/java/org/jboss/weld/tests/jpms/JpmsIntegrationIT.java index 1146bd07ab..bcef5db77c 100644 --- a/tests-jpms/src/test/java/org/jboss/weld/tests/jpms/JpmsIntegrationIT.java +++ b/tests-jpms/src/test/java/org/jboss/weld/tests/jpms/JpmsIntegrationIT.java @@ -1,3 +1,7 @@ +/* + * Copyright The Weld Authors + * SPDX-License-Identifier: Apache-2.0 + */ package org.jboss.weld.tests.jpms; import static org.junit.jupiter.api.Assertions.assertEquals; diff --git a/weld-lite-extension-translator/src/main/java/module-info.java b/weld-lite-extension-translator/src/main/java/module-info.java index 785b3470f8..966b8b2a6f 100644 --- a/weld-lite-extension-translator/src/main/java/module-info.java +++ b/weld-lite-extension-translator/src/main/java/module-info.java @@ -1,3 +1,7 @@ +/* + * Copyright The Weld Authors + * SPDX-License-Identifier: Apache-2.0 + */ module org.jboss.weld.lite.extension.translator { requires org.jboss.weld.core; requires org.jboss.weld.spi;