Skip to content

Commit b813b6c

Browse files
committed
WELD-2811 Allow to inject other BM subtypes into container lifecycle observer methods
1 parent 7f62bc0 commit b813b6c

File tree

3 files changed

+43
-7
lines changed

3 files changed

+43
-7
lines changed

impl/src/main/java/org/jboss/weld/event/ObserverMethodImpl.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
import jakarta.enterprise.inject.Disposes;
3333
import jakarta.enterprise.inject.Instance;
3434
import jakarta.enterprise.inject.Produces;
35-
import jakarta.enterprise.inject.spi.BeanManager;
35+
import jakarta.enterprise.inject.spi.BeanContainer;
3636
import jakarta.enterprise.inject.spi.EventMetadata;
3737
import jakarta.enterprise.inject.spi.ObserverMethod;
3838
import jakarta.enterprise.inject.spi.WithAnnotations;
@@ -234,7 +234,7 @@ private <Y> void checkObserverMethod(EnhancedAnnotatedMethod<T, Y> annotated) {
234234
// if this is an observer method for container lifecycle event, it must not inject anything besides BeanManager
235235
if (containerLifecycleObserverMethod && !parameter.isAnnotationPresent(Observes.class)
236236
&& !parameter.isAnnotationPresent(ObservesAsync.class)
237-
&& !BeanManager.class.equals(parameter.getBaseType())) {
237+
&& !parameter.getTypeClosure().contains(BeanContainer.class)) {
238238
throw EventLogger.LOG.invalidInjectionPoint(this, Formats.formatAsStackTraceElement(annotated.getJavaMember()));
239239
}
240240
}

tests-arquillian/src/test/java/org/jboss/weld/tests/extensions/ExtensionTest.java

+8
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,14 @@ public void testExtensionInjectableAsBean(SimpleExtension extension) {
5252
assertTrue(extension.isObservedBeforeBeanDiscovery());
5353
}
5454

55+
@Test
56+
public void testBeanManagerInjectionAsOptionalParam() {
57+
assertTrue(SimpleExtension.observedBeforeBeanDiscoveryBc);
58+
assertTrue(SimpleExtension.observedBeforeBeanDiscoveryBm);
59+
assertTrue(SimpleExtension.observedBeforeBeanDiscoveryWm);
60+
assertTrue(SimpleExtension.observedBeforeBeanDiscoveryElBm);
61+
}
62+
5563
/*
5664
* description = "WELD-572"
5765
*/

tests-arquillian/src/test/java/org/jboss/weld/tests/extensions/SimpleExtension.java

+33-5
Original file line numberDiff line numberDiff line change
@@ -17,26 +17,54 @@
1717
package org.jboss.weld.tests.extensions;
1818

1919
import jakarta.enterprise.event.Observes;
20+
import jakarta.enterprise.inject.spi.BeanContainer;
2021
import jakarta.enterprise.inject.spi.BeanManager;
2122
import jakarta.enterprise.inject.spi.BeforeBeanDiscovery;
2223
import jakarta.enterprise.inject.spi.BeforeShutdown;
2324
import jakarta.enterprise.inject.spi.Extension;
25+
import jakarta.enterprise.inject.spi.el.ELAwareBeanManager;
26+
27+
import org.jboss.weld.manager.api.WeldManager;
2428

2529
public class SimpleExtension implements Extension {
2630

2731
private static boolean observedBeforeBeanDiscovery;
28-
29-
public void observe(@Observes BeforeBeanDiscovery event) {
30-
observedBeforeBeanDiscovery = true;
31-
}
32+
public static boolean observedBeforeBeanDiscoveryBc;
33+
public static boolean observedBeforeBeanDiscoveryBm;
34+
public static boolean observedBeforeBeanDiscoveryWm;
35+
public static boolean observedBeforeBeanDiscoveryElBm;
3236

3337
public static boolean isObservedBeforeBeanDiscovery() {
3438
return observedBeforeBeanDiscovery;
3539
}
3640

37-
public void observeBeforeShutdown(@Observes BeforeShutdown beforeShutdown, BeanManager beanManager) {
41+
public void observeBeforeShutdown(@Observes BeforeShutdown beforeShutdown, WeldManager beanManager) {
3842
assert beanManager != null;
3943
assert beanManager.getELResolver() != null;
4044
}
4145

46+
public void observeBeanManager(@Observes BeforeBeanDiscovery event) {
47+
observedBeforeBeanDiscovery = true;
48+
}
49+
50+
public void observeBeanManager(@Observes BeforeBeanDiscovery event, BeanManager bm) {
51+
observedBeforeBeanDiscoveryBm = true;
52+
assert bm != null;
53+
}
54+
55+
public void observeBeanManager(@Observes BeforeBeanDiscovery event, BeanContainer bc) {
56+
observedBeforeBeanDiscoveryBc = true;
57+
assert bc != null;
58+
}
59+
60+
public void observeBeanManager(@Observes BeforeBeanDiscovery event, WeldManager wm) {
61+
observedBeforeBeanDiscoveryWm = true;
62+
assert wm != null;
63+
}
64+
65+
public void observeBeanManager(@Observes BeforeBeanDiscovery event, ELAwareBeanManager bm) {
66+
observedBeforeBeanDiscoveryElBm = true;
67+
assert bm != null;
68+
}
69+
4270
}

0 commit comments

Comments
 (0)