Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WELD-2811 Allow to inject other BM subtypes into container lifecycle observer methods #3135

Merged
merged 1 commit into from
Mar 8, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
import jakarta.enterprise.inject.Disposes;
import jakarta.enterprise.inject.Instance;
import jakarta.enterprise.inject.Produces;
import jakarta.enterprise.inject.spi.BeanManager;
import jakarta.enterprise.inject.spi.BeanContainer;
import jakarta.enterprise.inject.spi.EventMetadata;
import jakarta.enterprise.inject.spi.ObserverMethod;
import jakarta.enterprise.inject.spi.WithAnnotations;
Expand Down Expand Up @@ -234,7 +234,7 @@ private <Y> void checkObserverMethod(EnhancedAnnotatedMethod<T, Y> annotated) {
// if this is an observer method for container lifecycle event, it must not inject anything besides BeanManager
if (containerLifecycleObserverMethod && !parameter.isAnnotationPresent(Observes.class)
&& !parameter.isAnnotationPresent(ObservesAsync.class)
&& !BeanManager.class.equals(parameter.getBaseType())) {
&& !parameter.getTypeClosure().contains(BeanContainer.class)) {
throw EventLogger.LOG.invalidInjectionPoint(this, Formats.formatAsStackTraceElement(annotated.getJavaMember()));
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,14 @@ public void testExtensionInjectableAsBean(SimpleExtension extension) {
assertTrue(extension.isObservedBeforeBeanDiscovery());
}

@Test
public void testBeanManagerInjectionAsOptionalParam() {
assertTrue(SimpleExtension.observedBeforeBeanDiscoveryBc);
assertTrue(SimpleExtension.observedBeforeBeanDiscoveryBm);
assertTrue(SimpleExtension.observedBeforeBeanDiscoveryWm);
assertTrue(SimpleExtension.observedBeforeBeanDiscoveryElBm);
}

/*
* description = "WELD-572"
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,26 +17,54 @@
package org.jboss.weld.tests.extensions;

import jakarta.enterprise.event.Observes;
import jakarta.enterprise.inject.spi.BeanContainer;
import jakarta.enterprise.inject.spi.BeanManager;
import jakarta.enterprise.inject.spi.BeforeBeanDiscovery;
import jakarta.enterprise.inject.spi.BeforeShutdown;
import jakarta.enterprise.inject.spi.Extension;
import jakarta.enterprise.inject.spi.el.ELAwareBeanManager;

import org.jboss.weld.manager.api.WeldManager;

public class SimpleExtension implements Extension {

private static boolean observedBeforeBeanDiscovery;

public void observe(@Observes BeforeBeanDiscovery event) {
observedBeforeBeanDiscovery = true;
}
public static boolean observedBeforeBeanDiscoveryBc;
public static boolean observedBeforeBeanDiscoveryBm;
public static boolean observedBeforeBeanDiscoveryWm;
public static boolean observedBeforeBeanDiscoveryElBm;

public static boolean isObservedBeforeBeanDiscovery() {
return observedBeforeBeanDiscovery;
}

public void observeBeforeShutdown(@Observes BeforeShutdown beforeShutdown, BeanManager beanManager) {
public void observeBeforeShutdown(@Observes BeforeShutdown beforeShutdown, WeldManager beanManager) {
assert beanManager != null;
assert beanManager.getELResolver() != null;
}

public void observeBeanManager(@Observes BeforeBeanDiscovery event) {
observedBeforeBeanDiscovery = true;
}

public void observeBeanManager(@Observes BeforeBeanDiscovery event, BeanManager bm) {
observedBeforeBeanDiscoveryBm = true;
assert bm != null;
}

public void observeBeanManager(@Observes BeforeBeanDiscovery event, BeanContainer bc) {
observedBeforeBeanDiscoveryBc = true;
assert bc != null;
}

public void observeBeanManager(@Observes BeforeBeanDiscovery event, WeldManager wm) {
observedBeforeBeanDiscoveryWm = true;
assert wm != null;
}

public void observeBeanManager(@Observes BeforeBeanDiscovery event, ELAwareBeanManager bm) {
observedBeforeBeanDiscoveryElBm = true;
assert bm != null;
}

}
Loading