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

Reply via email to