This is an automated email from the ASF dual-hosted git repository. struberg pushed a commit to branch cdi-4.1 in repository https://gitbox.apache.org/repos/asf/openwebbeans.git
commit 0765c15b7465dbc4ee26814f0225ce1fe81e5baf Author: Mark Struberg <[email protected]> AuthorDate: Tue Oct 21 14:41:22 2025 +0200 OWB-1451 initial setup for CDI-4.1 * update to JakartaEE 11 spec API versions * add new TCK integration classes --- pom.xml | 17 +++-- .../apache/webbeans/el22/WebBeansELResolver.java | 12 +--- .../apache/webbeans/container/BeanManagerImpl.java | 21 ++++++ .../webbeans/container/InjectableBeanManager.java | 19 +++++ .../portable/events/ProcessManagedBeanImpl.java | 9 +++ .../portable/events/ProcessSessionBeanImpl.java | 10 +++ .../org/apache/webbeans/test/mock/MockManager.java | 19 +++++ .../apache/webbeans/test/tck/ContextualsImpl.java | 84 ++++++++++++++++++++++ .../webbeans/test/tck/CreationalContextsImpl.java | 80 +++++++++++++++++++++ .../src/test/resources/META-INF/cdi-tck.properties | 2 + 10 files changed, 256 insertions(+), 17 deletions(-) diff --git a/pom.xml b/pom.xml index f6b6cd7d7..d7ae09ec8 100644 --- a/pom.xml +++ b/pom.xml @@ -59,15 +59,15 @@ </issueManagement> <properties> - <maven.compiler.source>11</maven.compiler.source> - <maven.compiler.target>11</maven.compiler.target> + <maven.compiler.source>17</maven.compiler.source> + <maven.compiler.target>17</maven.compiler.target> <minimalJavaBuildVersion>${maven.compiler.source}</minimalJavaBuildVersion> <jakarta.atinject-api.version>2.0.1</jakarta.atinject-api.version> - <jakarta.cdi-api.version>4.0.1</jakarta.cdi-api.version> + <jakarta.cdi-api.version>4.1.0</jakarta.cdi-api.version> <jakarta.interceptor-api.version>2.1.0</jakarta.interceptor-api.version> - <jakarta.annotation-api.version>2.1.1</jakarta.annotation-api.version> - <jakarta.el-api.version>5.0.1</jakarta.el-api.version> + <jakarta.annotation-api.version>3.0.0</jakarta.annotation-api.version> + <jakarta.el-api.version>6.0.0</jakarta.el-api.version> <jakarta.transaction-api.version>2.0.1</jakarta.transaction-api.version> <jakarta.validation-api.version>3.0.2</jakarta.validation-api.version> <jakarta.ejb-api.version>4.0.1</jakarta.ejb-api.version> @@ -79,7 +79,7 @@ <httpclient.version>4.5.14</httpclient.version> <xbean.version>4.27</xbean.version> <arquillian.version>1.8.1.Final</arquillian.version> - <cdi.tck.version>4.0.13</cdi.tck.version> + <cdi.tck.version>4.1.0</cdi.tck.version> <osgi.servlet.range>4.0</osgi.servlet.range> <osgi.el.range>4.0</osgi.el.range> @@ -763,6 +763,11 @@ <artifactId>jakarta.enterprise.cdi-api</artifactId> <version>${jakarta.cdi-api.version}</version> </dependency> + <dependency> + <groupId>jakarta.enterprise</groupId> + <artifactId>jakarta.enterprise.cdi-el-api</artifactId> + <version>${jakarta.cdi-api.version}</version> + </dependency> <dependency> <groupId>jakarta.interceptor</groupId> diff --git a/webbeans-el22/src/main/java/org/apache/webbeans/el22/WebBeansELResolver.java b/webbeans-el22/src/main/java/org/apache/webbeans/el22/WebBeansELResolver.java index 6c6510bc1..f97cfcd0f 100644 --- a/webbeans-el22/src/main/java/org/apache/webbeans/el22/WebBeansELResolver.java +++ b/webbeans-el22/src/main/java/org/apache/webbeans/el22/WebBeansELResolver.java @@ -29,13 +29,12 @@ import org.apache.webbeans.config.WebBeansContext; import org.apache.webbeans.container.BeanManagerImpl; import org.apache.webbeans.el.ELContextStore; -import java.beans.FeatureDescriptor; import java.lang.reflect.Type; -import java.util.Iterator; import java.util.Set; import java.util.concurrent.CopyOnWriteArraySet; import java.util.stream.Collectors; + /** * JSF or JSP expression language a.k.a EL resolver. * @@ -73,15 +72,6 @@ public class WebBeansELResolver extends ELResolver return null; } - /** - * {@inheritDoc} - */ - @Override - public Iterator<FeatureDescriptor> getFeatureDescriptors(ELContext context, Object base) - { - return null; - } - /** * {@inheritDoc} */ diff --git a/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java b/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java index 3e7dbb298..d2950b5e5 100644 --- a/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java +++ b/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java @@ -1298,6 +1298,27 @@ public class BeanManagerImpl implements BeanManager, Referenceable return elAdaptor.getOwbWrappedExpressionFactory(expressionFactory); } + @Override + public Collection<Context> getContexts(Class<? extends Annotation> scopeType) + { + //X TODO + return List.of(); + } + + @Override + public boolean isMatchingBean(Set<Type> beanTypes, Set<Annotation> beanQualifiers, Type requiredType, Set<Annotation> requiredQualifiers) + { + //X TODO + return false; + } + + @Override + public boolean isMatchingEvent(Type specifiedType, Set<Annotation> specifiedQualifiers, Type observedEventType, Set<Annotation> observedEventQualifiers) + { + //X TODO + return false; + } + public void addAdditionalQualifier(Class<? extends Annotation> qualifier) { if (!additionalQualifiers.contains(qualifier)) diff --git a/webbeans-impl/src/main/java/org/apache/webbeans/container/InjectableBeanManager.java b/webbeans-impl/src/main/java/org/apache/webbeans/container/InjectableBeanManager.java index b3f86ef45..e5a8a98ac 100644 --- a/webbeans-impl/src/main/java/org/apache/webbeans/container/InjectableBeanManager.java +++ b/webbeans-impl/src/main/java/org/apache/webbeans/container/InjectableBeanManager.java @@ -24,6 +24,7 @@ import java.io.ObjectInput; import java.io.ObjectOutput; import java.lang.annotation.Annotation; import java.lang.reflect.Type; +import java.util.Collection; import java.util.List; import java.util.Set; @@ -358,6 +359,24 @@ public class InjectableBeanManager implements BeanManager, Externalizable return bm.getExtension(extensionClass); } + @Override + public Collection<Context> getContexts(Class<? extends Annotation> scopeType) + { + return bm.getContexts(scopeType); + } + + @Override + public boolean isMatchingBean(Set<Type> beanTypes, Set<Annotation> beanQualifiers, Type requiredType, Set<Annotation> requiredQualifiers) + { + return bm.isMatchingBean(beanTypes, beanQualifiers, requiredType, requiredQualifiers); + } + + @Override + public boolean isMatchingEvent(Type specifiedType, Set<Annotation> specifiedQualifiers, Type observedEventType, Set<Annotation> observedEventQualifiers) + { + return bm.isMatchingEvent(specifiedType, specifiedQualifiers, observedEventType, observedEventQualifiers); + } + @Override public void writeExternal(ObjectOutput out) throws IOException { diff --git a/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/ProcessManagedBeanImpl.java b/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/ProcessManagedBeanImpl.java index 431d6e75a..c95cd06e6 100644 --- a/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/ProcessManagedBeanImpl.java +++ b/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/ProcessManagedBeanImpl.java @@ -18,9 +18,12 @@ */ package org.apache.webbeans.portable.events; +import jakarta.enterprise.inject.spi.AnnotatedMethod; import jakarta.enterprise.inject.spi.AnnotatedType; import jakarta.enterprise.inject.spi.ProcessManagedBean; +import jakarta.enterprise.invoke.Invoker; +import jakarta.enterprise.invoke.InvokerBuilder; import org.apache.webbeans.component.ManagedBean; /** @@ -51,4 +54,10 @@ public class ProcessManagedBeanImpl<X> extends ProcessBeanImpl<X> implements Pro return annotatedBeanClass; } + @Override + public InvokerBuilder<Invoker<X, ?>> createInvoker(AnnotatedMethod<? super X> method) + { + //X TODO plus new InvokerBuilderImpl + return null; + } } diff --git a/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/ProcessSessionBeanImpl.java b/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/ProcessSessionBeanImpl.java index 0093127aa..8ba84e060 100644 --- a/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/ProcessSessionBeanImpl.java +++ b/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/ProcessSessionBeanImpl.java @@ -18,10 +18,13 @@ */ package org.apache.webbeans.portable.events; +import jakarta.enterprise.inject.spi.AnnotatedMethod; import jakarta.enterprise.inject.spi.AnnotatedType; import jakarta.enterprise.inject.spi.Bean; import jakarta.enterprise.inject.spi.ProcessSessionBean; import jakarta.enterprise.inject.spi.SessionBeanType; +import jakarta.enterprise.invoke.Invoker; +import jakarta.enterprise.invoke.InvokerBuilder; /** * Implementation of {@link ProcessSessionBean}. @@ -80,4 +83,11 @@ public class ProcessSessionBeanImpl<X> extends ProcessBeanImpl<Object> implement return annotatedBeanClass; } + @Override + public InvokerBuilder<Invoker<Object, ?>> createInvoker(AnnotatedMethod<? super Object> method) + { + //X TODO plus new InvokerBuilderImpl + return null; + } + } diff --git a/webbeans-impl/src/test/java/org/apache/webbeans/test/mock/MockManager.java b/webbeans-impl/src/test/java/org/apache/webbeans/test/mock/MockManager.java index dfb89342e..3b981af37 100644 --- a/webbeans-impl/src/test/java/org/apache/webbeans/test/mock/MockManager.java +++ b/webbeans-impl/src/test/java/org/apache/webbeans/test/mock/MockManager.java @@ -21,6 +21,7 @@ package org.apache.webbeans.test.mock; import java.lang.annotation.Annotation; import java.lang.reflect.Type; import java.util.ArrayList; +import java.util.Collection; import java.util.List; import java.util.Set; @@ -388,4 +389,22 @@ public class MockManager implements BeanManager { return manager.getExtension(extensionClass); } + + @Override + public Collection<Context> getContexts(Class<? extends Annotation> scopeType) + { + return manager.getContexts(scopeType); + } + + @Override + public boolean isMatchingBean(Set<Type> beanTypes, Set<Annotation> beanQualifiers, Type requiredType, Set<Annotation> requiredQualifiers) + { + return manager.isMatchingBean(beanTypes, beanQualifiers, requiredType, requiredQualifiers); + } + + @Override + public boolean isMatchingEvent(Type specifiedType, Set<Annotation> specifiedQualifiers, Type observedEventType, Set<Annotation> observedEventQualifiers) + { + return manager.isMatchingEvent(specifiedType, specifiedQualifiers, observedEventType, observedEventQualifiers); + } } diff --git a/webbeans-porting/src/main/java/org/apache/webbeans/test/tck/ContextualsImpl.java b/webbeans-porting/src/main/java/org/apache/webbeans/test/tck/ContextualsImpl.java new file mode 100644 index 000000000..92ecd91d0 --- /dev/null +++ b/webbeans-porting/src/main/java/org/apache/webbeans/test/tck/ContextualsImpl.java @@ -0,0 +1,84 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.webbeans.test.tck; + +import jakarta.enterprise.context.spi.Context; +import jakarta.enterprise.context.spi.CreationalContext; +import org.jboss.cdi.tck.spi.Contextuals; + +/** + * @author <a href="mailto:[email protected]">Mark Struberg</a> + */ +public class ContextualsImpl implements Contextuals +{ + + @Override + public <T> Inspectable<T> create(T instance, Context context) + { + return new InspectableImpl<>(instance, context); + } + + public static class InspectableImpl<T> implements Inspectable<T> + { + private final T instance; + private final Context context; + + private CreationalContext<T> ccCreate; + private CreationalContext<T> ccDestroy; + private T destroyedInstance; + + InspectableImpl(T instance, Context context) + { + this.instance = instance; + this.context = context; + } + + @Override + public CreationalContext<T> getCreationalContextPassedToCreate() + { + return ccCreate; + } + + @Override + public T getInstancePassedToDestroy() + { + return destroyedInstance; + } + + @Override + public CreationalContext<T> getCreationalContextPassedToDestroy() + { + return ccDestroy; + } + + @Override + public T create(CreationalContext<T> creationalContext) + { + ccCreate = creationalContext; + return instance; + } + + @Override + public void destroy(T instance, CreationalContext<T> creationalContext) + { + destroyedInstance = instance; + ccDestroy = creationalContext; + } + } +} diff --git a/webbeans-porting/src/main/java/org/apache/webbeans/test/tck/CreationalContextsImpl.java b/webbeans-porting/src/main/java/org/apache/webbeans/test/tck/CreationalContextsImpl.java new file mode 100644 index 000000000..b8b154fc6 --- /dev/null +++ b/webbeans-porting/src/main/java/org/apache/webbeans/test/tck/CreationalContextsImpl.java @@ -0,0 +1,80 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.webbeans.test.tck; + +import jakarta.enterprise.context.spi.Contextual; +import org.jboss.cdi.tck.spi.CreationalContexts; + +/** + * @author <a href="mailto:[email protected]">Mark Struberg</a> + */ +public class CreationalContextsImpl implements CreationalContexts +{ + + @Override + public <T> Inspectable<T> create(Contextual<T> contextual) + { + return new InspectableImpl<>(contextual); + } + + public static class InspectableImpl<T> implements CreationalContexts.Inspectable<T> + { + private final Contextual<T> instance; + private T lastPushedBean; + private boolean releaseCalled; + private boolean pushCalled; + + public InspectableImpl(Contextual<T> contextual) + { + this.instance = contextual; + } + + @Override + public Object getLastBeanPushed() + { + return lastPushedBean; + } + + @Override + public boolean isPushCalled() + { + return pushCalled; + } + + @Override + public boolean isReleaseCalled() + { + return releaseCalled; + } + + @Override + public void push(T incompleteInstance) + { + lastPushedBean = incompleteInstance; + pushCalled = true; + } + + @Override + public void release() + { + releaseCalled = true; + } + } + +} diff --git a/webbeans-tck/src/test/resources/META-INF/cdi-tck.properties b/webbeans-tck/src/test/resources/META-INF/cdi-tck.properties index 24f003c25..3f524fe0d 100644 --- a/webbeans-tck/src/test/resources/META-INF/cdi-tck.properties +++ b/webbeans-tck/src/test/resources/META-INF/cdi-tck.properties @@ -21,4 +21,6 @@ org.jboss.cdi.tck.testJmsQueue=java\:default org.jboss.cdi.tck.testJmsTopic=java\:default org.jboss.cdi.tck.spi.Beans=org.apache.webbeans.test.tck.BeansImpl org.jboss.cdi.tck.spi.Contexts=org.apache.webbeans.test.tck.ContextsImpl +org.jboss.cdi.tck.spi.Contextuals=org.apache.webbeans.test.tck.ContextualsImpl +org.jboss.cdi.tck.spi.CreationalContexts=org.apache.webbeans.test.tck.CreationalContextsImpl org.jboss.cdi.tck.spi.EL=org.apache.webbeans.test.tck.ELImpl
