[
https://issues.apache.org/jira/browse/OWB-1442?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
ASF GitHub Bot updated OWB-1442:
--------------------------------
Labels: pull-request-available (was: )
> Derive AbstractOwbBean returnType from types instead of beanClass
> -----------------------------------------------------------------
>
> Key: OWB-1442
> URL: https://issues.apache.org/jira/browse/OWB-1442
> Project: OpenWebBeans
> Issue Type: Improvement
> Components: Core
> Affects Versions: 4.0.2
> Reporter: Markus Jung
> Priority: Major
> Labels: pull-request-available
>
> AbstractOwbBean#getReturnType() currently defaults to getBeanClass():
> [https://github.com/apache/openwebbeans/blob/main/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractOwbBean.java#L280]
>
> This works fine for normal managed beans - producer beans override this
> method as beanClass is nut suitable there. However there is a third case that
> probably isn't handled correctly: Synthetic beans registered with a portable
> extension. IMO the spec is ambiguous on what beanClass should mean here.
>
> CDI users tend to register beans with the beanClass pointing to the Extension
> that registered this synthetic bean. For example mojarra
> [https://github.com/eclipse-ee4j/mojarra/pull/5158]) and soteria
> ([https://github.com/eclipse-ee4j/soteria/pull/338]) do this. This causes OWB
> to proxy the wrong type.
>
> This issue originates from https://issues.apache.org/jira/browse/TOMEE-4355
> but I do believe this is nothing that should be fixed in TomEE. Mojarra is
> also not blame here as the spec just is not concise enough. IMO it would
> greatly benefit users if OWB would just allow a case like this to exist and
> proxy the correct type by resolving it from BeanAttributes#getTypes()
>
> Last but not least, a test says more than 1000 words ;)
> {code:java}
> public class SyntheticBeanMismatchedBeanClassTest extends AbstractUnitTest {
> @Test
> public void test() {
> addExtension(new MyExtension());
> startContainer();
> assertTrue(getInstance("myFirstBean") instanceof MyFirstBean);
> }
> public static class MyExtension implements Extension {
> public void afterBeanDiscovery(@Observes AfterBeanDiscovery abd,
> BeanManager bm) {
> abd.addBean()
> .beanClass(MyExtension.class)
> .scope(ApplicationScoped.class)
> .name("myFirstBean")
>
> .types(bm.createAnnotatedType(MyFirstBean.class).getTypeClosure())
> .createWith(ctx -> new MyFirstBean());
> }
> }
> public static class MyFirstBean { }
> }
> {code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)